1
4
“复制粘贴编码”(获取
然而,将字典转换成有意义的可比较条目的一次传递是O(n),它(即使传递的每个步骤都很简单)最终会淹没搜索的O(log n)时间。自从
如引用 here 答案在大卫惠勒的名言中,“计算机科学中的所有问题都可以通过另一个间接层次来解决”。考虑例如:
输出(只是运行这个
如您所见,即使在列表中有145个条目的中等任务中,间接方法的性能也可以比“密钥提取传递”方法高出三倍。由于我们比较了O(n)和O(log n),间接方法的优势随着n的增加而无限增长。(对于非常小的n,由于间接性,较高的乘法常数使键提取方法更快,但这很快就被大的o差所超越)。诚然,indexer类是额外的代码——但是,它可以在所有的二进制搜索任务中重用——在每个dict中按一个条目对dict列表进行排序,因此将其放在“容器实用程序的诀窍后面”中可以获得很好的投资回报。 对于主搜索循环来说就这么多了。对于将两个条目(一个位于目标下方,一个位于目标上方)和目标转换为若干秒的次要任务,再次考虑更高的重用方法,即:
这里,重用方法没有性能优势(事实上,相反,
|
2
4
你想要
bisect module
来自标准库。它将进行二进制搜索,并将新值的正确插入点告知已排序的列表。下面是一个示例,它将打印列表中的位置
从这里,您可以比较插入点前后的内容,在本例中是
|
3
2
|
4
1
首先,改成这个。
这就消除了很多“努力”。 把这当作搜索。
这似乎不是很“努力”。这也不取决于时间戳的格式是否正确。您可以更改为任何时间戳格式,并确保这始终有效。 |
callum · 如何识别数组中与给定序列不匹配的元素? 1 年前 |
Sab · 输入为空时,搜索结果元素未隐藏 2 年前 |
Chaz Cosby · 如何添加更改api地址的搜索栏? 2 年前 |
user3669555 · 多维数组搜索部分单词或短语并移除键 6 年前 |
Yohan · 根据用户输入显示或隐藏div 6 年前 |
Shasocais · Prolog,基本情况失败的问题 6 年前 |
Den · C#在列表框中搜索项目1 6 年前 |
Eugene Barsky · Perl 6中多针的索引 6 年前 |