如何根据之前的选择顺序对购物清单进行排序?

时间:2011-03-15 10:47:20

标签: java algorithm sorting

我有一些按照订单排序的购物清单。现在我想合并所有列表,保持排序顺序,从而产生一个按照“完美”选择顺序排序的列表,供我下次购物时使用。我该怎么做?

例:
清单A:牙膏,面包,肉类,蔬菜,牛奶,冰淇淋
清单B:CD,面包,水果,蔬菜,果汁,糖,巧克力
清单C:肉类,果汁,牛奶,糖

会导致:
(牙膏,CDs),面包,肉类,水果,蔬菜,榨汁,牛奶,糖,(冰淇淋,巧克力)
括号内的项目在括号内有未知的排序顺序。

1 个答案:

答案 0 :(得分:2)

您应该尝试Topological sorting。当您在一组项目上定义了部分订单(无循环)时,将使用此排序。从初始列表中,您将构建一些偏序对,并在拓扑排序算法中使用这些对。

例如,您将从初始列表中提取以下信息:

  • 牙膏<面包
  • 面包<肉
  • 肉类<蔬菜
  • 蔬菜<乳
  • 牛奶<冰淇淋
  • CD<面包

如果你没有得到一个循环(又名A< B和B< A),你将能够构建所有项目的“良好”排序。