计算跳过列表的平均搜索时间的Ruby函数

计算跳过列表的平均搜索时间的Ruby函数,ruby,skip-lists,Ruby,Skip Lists,我正在尝试编写一个ruby函数来确定跳过列表的平均预期搜索时间。我没有很强的数学背景,我相信我从这个函数得到的结果是不正确的 n=列表中的元素数 base=提升概率的分母。i、 e.如果提升了4个节点中的1个,则基数=4 def lookup_eficiency(n, base) return (Math.log(n, base)*(base/2.0)) end 我如何用Ruby表示一个等式,它将获取跳过列表中的元素数和一个基数,并返回平均搜索时间?既然跳过列表查找的复杂性是O(logba

我正在尝试编写一个ruby函数来确定跳过列表的平均预期搜索时间。我没有很强的数学背景,我相信我从这个函数得到的结果是不正确的

n
=列表中的元素数

base
=提升概率的分母。i、 e.如果提升了4个节点中的1个,则基数=4

def lookup_eficiency(n, base)
  return (Math.log(n, base)*(base/2.0))
end

我如何用Ruby表示一个等式,它将获取跳过列表中的元素数和一个基数,并返回平均搜索时间?

既然跳过列表查找的复杂性是O(logbase(n/base)),那么这个呢

def lookup_efficiency(n, base)
  Math.log(n/base)/Math.log(base)
end

确保你的基数是一个浮点数,这样你就不会得到整数除法了

那又怎样?你的问题是什么?对不起,我以为这是暗示,但我只是编辑了问题使其明确。如果你想测量函数的速度,你可以使用模块
基准测试
。这回答了你问题的一部分吗?不完全正确。我想使用此函数计算理论跳过列表的预期操作数。我正在用C编写跳过列表本身。我希望能够确定跳过列表的理论搜索时间,该列表具有不同的节点数量和节点提升概率(即提升1/2个节点与提升1/4、1/8等)。但我不知道有多少人搜索理论数据!最好得到一组您期望实际出现的具有代表性的术语,并针对这些术语运行一些几乎真实的测试。(这很重要,因为在处理实际数据时,经常有函数比预期的更好,甚至比预期的更差。)为什么不直接调用
base.to_f
?如果你已经有了一个浮点数,那就没有了。你说得对。我只是想不要用OP所需的基本功能来混乱代码,而是提及它。谢谢你,但我在测试你的功能时,得到的结果似乎是错误的。例如,对于包含1000个元素且提升概率为1/10(
n=1000
base=10
)的跳过列表,函数返回
2.0
。如果
base=20
函数返回
1.306…
。我认为这是不正确的,因为在任何
n>base
的列表中,搜索操作平均只需要访问“底部列表”上的大约
base/2
节点。糟糕的是,似乎我把搜索查找时间与存储列表所需的空间弄错了。根据最坏的情况是O(n),最好的情况是O(logn)。这是一个相当大的范围,你无法确定哪个计算更准确(尽管我怀疑你添加的级别越多,它会倾向于O(logn))。我建议计算出最好和最坏的情况,并根据这两种情况做出决定。