私は約200,000語のSQLデータベースを持っています。私はアナグラムの種類を解決することができるクエリが必要です。違いは、入力された文字で可能なすべての単語が必要なことです。たとえば、ofdgを入力すると、do,go、dogのように出力されます。このようなクエリにかかる時間を見積もることはできますか?どのようにしてより迅速かつ効率的にすることができますか?また、一般的には、200000行のデータベースを解析するにはどのくらい時間がかかりますか?SQLアナグラムの効率とロジックは?
答えて
この問題を解決するには、まず、すべての単語をスクラブルプレイヤーがアルファグラムと呼ぶように減らします。つまり、単語内のすべての文字がアルファベット順に表示されます。従ってdo
,go
及びdog
は、do
,go
及びdgo
となる。勿論、任意の所与のアルファグラムは2つ以上のワードに対応することができるので、例えば、dgo
のアルファベットは、dog
およびgod
の両方のワードに対応する。
あなたがする必要がある次のことは、キーalphagram-シーケンス番号と、単一の属性フィールド語でテーブルを構築しています。
単語リストは静的である傾向があります。例えば、英語を話す世界の2つのスクラブル単語リストは、約5年ごとに変化します。したがって、このルックアップテーブルをあらかじめ作成する必要があります。性能はO(n)であり、沈んでいます。つまり、一度だけ実行して保存するため、クエリのコストにはカウントされません。 にはがあります。クエリが入るたびにそのようなインデックスを素早く作成するのは絶対に意味がありません。
あなたは「スクラブルについては何ですか?」と疑問に思うかもしれません。答えは、英語圏の世界で2つの承認されたトーナメントの単語リストの間に200,000語の数字がきれいに収まるということです。米国ナショナルスクラブル協会の公式トーナメントおよびクラブワードリスト(2006)には178,691語が含まれており、世界英語スクラブルプレイヤー協会が管理する国際的なリストには246,691件が含まれています。
クエリを取得すると、指定された単語が一連のアルファグラムに縮小されます。入力odfg
はod
fo
go
df
dg
fg
dfo
dgo
fgo
dfg
dfgo
alphagramsなります(純粋なSQLではかなりのプログラミングの問題ですので、私はあなたのためにそれを行うだろうPHPやPythonやJavaScriptフロントエンドがあると仮定する必要があります)。次に、データベース内でルックアップを行います。各クエリのコストは、約O(log2 n)である必要があります。そのようなクエリは、リレーショナルデータベースが優れているものです。
ご参考までに、出力例が悪いです。 Alphagram dfgo
Scrabbleのプレイヤーが「ビルド」と呼ぶもの(すべての可能なサブセット)は、do
od
go
dog
god
fog
です。
(私はこのリグマロールをする必要はありませんが、ハスブロの弁護士は敏感ですので、ScrabbleはHasbro、Inc。が米国に所有する登録商標、Hasbro Canada Corporationはカナダ、残りはJW Spearの世界&マテル社のSons
これは素晴らしい解説ですBoar Gules本当に助けてくれてありがとうございます。 –
まあ、長さがn
という単語の可能な文字の組み合わせの数はn!
です。どうやら短い単語がほしいと思うようにいくつかの選択肢がありますが、これはあまり一般的な変更ではありません。O(n!)
の関係です。だから、すべての組み合わせを試し、データベースでそれを調べる単純なアルゴリズムは複雑さを持つでしょう。
アルゴリズムをより効率的にすることは、明らかに検索スペースを減らすことです。これにはいくつかのオプションがあります。
200.000行の表を検索するには、そこに格納されているデータの種類、形式、およびその表の索引によって異なります。
- 1. SQLグラフ効率
- 2. SQL ROWNUMBER効率
- 3. SQL照会の効率チェック
- 4. SQL Serverの - 効率的
- 5. SQL効率の行またはテーブル
- 6. 効率的なSQLクエリ
- 7. SQL計算フィールド効率
- 8. C#/ SQLの効率性のクエリ
- 9. 関数によるSQLの効率
- 10. 異なるSQLクエリの効率
- 11. リーダーボード用の効率的なSQLクエリ/スキーマ
- 12. リソースと効率
- 13. ルビーキャッチスローと効率
- 14. Droolsはビジネスルール/ロジックをマッピングする最も効率的な方法ですか?
- 15. SQLデザイン/ロジック
- 16. SQLロジック:A.FID = B.ID
- 17. PHP読み込みファイル対SQL効率
- 18. 最も効率的なSQL、DISTINCT、WHERE ... AND
- 19. さらに効率的なSQLクエリ
- 20. Linq to sql効率的なソリューション
- 21. スタッキングとキューイング:効率
- 22. pg_fetch_allとpg_fetch_assoc効率
- 23. SQL Serverのカーソル、ループとセットベースのロジック
- 24. SQL:1999での効率的なカウントとグループ化
- 25. Microsoft SQL Server 2008におけるJOINとAPPLYの相対効率
- 26. 効率的なプロセスのSQL Serverと数値法ライブラリ
- 27. 列が別の列と等しい効率的なSQLクエリ
- 28. 実行効率の違い:1つのSQL VS. 2分割SQL
- 29. Pythonは効率
- 30. SQLと条件付きロジックの場所
あなたのスキーマはどのように見えますか?何を試しましたか?これは私の宿題のようなにおいがする。 – Flimzy