为什么通过 log10 的长度比传统方法更快?

问题描述 投票:0回答:1

昨天我遇到了leetcode问题,称为数组中的偶数数字,我应该给定一个整数数组nums,返回其中有多少个包含偶数个数字。我在使用 while 循环之前确实解决了这个问题,然后也发现日志更快,但为什么?

我试图解决 leetcode 问题,即偶数,我已经知道对数是解决问题的最佳方法,但我不明白为什么它比运行 while 循环更快?到底是什么让速度更快,因为通用方法即

# for finding length of n
int count = 0
while(n < 0){
 n = n/10;
 count++;
}

很好,为什么

int count = (int)Math.log10(n)+1
更快?它使用位操作或其他什么吗?

java data-structures
1个回答
0
投票

由于在硬件和软件中实现和优化数学运算的方式,用于查找整数中位数的对数方法更快。

传统的While循环方法

int count = 0;
while (n > 0) {
    n = n / 10;
    count++;
}
  • 执行: 该方法涉及执行将数字除以 10 的操作,并循环递增计数器,直到数字变为零。

  • 时间复杂度: O(d),其中 d 是数字的位数。

对数法

无论位数如何,时间复杂度恒定。
现在,我们拥有针对对数函数进行高度优化实现的处理器和库。
与 while 循环生成的指令相比,对数方法涉及的指令要少得多

int count = (int)Math.log10(n) + 1;
  • 执行: 此方法使用数学属性,即数字 n 中的位数由 ⌊log10(n)⌋ + 1 给出。

  • 时间复杂度:由于按照上述直接公式进行计算,其 O(1),恒定时间复杂度。

如果我错过添加某些内容,请随时更新或提出建议。

© www.soinside.com 2019 - 2024. All rights reserved.