`rlist`的优点是什么?

时间:2016-05-08 17:42:11

标签: python

为什么需要rlist数据结构?它有哪些优点?

如果示例显示为(4, (3, (2, (1, None)))),我会认为它可以扩展到(5, (4 (3, (2, (1, None))))),这就像任何其他链接列表一样完全合理。

但由于该示例为(1, (2, (3, (4, None)))),因此尽可能向外扩展(5, (1, (2, (3, (4, None))))),但似乎与所示数据的方向相反。我觉得这不是这种数据结构的意图。由于无法修改(4, None),因此无法扩展tuples

那么,这种数据结构的真正目的是什么?即使可以扩展它,我也不明白为什么它比(1, 2, 3, 4)更好!

由于课程改编自Scheme,他们是否试图展示Scheme的lists?如果是这样,Scheme的lists会增长还是静止?甚至Lisp的example显示cons构造如(cons 5 x)以显示(5 1 2 3)这对于像我这样的初学者来说实际上是违反直觉的。

我正在尝试适应这些点点滴滴,请帮忙!

1 个答案:

答案 0 :(得分:4)

这已在评论中提及,但将其发布为答案:

递归列表(与方案无关)在两种情况下很有用:

  1. 当您需要不可变的数据结构(例如,用于并行性或在函数式编程中)

  2. 当您需要高效地表示许多共享同一尾巴的列表(例如一棵树)

这是因为它们允许在不修改原始列表的情况下扩展列表

在图形中查找路径时可能会出现这种情况。举例来说,假设您要寻找从房屋到工作地点的N条最佳路径(例如Google Maps),则开始从工作地点(目的地)搜索,并考虑不同的街道,向后移动直到找到房子。 1

这里发生的是,许多路径将共享相同的“后缀”,因此,您只希望共享这些部分并表示一次,以节省内存(因为您没有重复的路径)和时间(因为您不必花时间复制上一个路径就可以添加另一个前缀)。

现在,您可能会想:“为什么我想要的到达目的地的路径不止几个?”好吧,如果“您”只是在给定的时间点将您称为一个人,那么可能就不想。但是,如果您要尝试在不同的流量条件下(例如,在不同的时间点)模拟许多驱动程序,那么突然节省内存和计算时间将很重要,并且可以共享部分数据结构并继续构建并行排列它们的顶部可以产生巨大的差异。

1 您也可以使用某些算法向前搜索,但是向后搜索则更为通用。无论如何,这里的方向并不重要。