- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想:
计算 k 路归并排序对数字从 0 到 N-1 的随机排列进行排序所需的比较次数。
计算 K-Way 归并排序对数字从 0 到 N-1 的随机排列进行排序所需的数据移动次数。
我了解 2 向归并排序如何正确工作,并且非常了解代码。我现在的问题是我不知道如何开始。如何将 2-way 归并排序转换为 K-Way 才能解决上述问题?
我在网上搜索过,但找不到任何教程来很好地解释“k-Way 归并排序”。
我需要很好的解释该做什么,以便我可以从那里得到它并自己做。
就像我说的,我了解 2-Way,那么我如何转向 K-Way 归并排序?我如何实现 K-way?
我读了一些帖子 http://bchalk.com/work/view/k_way_merge_sort必须使用 BinaryHeap 来实现 k-Way 合并。是这样还是有其他方法?
如何将我的列表分成 K 个?有什么特殊的方法吗?
最佳答案
当 k > 2
时,每个输入流的前导元素通常保存在最小堆结构中。这使得查找 n 值的最小值、将该值从堆中弹出并从相应的输入流中插入替换值变得容易。
堆为每次插入执行 O(lg2 k)
比较,因此 n 项的 k 路合并的总工作量为 n * lg2(k)
.
即使您询问了 C# 和 Java,您也可以通过查看用于 k 向合并的 Python 标准库代码来了解如何做到这一点:http://hg.python.org/cpython/file/2.7/Lib/heapq.py#l323
要回答您的其他问题,没有特殊的方法可以将您的列表分成 K 组。只需取第一个数组中的前 N/k 个元素,接下来的 N/k 个元素放入下一个,依此类推。对每个数组进行排序,然后使用上面提到的堆合并它们。
关于c# - 理解和解决 K-Way 归并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7948989/
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!