2011-03-15 84 views
2

我有一些购物清单按订单排序。现在,我想合并所有列表,并保留排序顺序,以便在下次购物时按照“完美”顺序排序。我怎么做?如何根据以前的采购订单对购物清单进行排序?

实施例:
名单A:牙膏,面包,肉,蔬菜,牛奶,冰淇淋
列表B:光盘,面包,水果,蔬菜,果汁,糖,巧克力
列表C:肉类,果汁,牛奶,白砂糖

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

回答

2

您应该尝试Topological sorting。这是当您在一组项目上定义了部分订单(没有周期)时使用的排序。从最初的列表中,您将构建一些部分订单对,并在拓扑排序算法中使用这些对。

例如,你想从你最初的名单中提取以下信息:

  • 牙膏<面包
  • 面包<肉类
  • 肉类<蔬菜
  • 蔬菜<牛奶
  • 牛奶<冰面霜
  • 张光盘<面包

如果你没有得到一个周期(也叫做< B和B < A),你将能够构建所有项目的“好”的排序。

+0

太棒了!非常感谢!现在,当你指向正确的方向时,我甚至找到了一些示例代码。再次感谢。 – Tech 2011-03-15 12:30:12

+0

不客气:) – 2011-03-15 15:08:02

+0

@nanne感谢您的编辑。 – 2011-03-15 15:08:32