【问题标题】:How to optimize a list search in SML/NJ?如何优化 SML/NJ 中的列表搜索?
【发布时间】:2015-07-06 07:01:27
【问题描述】:

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

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

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

例如,假设我想编写一个函数,它接受一个元组,只有布尔值和一个整数 n,如果元组的第 n 个元素为 true,则返回 True。类似:

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

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

非常感谢您抽出宝贵时间!

【问题讨论】:

  • “我认为 Array.sub 函数也具有线性复杂性。”你为什么这么认为?

标签: arrays list tuples time-complexity sml


【解决方案1】:

sml 函数的复杂度为 O(1),所以请随意使用! 例如

`fun isTrue (n,tup) =
if Array.sub(tup,n) then true
else false;`

就元组而言,只能使用特定的数字,不能使用元组中的变量。 前任。 fun isTrue (n,tup) = if #2 (tup) then true else false;

【讨论】:

  • if ... then true else false 是多余的。如果您的目标是强制 ... 是布尔值,那么您可以使用 : bool
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2014-05-23
  • 2021-11-09
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
相关资源
最近更新 更多