什么是最快的可分性测试?比如说,给定一个小端架构和一个32位有符号整数:如何计算得非常快,一个数字可被2,3,4,5整除,......最多16?
警告:给定的代码仅为示例.每一行都是独立的!使用模运算的明显解决方案在许多处理器上都很慢,这些处理器没有DIV硬件(像许多ARM一样).有些编译器也无法进行这样的优化(例如,如果divisor是函数的参数或依赖于某些东西).
Divisible_by_1 = do();
Divisible_by_2 = if (!(number & 1)) do();
Divisible_by_3 = ?
Divisible_by_4 = ?
Divisible_by_5 = ?
Divisible_by_6 = ?
Divisible_by_7 = ?
Divisible_by_8 = ?
Divisible_by_9 = ?
Divisible_by_10 = ?
Divisible_by_11 = ?
Divisible_by_12 = ?
Divisible_by_13 = ?
Divisible_by_14 = ?
Divisible_by_15 = ?
Divisible_by_16 = if(!number & 0x0000000F) do();
Run Code Online (Sandbox Code Playgroud)
和特殊情况:
Divisible_by_2k = if(number & (tk-1)) do(); //tk=2**k=(2*2*2*...) k times
Run Code Online (Sandbox Code Playgroud) 您认为哪种C宏最有用?我找到了以下一个,用于在C中进行矢量运算:
#define v3_op_v3(x, op, y, z) {z[0]=x[0] op y[0]; \
z[1]=x[1] op y[1]; \
z[2]=x[2] op y[2];}
Run Code Online (Sandbox Code Playgroud)
它的工作方式如下:
v3_op_v3(vectorA, +, vectorB, vectorC);
v3_op_v3(vectorE, *, vectorF, vectorJ);
...
Run Code Online (Sandbox Code Playgroud) 哪种编程语言或库能够处理无限系列(如几何或谐波)?它可能必须有一些知名系列的数据库,并在收敛的情况下自动给出适当的值,并且可能在发散的情况下产生异常.
例如,在Python中它可能看起来像:
sum = 0
sign = -1.0
for i in range(1,Infinity,2):
sign = -sign
sum += sign / i
Run Code Online (Sandbox Code Playgroud)
那么,sum必须是math.pi/4而不在循环中进行任何计算(因为它是一个众所周知的总和).
python math programming-languages functional-programming series
我试图使用O(n)复杂度的算法在任何给定文本中找到每个符号的频率.我的算法看起来像:
s = len(text)
P = 1.0/s
freqs = {}
for char in text:
try:
freqs[char]+=P
except:
freqs[char]=P
Run Code Online (Sandbox Code Playgroud)
但我怀疑这个字典方法足够快,因为它取决于字典方法的底层实现.这是最快的方法吗?
更新:如果使用集合和整数,速度不会增加.这是因为该算法已经具有O(n)复杂度,因此不可能实现必要的加速.
例如,1MB文本的结果:
without collections:
real 0m0.695s
with collections:
real 0m0.625s
Run Code Online (Sandbox Code Playgroud) 设计一个简单的算法,创建一个只包含自己的校验和的文件.
假设它是CRC-32,所以这个文件必须是4个字节长.
如何使用流行的matplotlib库创建动画图表?我对GIF动画特别感兴趣.
我必须随机地置换长度为n的单链表的N个第一个元素.每个元素定义为:
typedef struct E_s
{
struct E_s *next;
}E_t;
Run Code Online (Sandbox Code Playgroud)
我有一个根元素,我可以遍历整个大小为n的链表.什么是随机排列N个第一个元素(从根开始)最有效的技术?
因此,给定a-> b-> c-> d-> e-> f - > ... x-> y-> z我需要制作smth.像f-> a-> e-> c-> b - > ... x-> y-> z
我的具体案例:
更新:我发现了这篇论文.它声明它提出了一个O(log n)堆栈空间和预期的O(n log n)时间的算法.
我通常复制一行按'y'键两次,然后按'p'或'P'分别粘贴在当前行之后或之前.但有时候,我需要用拉线替换当前线.怎么做?
对于基本算术运算的广泛算法,如乘法,平方根,对数,标量和矩阵乘积,Big-O复杂度是多少?
在Big-O复杂性方面是否存在更高效的外来算法,但在实际解决方案中并不是非常普遍(例如,在流行的软件库中没有实现)?