-2

我无法找到O(1)的方式来求n日志与任何基础如何通过C程序计算出O(1)时间记录N(基础R)

即使你能确定Ø (1)以基数2计算n的日志的时间方式,这将是感谢满。 我遇到的链接是这个http://geeksforgeeks.org/?p=10879(请阅读评论)。 他们说要计算零数前面的数字,但如何可以在O(1)时间... 再次我接受了这个网站的帮助,其链接是How To Find The Leading Number Of Zero's In a Number using C 但O(1)很大问题给我。 任何帮助将不胜感激。

回答

3

你不能在O(1)中为任意大的数字做到这一点。您至少需要O(log(n))查看数字的二进制表示形式。

如果你对n的值(例如64位)进行了限制,那么所有的在O(1)中都是可行的! O-notation在这种情况下不会产生真正意义。

+0

在单个整数输入的情况下,你甚至会说它在O(n)中,其中n是二进制数字的数量。 – Gumbo 2011-06-04 08:45:39

1

如果我没有正确地做,你只是想计算在基数b的数字n的日志。在这种情况下,使用log()功能:

log(n)/log(b) 
0

根据您的CPU和你的编译器上你可以得到的log 2在O(1)为整数。例如,请参阅此this question的答案。查找二进制数的最左边的位与log2相同。

相关问题