【发布时间】:2013-01-18 09:18:48
【问题描述】:
在大多数现代 ISA 中,Big-O 是什么?是否有某种优化或者是天真的O(分子/分母)?我正在编写严重依赖模数运算的代码。
例如,执行 10/5 和 20/5 和 40/5 所需的相对时间是多少? Intel、nVidia、Qualcomm 等的现代处理器是否具有相同的 Big-O 划分?
注意:假设除法是 O(分子的大小),我在这里可能是错的,这个问题可能根本没有任何意义。如果是这样,请纠正我。
【问题讨论】:
-
对于整数除法,它通常是恒定的,但延迟成本很高。
-
我认为所有数学运算的大 O 为 1。
-
不也依赖于所使用的除法算法吗? en.wikipedia.org/wiki/Division_%28electronics%29
-
@mamdouhalramadan 只是因为输入是固定大小的,但这是作弊。您不妨说“井指针是固定大小的,因此遍历链表(没有循环)是 O(1),因为它可以处理的最大节点数是恒定的”。除法的步数也取决于输入的值,具体取决于所使用的算法。
-
@Sibi:如果您认为它是位大小的函数:是的。但是由于 cpus 总是在一定的字长上工作,通常总是 O(1),不管你使用哪种算法。这是因为不同算法的运行时间取决于数据的位大小。只需将常量 32- 或 64 放入运行时公式中,您将获得算法的恒定运行时间(但请注意:它们可能差异很大 - 但这仅与实际性能/运行时相关,与 Big O 无关!)。
标签: algorithm architecture big-o division integer-division