GospersHack 算法
GospersHack 是一种高效以二进制 \(1\) 个数为关键词,数相对大小为第二关键词进行排序的线性高效算法。
步骤如下:
以 \(000111\) 为例,我们怎么求出下一个比它大的数?
显然,我们只需把这一大串 \(1\) 最左边的 \(1\) 左移一位,然后剩下的扔到最右边就行了。
int lb=cur&-cur;
int nxt=cur+lb;
cur=((nxt^cur)/lb>>2)|nxt;
GospersHack 是一种高效以二进制 \(1\) 个数为关键词,数相对大小为第二关键词进行排序的线性高效算法。
步骤如下:
以 \(000111\) 为例,我们怎么求出下一个比它大的数?
显然,我们只需把这一大串 \(1\) 最左边的 \(1\) 左移一位,然后剩下的扔到最右边就行了。
int lb=cur&-cur;
int nxt=cur+lb;
cur=((nxt^cur)/lb>>2)|nxt;