如何在SML / NJ中优化列表搜索?

时间:2015-04-27 17:28:40

标签: arrays list tuples time-complexity sml

我正在用SML / NJ编写一段代码,并且在某些时候需要访问我已创建的列表。我知道,例如,在C中,访问数组需要花费不变的时间。所以,我认为ML也是如此。但是,显然,内置的List.nth(l,i)函数的复杂度与作为参数给出的列表大小成线性关系。

然后我转向数组,但我认为Array.sub函数也具有线性复杂性。

所以,鉴于访问一个元组,如#2(12,5.6," foo"),具有O(1)复杂度,我想问一下是否有办法,我可以使用元组而不是列表,但可以动态访问它。

例如,假设我想编写一个带有元组的函数,只有布尔值和一个整数n,如果元组的第n个元素为真,则返回True。如下:

fun isTrue (n,tup) =
if #n(tup) then true
else false;

我知道这不是有效的SML,所以有没有办法编写这样的函数?

非常感谢你的时间!

1 个答案:

答案 0 :(得分:0)

sml函数具有O(1)复杂度,因此请随意使用它! e.x。

st_atime

就元组而言,您只能使用特定数字,而不能使用元组中的变量。 e.x.    `fun isTrue (n,tup) = if Array.sub(tup,n) then true else false;`