arrays - 有什么方法可以通知编译器数组已排序,以便可以更快地完成搜索?
问题描述
想象一下,我有以下两个数组:
let array1 = [1,4,6,9,12,18]
let array2 = [6,9,4,18,12,1]
现在我想找到的索引9
array1.index(of:9) // 3
array2.index(of:9) // 1
有没有办法告诉编译器“不像array2,你需要一个一个地查找所有索引,array1已经排序,所以你可以节省时间并做一个binarySearch”
也许是这样的:
array1.index(of : 9, isSorted : true)
array2.index(of : 9, isSorted : false)
解决方案
没有。但是你可以自己实现它。
原则上,Array
可以实现自动管理。它可能有一个isSorted
标志,默认情况下为空数组设置,在任何违反排序顺序的操作完成时重置,并在任何时候sort
调用设置。然后,任何对排序数据具有更优化实现的函数都可以检查这个标志,根据需要执行优化或通用算法。
但是,我怀疑这种簿记的成本(几乎所有业务都支付)将超过有限的收益(仅由某些业务获得)。
推荐阅读
- python - 无法在 RasberryPi Python 上安装 Open-CV
- c# - 如何在 WCF 中打开多个 http 端点?
- reactjs - 如何在 framer-motion styled-component 上定义道具?(PSA)
- java - 在 Android Studio 的 VideoCapture 中检查输入
- web-scraping - 搜索引擎如何在不被阻止的情况下抓取 Instagram 关注者?
- sql - 如何在 SQL Server 和节点中上传图像和其他数据?
- python - 在项目内运行“诗歌添加”后诗歌 pyproject.toml 未更新
- html - 如何解决html表格中的行不连续(python fpdf2生成PDF文档)
- javascript - eCharts Canvas 不会在 .resize() 上设置高度动画
- python - 缩放图像后如何获得平滑的直方图?