繁体   English   中英

如何使它的空间复杂度为O(1)而不是O(n)?

[英]How do I make this have a space complexity of O(1) instead of O(n)?

我正在尝试使用迭代过程将十进制转换为二进制数。 如何使它的空间复杂度为O(1)而不是O(n)?

int i = 0;
int j;
int bin[] = new int[n]; //n here is my paramater int n
while(n > 0) {
   bin[i] = n % 2;
   n /= 2;
   i++;
}

//I'm reversing the order of index i with variable j to get right order (e.g. 26 has 11010, instead of 01011)
for(j = i -1; j >= 0; j--) {
   System.out.print(bin[j]);
}   

首先,如果值本身是n ,则不需要放置n位。 您只需要log2(n)+1 使用n位不会给您错误的结果,但是对于较大的n值,您的Java进程可用的内存可能不够。

而且,关于O(1) ...可能不是您真正想的那样,但是:
Javas int具有特定的固定值范围,这保证了(正) int值最多需要31位(如果您也有负数,则必须将符号存储在某个地方,即32位)。

严格来说,有了这些信息,您只需重写循环即可获得O(1),这样它们就可以准确地循环31次。 然后,对于每个n值,您的代码具有完全相同的步骤数,即每个定义为O(1)

走一点摆弄路线在这里无济于事。 如果您的值满足某些条件,则可以使用一些有用的快捷方式,但是如果您希望代码使用任何int值,则此处的普通循环可能是您所能获得的最佳结果。

(就您而言,CPU内在函数可能有所帮助,但对于Java却没有帮助...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM