【发布时间】:2023-03-18 22:45:01
【问题描述】:
(这个问题与我的previous question有关,或者更确切地说与my answer有关。)
我想将所有自然数的 qube 存储在一个结构中,并查找特定的整数以查看它们是否是完美的立方体。
例如,
cubes = map (\x -> x*x*x) [1..]
is_cube n = n == (head $ dropWhile (<n) cubes)
它比计算立方根快得多,但它的复杂度为O(n^(1/3))(我说的对吗?)。
我认为,使用更复杂的数据结构会更好。
例如,在 C 中,我可以存储已经生成的数组的长度(不是列表 - 用于更快的索引)并进行二进制搜索。对于 that 问题,O(log n) 的效率低于another answer。问题是,我无法用 Haskell 表达它(而且我认为我不应该)。
或者我可以使用哈希函数(如mod)。但是我认为拥有多个列表(或列表的列表)会消耗更多内存,并且不会降低查找的复杂性(仍然是O(n^(1/3))),只是一个系数。
我想到了一种树,但没有任何聪明的想法(遗憾的是我从未学过 CS)。我认为,所有整数都在升序的事实会使我的树在查找时不平衡。
而且我很确定关于升序整数的这一事实对于查找来说可能是一个很大的优势,但我不知道如何正确使用它(请参阅我无法用 Haskell 表达的第一个解决方案)。
【问题讨论】:
标签: data-structures haskell lookup