Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 除法大O_Algorithm_Architecture_Big O_Division_Integer Division - Fatal编程技术网

Algorithm 除法大O

Algorithm 除法大O,algorithm,architecture,big-o,division,integer-division,Algorithm,Architecture,Big O,Division,Integer Division,在当今的国际审计准则中,除法的大O是什么?是否存在某种优化或是天真的O(分子/分母)?我正在编写严重依赖模运算的代码 例如,执行10/5、20/5和40/5的相对时间是多少?英特尔、英伟达、高通等公司的现代处理器是否也有同样的大O处理器 注意:假设除法是O(分子的大小),我可能会错,这个问题可能根本没有意义。如果是这样的话,请纠正我。这个问题不太好。但这也不是那么“愚蠢”,所以我试图回答/澄清以下几点: 几乎所有现代CPU/GPU都有除法指令。当它在默认字长下工作时,不管它有多快,就Big-O而

在当今的国际审计准则中,除法的大O是什么?是否存在某种优化或是天真的O(分子/分母)?我正在编写严重依赖模运算的代码

例如,执行10/5、20/5和40/5的相对时间是多少?英特尔、英伟达、高通等公司的现代处理器是否也有同样的大O处理器


注意:假设除法是O(分子的大小),我可能会错,这个问题可能根本没有意义。如果是这样的话,请纠正我。

这个问题不太好。但这也不是那么“愚蠢”,所以我试图回答/澄清以下几点:

几乎所有现代CPU/GPU都有除法指令。当它在默认字长下工作时,不管它有多快,就Big-O而言,它是恒定的,所以它总是O(1)。即使对于没有除法指令的嵌入式处理器、微控制器和类似设备,这也是正确的,因为它是在软件中仿真的,并且软件仿真根据字的大小进行约束,因此执行操作的时间总是恒定的(这意味着它也是O(1))

例外情况是在谈到对非字大小的数据执行的操作时。例如,当谈论BigInt图书馆时,就会发生这种情况。但在这种情况下,所有运算(加法、乘法等)不再是O(1),而是取决于数字的大小


但请注意:Big-O并没有说明实际计算时间。这只是忽略常数因子的渐近行为。这意味着,即使你有两个取O(n)的算法,时间差也可以是1000倍(或者一百万倍,或者任何你想要的)。除法的最佳示例:例如,除法和加法都是O(1),但通常除法的执行周期/时间比加法多得多。

对于整数除法,它通常是常数,但延迟成本很高。我认为所有数学运算的大O值都是1。它是否也依赖于所使用的除法算法@mamdouhalramadan只是因为输入是固定大小的,但这是一个骗局。您还可以说“井指针的大小是固定的,因此在链表(没有循环)中进行迭代是O(1),因为它可以寻址的最大节点数是恒定的”。根据所使用的算法,步划分的次数也取决于输入的值。@锡比:如果您认为它是位大小的函数:是的。但是由于CPU总是在一定的字长上工作,所以不管使用哪种算法,通常都是O(1)。这是因为不同算法的运行时间取决于数据的大小(以位为单位)。只需将常量32或64放入运行时公式中,就可以得到算法的常量运行时(但请注意:它们之间的差异可能很大,但这只与实际性能/运行时相关,而与大O无关!)。那么java中的long呢?在32位机器上,它将是字大小的两倍。它是否仍有O(1)运行时?即使计算机没有64位div指令,它也将是O(1),因为使用32位指令执行/模拟64位div的操作数始终是恒定的。但同样:O-class是相同的,但实际执行时间的差异大约是3-6倍(只是猜测,可能更高或更低,在很大程度上取决于所使用的平台/系统)。您还应该提到摊销复杂性。我不知道其他的操作,但是加法是按O(1)摊销的。