検索ツリーがあり、目標に対するすべてのソリューションを見つけようとしているとします。子が親ノードを生成できるようにツリーを剪定しないと、検索スペースが非常に大きくなります。だから誰かが私にこれを行う述語を見せてくれるか、私がPrologに非常に慣れていないので、それをどのように行うことができるかを説明してください。
質問する
500 次
1 に答える
2
最も簡単な方法は、おそらく、すでにアクセスしたノード (親、子など) を追跡する「検索」述語に追加の引数を追加し、前のノードへのアクセスを禁止する句を追加することです。
一部の用語は、明確にする価値があります。ツリーはサイクル (ループ) のないグラフであるため、「検索ツリー」では実際にノードを 2 回再訪する可能性はありません。
おそらく、あなたは目標へのある種の道を見つけており、解決策は可能な道です。「目標へのすべてのソリューション」を見つけるという規定された要件は、ノードを複数回再訪するパスを除外することで、ある程度緊張しています。ただし、ノードを再訪しないという制限が許可されていると仮定しましょう。
検索述語のコーディング方法についてさらに詳しく説明していただければ、「既にアクセスしたリスト」引数を追加する方法を具体的に示すことができます。
于 2012-05-24T16:00:36.427 に答える