主要观点:作者的老朋友带家人来东京,周末一起在代代木公园散步时讲了一个从同事那听到的数学谜题,作者起初觉得熟悉并快速解出,后来明白与搜索相关。该谜题是将世界人口约 80 亿人排成一行,每个人如果比前面的人都高就是“目前最高”,求平均有多少人是“目前最高”,答案约为 23.4 。此问题与搜索中的 Top-K 算法相关,通常的 Top-K 算法用最小堆维护前 K 个文档,其平均复杂度为Θ(n + kln(n)ln(k)),而 Tantivy 采用不同的算法,复杂度为θ(n + kln(k)),通过填充大小为 2k 的缓冲区并使用中位数算法来更新阈值,最后对 k 个元素排序。还对两种算法在不同 k 值下的平均情况和最坏情况的性能进行了测试。
关键信息:世界人口约 80 亿人排成行找“目前最高”的人;与搜索中 Top-K 算法相关;两种算法的复杂度及实现;不同 k 值下两种算法的性能测试结果。
重要细节:定义随机变量 Xi 表示第 i 个位置的人是否为“目前最高”;介绍 Top-K 算法用最小堆维护前 K 个文档及通常实现;给出 Tantivy 算法用缓冲区和中位数算法更新阈值及实现;展示不同 k 值下两种算法在平均情况和最坏情况的性能测试数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。