比较两个数字的时间复杂度

时间:2017-12-08 15:20:50

标签: algorithm time-complexity

我正在尝试建立一个涉及数字比较的算法的时间复杂度。

假设我有两个数字A和B,其中两个数字分别有N个数字。假设它也保持A <= K且B <= K

现在我想比较A&lt; = B(如果A小于或等于B)。

我怀疑时间复杂度是O(N)或O(K)。

正确的时间复杂度是什么?

3 个答案:

答案 0 :(得分:2)

知道A,B&lt; = K并没有真正帮助。

您可以通过从左到右比较所有数字来结束,直到找到差异,这将在最差的O(N)比较中进行。这是最佳的,因为你必须查看那么多数字(最坏的情况)。

您还可以观察到N = O(Log K)。

答案 1 :(得分:1)

我不知道为什么人们建议你看看无数的答案。在您的情况下,复杂性显然是O(N)。

首先比较符号 - 如果它们不同,您就知道数字越大,数字越低。

如果标志相同,则从两个数字的最高位数开始,如果在任何地方数字不同,您可以确定哪个数字大于另一个数字。

如果数字为负数,则较大的最高有效数字意味着该数字较小。

答案 2 :(得分:0)

为什么在比较两个具有相同符号的数字时不使用简单的减法? Brent-Kung(前缀)加法器在O(lg n)时间内将两个n位操作数相加(相减)。 (考虑您的数字具有$ n $位而不是十进制N位,并使用2的补码运算通过加法进行减法。)对于正数操作数,如果相差为负,则符号位将告诉您一个更大或更小。例如,如果您通过从8中减去5来比较8与5,则它们的差的符号位(即8-5将为0表示8大于5)。如果您通过从5中减去8将5与8进行比较,则差的符号位将为1,表示5小于8。如果通过从-8减去-5来比较-8与-5,即-8-(-5)= -3,则符号位为差异将为1,表示-8小于-5。如果通过从-5减去-8来将-5与-8进行比较,即-5-(-8)= 3,则差异的符号位将为0,表示-5大于-8。

总而言之,

(i)如果a和b是两个正数或两个负数,则差ab的符号位0表示a大于$ b $,而相同差的符号位1表示a小于b。

(ii)如果它们具有相反的符号,则带有负号的一个明显小于另一个。

(iii)如果a和b是n位数字,则时间复杂度为O(lg n)。

相关问题