Gauthamラジェッシュ:
私は今、しばらくの間、この質問について考えてきました。
リストがあるとしましょうs
人々が販売しているという本を含んでいます。私はで本を持っているs
、と私はしている本のために取引したいs
(私は持っていない何か)。
このシナリオでは一人一人が中に一冊の本を販売しているs
、ともにある1冊の本は欲しいですs
。
私が欲しいという本を取得(そしてそれをしたい人に私の本を与える)する人々の間で必要な取引の最小数を見つけるためのアルゴリズムはありますか?
これは混乱と思われる場合(それはおそらくですので)私に教えてください。
質問に答えるためにありがとう!
EDIT:リストはs
いつでも成長することができます。
btilly:
次のように私がグラフにこれを向けるだろう。書籍グラフのノードです。Sの誰かがブックBを提供し、あなたが持っている本から、あなたが本当にしたいことを本に最短経路を探している書籍Aを望んでいる場合は、ブックBへの本のAから有向エッジを持っています。
最短経路は、幅優先探索によって発見することができます。次のように1を実装することができます。
todo = [starting_book]
path = {starting_book: None}
while len(todo) and target_book not in path:
book = list.pop(0)
for next_book in neighbors(book):
if next_book not in path:
path[next_book] = book
todo.append(next_book)
if target_book in path:
solution = [target_book]
while solution[-1] != starting_book:
solution.append(path[solution[-1]])
else:
solution = None
注、私はここに提供していますという解決策が起こるために本取引の集合ではなく、人々を与えます。検索のいずれかによって行うことができると話をする人の中に特定の書籍の貿易背を向けs
たり、ルックアップテーブルで。
これはまた、オンラインのソリューションではありません-物事はへ/から削除追加される最短経路を追跡するs
多くの仕事になるだろう。