给k排序倒排列表,我想要一个有效的算法来获得这些k列表的联合? 每个反转列表是内存中的只读数组,每个列表都包含按排序顺序的整数。 结果将被保存在足够大的预定义数组中。有什么算法比k路合并更好吗?倒排列表联盟
Q
倒排列表联盟
2
A
回答
2
K-Way合并是最佳的。它有O(log(k)*n)
ops [其中n
是组合的所有列表中的元素数量]。
这是很容易看到它不能做的更好 - 因为@jpalecek提到的,否则你可能会整理所有阵列更好,然后通过O(nlogn)
其分割成大小1.
- 注意大块[倒排索引]:这个答案假定重要的是倒排索引 [结果数组]将被排序。对于使用倒排索引的大多数 应用程序,这种假设是正确的,尤其是在信息检索区域。此功能[排序索引]允许 优雅和快速交叉的索引。
- 注意:标准的k-way合并允许重复,你将不得不 确保如果一个元素出现在两个列表中,它将会只添加一次 [容易做到这一点只需检查最后一个元素 添加前的目标数组]。
-1
如果你不需要对结果数组进行排序,最好的方法是使用散列表来标记你看过的元素。这样,你可以得到O(n)
(n
是元素的总数)的时间复杂度。
沿(Perl的)东西线:
my %seen;
@merged = grep { exists $seen{$_} ? 0 : ($seen{$_} = 1) } (map {(@$_)} @inputs);
都包含在一个列表什么样的价值观,什么意思
+0
倒排索引默认排序 - 结果不会是倒排索引。 – amit 2012-02-26 15:42:49
相关问题
- 1. 联盟两列表
- 2. TSQL排序联盟
- 3. MySQL表联盟和新列
- 4. F#联盟类型列表
- 5. Angularjs筛选联盟列表
- 6. 联盟阵列
- 7. 联盟表
- 8. 在联盟条款排序
- 9. n列表m列的SQLite联盟
- 10. 联盟的联盟与联盟的联盟
- 11. 联盟或不联盟
- 12. 使一些列表联盟在C#
- 13. 两个链接列表的联盟
- 14. 带联盟查询的下拉列表
- 15. 联盟3表与特定列
- 16. 联盟两列表按属性
- 17. 联盟在C#中列出
- 18. 联盟合并不同列
- 19. 联盟2列出的
- 20. 联盟
- 21. 联盟
- 22. 没有htonl/ntohl的联盟和排序
- 23. 与联盟和空值排序SQL Server
- 24. Mysql - 联盟显示表?
- 25. 联盟“表”使用awk
- 26. MySQL联盟丢失表名
- 27. 联盟在数据表
- 28. Mysql体育联盟表
- 29. 联盟表的布局
- 30. JavaScript联盟对联盟查找
将被倒置? – sizzzzlerz 2012-02-26 15:10:19
(1)请注意,k-way合并不会这样做,因为可能会在元素之间产生混淆,您需要删除这些元素。 (2)你如何实现倒排索引?数组?一棵B +树? – amit 2012-02-26 15:10:26
@amit一个排序的数组。 – 2012-02-26 15:14:00