大多数现代国际检索单位的分工是什么?有某种优化还是天真的O(分子/分母)?我正在编写严重依赖模数运算的代码。
例如,执行10/5和20/5和40/5所需的相对时间是多少?来自英特尔,nVidia,高通等的现代处理器是否具有相同的Big-O用于划分?
注意:假设除法是O(分子的大小),我可能错了,这个问题根本没有任何意义。如果是这种情况,请纠正我。
答案 0 :(得分:2)
这个问题不太好。但它也不是那么“愚蠢”,所以我试着回答/澄清一些观点:
几乎所有现代CPU / GPU都有分区指令。因为它适用于默认字大小,所以它的速度无关紧要,就Big-O而言它是恒定的,所以它总是O(1)。即使对于没有分割指令的嵌入式处理器,微控制器等也是如此,因为它是在软件中模拟的,软件仿真受到单词大小的限制,所以它始终是一个恒定的时间来执行操作(也就是说它也是O(1))。
例外情况是在谈论对非字大小数据执行的操作时。这发生在例如在谈论BigInt图书馆时。但在这种情况下,所有操作(加法,乘法,......)不再是O(1),而是取决于数字的大小。
但是注意:Big-O没有说明实际的计算时间。它只是忽略常数因子的渐近行为。这意味着,即使您有两个采用O(n)的算法,时间差也可能是1000(或一百万或任何您想要的)。分裂的最好例子:例如一个加法都是O(1),但通常除法需要比加法要多得多的周期/时间。