这是一个家庭作业问题。所以我正在寻找提示而不是解决方案。考虑一组n个数字。每个号码都是' k'数字长。假设''更大,不适合单个记忆单词。在这种情况下,mergesort和基数排序的复杂性是什么?
我的分析是 - 渐近复杂度并不依赖于底层架构细节,例如数字所占的单词数等。可能是常数因素变化和算法运行较慢,但整体复杂性保持不变。例如,在像Python这样处理任意长整数的语言中,算法保持不变。但是我的一些朋友认为,由于一个数字所占的单词数量很多。向无限增长,复杂性确实发生变化。
我是在正确的道路上吗?
答案 0 :(得分:1)
算法的运行时间确实取决于构成输入的机器字的数量。例如,采用整数乘法。计算机可以在时间O(1)中计算两个单字数的乘积,但是它不能在时间O(1)中计算两个任意大小的数字的乘积,因为机器必须将每个单词加载到记忆作为其计算的一部分。
作为基数排序与mergesort的提示 - mergesort算法在元素之间进行O(n log n)比较,但这些比较可能不需要花费时间O(1)。比较两个需要k机字的数字需要多长时间?类似地,基数排序的运行时间取决于数字中的位数。如果每个数字中有k个机器字,你需要多少轮基数排序?
希望这有帮助!
答案 1 :(得分:1)
你有点正确。这是大多数复杂性分析(在某处,至少是隐含地)表明它使用某些基本操作的计数而不是实际时间的原因的很大一部分。您通常认为大多数(如果不是全部)这些基本操作(例如,比较,交换,数学,如加法或减法等)都是恒定时间,这使您几乎可以直接从操作计数(实际复杂性)消耗的时间。
然而,为了完全准确,渐近复杂度(通常)应根据基本操作的计数来指定,但不是实际消耗的时间。