【发布时间】:2013-01-10 20:48:04
【问题描述】:
有许多算法可以生成一组给定值的所有可能排列。通常,这些值表示为具有 O(1) 随机访问权限的数组。
但是,假设要置换的元素表示为双向链表。在这种情况下,您无法在 O(1) 时间内随机访问列表中的元素,因此许多置换算法会出现不必要的减速。
是否有一种算法可以以尽可能少的时间和空间开销生成链表的所有可能排列?
【问题讨论】:
-
事实上,生成所有排列的典型算法可以正常工作。
-
@izomorphius 因为链表访问是 O(n) 它可能会慢一些数量级。
-
生成所有排列的算法具有 O(1) 的平均复杂度,而不是每个下一个排列调用。我会尝试添加一个答案。
-
一个想法可能是创建一个指向链表节点的指针数组。花费 O(n) 时间。然后在该数组上使用置换算法会提高时间复杂度。
-
从链表中创建一个数组作为预处理,然后对数组使用“黑盒”算法的开销可以忽略不计,考虑到生成所有可能排列的计算复杂度。
标签: algorithm data-structures linked-list complexity-theory permutation