この質問に対する答えは、ソリューションが実装されているドメインによって異なります。
たまたま物理的な干し草の山で物理的な検索をシミュレートした場合、次のクラスがある可能性があります
空間
は、どのオブジェクトがどの座標に配置されているかを認識しており
、自然の法則を実装しています (エネルギーの変換、衝突の検出など)。
針、ストロー
はスペースにあり、
力に反応し ます
シーカー
は空間と相互作用します:
手を動かし、磁場を適用し、干し草を燃やし、X 線を照射し、針を探します...
したがって seeker.find(needle, space)
、または seeker.find(needle, space, strategy)
干し草の山は、たまたま針を探している場所にあります。一種の仮想マシン (マトリックスと考えてください) としてスペースを抽象化すると、スペースの代わりにヘイスタックを使用して上記を取得できます(ソリューション 3/3b) :
seeker.find(needle, haystack)
また seeker.find(needle, haystack, strategy)
しかし、マトリックスはドメインであり、針が他の場所にない場合にのみ、干し草の山に置き換える必要があります.
繰り返しになりますが、それは単なるアナロジーでした。興味深いことに、これはまったく新しい方向性への心を開きます:
1. そもそもなぜ針を緩めたのですか? 紛失しないようにプロセスを変更できますか?
2. なくした針を見つけなければなりませんか、それとも別の針を手に入れて最初の針を忘れることができますか? (その後、しばらくして針が溶ければいいのですが)
3. 定期的に針をなくし、もう一度見つける必要がある場合
自分自身を見つけることができる針を作ります。たとえば、針は定期的に自問します。答えが「はい」の場合、GPS で計算された位置を誰かに送信するか、ビープ音などを鳴らし始めます。
needle.find(space)
またはneedle.find(haystack)
(解決策 1)
各ストローにカメラ付きの干し草の山を設置します。その後、干し草の山に最近針を見たかどうかを尋ねることができます:
haystack.find(needle) (解決策 2)
針に RFID タグを取り付けて、簡単に三角測量を行うことができます
あなたの実装では、針と干し草の山、そしてほとんどの場合、何らかのレベルでマトリックスを作成したと言っているだけです。
したがって、ドメインに応じて決定します。
- 干し草の山に針を入れるのが目的ですか? 次に、解決策 2 に進みます。
- 針がどこかに落ちてしまうのは当然ですか?次に、解決策 1 に進みます。
- うっかり干し草の山に針が落ちてしまいませんか?次に、解決策 3 に進みます (または、別の回復戦略を検討してください)。