java – 查找人与人之间交易次数最少的算法
发布时间:2020-12-15 08:28:02 所属栏目:Java 来源:网络整理
导读:我一直在思考这个问题. 假设有一个列表包含人们正在销售的书籍.我有一本书,我想买一本书中的书(我没有的东西). 在这种情况下,每个人都在用s销售一本书,并且还想要一本书中的书. 是否有算法可以找出人们之间为获得我想要的书所需的最少交易数量(并将我的书提
我一直在思考这个问题.
假设有一个列表包含人们正在销售的书籍.我有一本书,我想买一本书中的书(我没有的东西). 在这种情况下,每个人都在用s销售一本书,并且还想要一本书中的书. 是否有算法可以找出人们之间为获得我想要的书所需的最少交易数量(并将我的书提供给想要的人)? 请告诉我这是否令人困惑(因为它可能是). 谢谢你回答这个问题! 编辑:列表可以随时增长. 解决方法
我会把它变成一个图表,如下所示.书籍是图表的节点.如果S中有人提供书籍B并且想要书籍A,那么你就有了从书A到书B的有针对性的优势.你正在寻找从你所拥有的书到你真正想要的书的最短路径.
可以通过广度优先搜索来发现最短路径.您可以按如下方式实现: 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中添加/删除的东西将是很多工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |