目标:以函数方式对序列进行排序,而不使用内置的 sorted(..)
函数。
def my_sorted(seq):
"""returns an iterator"""
pass
动机:在 FP 方式中,我受到限制:
- 永远不要改变
seq
(可以是迭代器或实现的列表) - 暗示,没有就地排序。
问题 1 由于我无法改变 seq
,因此我需要维护一个单独的可变数据结构来存储排序序列。与就地 list.sort()
相比,这似乎很浪费。其他函数式编程语言如何处理这个问题?
问题 2 如果我返回一个可变序列,在函数范式中可以吗?
最佳答案
当然,排序不能完全是惰性的(输入的最后一个元素可能是输出的第一个元素),但是您可以实现计算惰性排序,在读取整个序列后,仅根据请求逐个元素生成精确排序的输出。您还可以延迟读取输入,直到至少请求一个输出,这样排序和忽略结果将不需要计算。
对于这种计算惰性的方法,我所知道的最佳候选者是堆排序算法(您只需预先执行堆构建步骤)。
关于python - 如果我使用函数范式对序列进行排序,那么制作副本不是浪费吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700026/