小编psi*_*lia的帖子

快速可分性测试(2,3,4,5,...,16)?

什么是最快的可分性测试?比如说,给定一个小端架构和一个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++ math assembly bit-manipulation

34
推荐指数
9
解决办法
2万
查看次数

最有用的用户自制C-宏(在GCC中,也是C99)?

您认为哪种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)

c macros c99 c-preprocessor

28
推荐指数
8
解决办法
1万
查看次数

哪种编程语言或库可以处理无限系列?

哪种编程语言或库能够处理无限系列(如几何或谐波)?它可能必须有一些知名系列的数据库,并在收敛的情况下自动给出适当的值,并且可能在发散的情况下产生异常.

例如,在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

26
推荐指数
7
解决办法
2949
查看次数

Python - 字典是否很难找到每个字符的频率?

我试图使用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)

python algorithm probability frequency

24
推荐指数
5
解决办法
5131
查看次数

如何找到相同校验和的校验和?(求职面试问题)

设计一个简单的算法,创建一个只包含自己的校验和的文件.

假设它是CRC-32,所以这个文件必须是4个字节长.

algorithm

24
推荐指数
2
解决办法
2773
查看次数

Python - 使用matplotlib.pyplot的动画

如何使用流行的matplotlib库创建动画图表?我对GIF动画特别感兴趣.

python matplotlib

22
推荐指数
3
解决办法
4万
查看次数

C - 指针的初始化,星号位置

放置星号最合适的方法是什么?为什么?

1)    type*     var;
2)    type      *var;
Run Code Online (Sandbox Code Playgroud)

c

19
推荐指数
3
解决办法
9023
查看次数

随机置换单链表的N个第一个元素

我必须随机地置换长度为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

我的具体案例:

  • nN相对于n约为20%
  • 我有限的RAM资源,最好的算法应该使它到位
  • 我必须在循环中进行多次迭代,因此速度很重要
  • 理想的随机性(均匀分布)不是必需的,如果它"几乎"是随机的,那就没关系
  • 在进行排列之前,我已经遍历了N个元素(用于其他需求),所以也许我也可以将它用于排列

更新:我发现了这篇论文.它声明它提出了一个O(log n)堆栈空间和预期的O(n log n)时间的算法.

c c++ algorithm math permutation

19
推荐指数
1
解决办法
1909
查看次数

VIM - 如何用yank寄存器的内容替换一行?

我通常复制一行按'y'键两次,然后按'p'或'P'分别粘贴在当前行之后或之前.但有时候,我需要用拉线替换当前线.怎么做?

vim text

19
推荐指数
2
解决办法
2374
查看次数

大O基本算术运算的复杂性

对于基本算术运算的广泛算法,如乘法,平方根,对数,标量和矩阵乘积,Big-O复杂度是多少?

在Big-O复杂性方面是否存在更高效的外来算法,但在实际解决方案中并不是非常普遍(例如,在流行的软件库中没有实现)?

algorithm math complexity-theory big-o time-complexity

18
推荐指数
3
解决办法
6309
查看次数