1
9
您不太可能比内置数组和列表做得更好,因为它们是用C编写的,除非您绑定到自己的迭代器本机实现。数组的行为几乎与c中的数组(包含一系列元素值的连续分配内存块)完全相同,可能由于装箱而有一些额外的指针间接指向。list正是按照您的预期实现的:作为带有值和“next”指针的单元格。数组将为未绑定类型(特别是
有关数组和列表实现的信息,请参见
Section 18.3 of the OCaml manual
以及档案
发问者
事实上,
所以,我会选择
|
2
8
要确定,你必须测量 . 根据编译器可能生成的机器指令,我会尝试一个数组,然后是一个列表。
具体的速度可能取决于您的应用程序和您的计算机上正在发生的其他事情。它们还取决于元素的类型;例如,如果它们是浮点数,
其他常见的数据结构(如哈希表或平衡树)通常要求您在某个地方分配一些上下文以跟踪您的位置。对于数组,保持跟踪只需要一个整数索引;对于列表,保持跟踪需要一个指针。我认为这在另一个数据结构中是很难克服的。
最后请注意,可能只有一个ocaml编译器,但它有
二
后端:字节码和本机代码。当然,如果您关心这个性能级别,您将使用本机代码
请测量并将结果编辑到您的问题中。 |
3
6
别忘了
|
4
3
数组-一个按顺序访问的项目的线性内存块-最好使用CPU的一级数据缓存。 |
5
1
所有常见的数据结构在o(n)时间内都是可iterable的,因此数据结构之间的差异将只是常数(而且很可能不显著)。 至少列表和数组允许迭代,而不需要很大的开销。我想不出那种情况会不够快。 |
Tosh · ocaml获取语法错误[已关闭] 6 年前 |
Beta Ziliani · OCaml-与类型别名混淆(警告40) 6 年前 |
Jheel rathod · 带有构造函数的ocaml递归类型记录 6 年前 |
HegoDamask · (OCaml:非穷举模式匹配) 6 年前 |
Flux · 如何以静默方式加载顶级模块 6 年前 |
Flux · 如何编写显示HTML或重定向到其他页面的服务 6 年前 |
Daiwen · ocaml中GADT的异构列表[重复] 6 年前 |
nejifnjalz · OCaml语法错误-有趣的模式匹配 6 年前 |
M. Walker · 无法键入多态[%bs.raw函数 6 年前 |