在實現fft計算的時候,第一步要做的就是實現倒位序的實現,這裡有一種演算法,叫做雷德(rader)演算法。
下面假如使用a[i]存的是順序位序,而b[j]存的是倒位序。ij的時候就不用,避免重複而做無用功。
例如 n = 8 的時候,
倒位序順序 二進位制表示 倒位序 順序
0 0
000
0004
1 100
0012
2 010
010 6
3 110
0111
4 001 1005
5 101
1013
6 011
1107
7 111
111自然序排列的二進位制數,其下面乙個數總比上面的數大1,而倒序二進位制數的下面乙個數是上面乙個數在最高位加1並由高位向低位僅為而得到的。
若已知某數的倒序數是j,求下乙個倒序數,應先判斷j的最高位是否為0,與k=n/2
進行比較即可得到結果。如果k>j,說明最高位為0,應把其變成1,即j+n/2
,這樣就得到倒序數了。如果j<=k,即j的最高位為1,將最高位化為0,即j-n/2,再判斷次高位;與k=n/4
進行比較,
若為0,將其變位1,即j+n/4,
即得到倒序數,如果次高位為1,將其化為0,再判斷下一位......
即從高位到低位依次判斷其是否為1,為1將其變位0,若這一位為0,將其變位1,即可得到倒序數。若倒序數小於順序數,進行換位,否則不變,防治重複交換,變回原數。
#include
#include
#include
intmain(
void
) ;
inti,j,k;
intn = 8;
inttemp;
j = 0;
for(i = 0; i < n -1; i ++)
k = n >> 1;
while
( k <= j)
j = j + k;
} for
( i = 0; i < n; i ++)
printf("%d "
,array[i]);
printf("\n"
);
return
0;
}
演算法之倒序輸出句子
本次講一下倒敘輸出句子的簡單演算法,倒序輸出有很多種方式,其中一種是給出乙個句子,由空格和單詞組成,請給出演算法,倒序輸出。本題相對簡單,基本演算法就是根據提示只有空格和單詞,納悶我們就可以以空格為邊界,具體取後面的單詞來實現倒序輸出。具體code如下 由code可以看出,基本邏輯就是for迴圈根據...
二進位制倒序演算法
建表,遞推求出0 n的所有數的二進位制倒序,複雜度o n 這裡的n,l滿足n 2 l 1 二進位制串長度l,求出某個數n的二進位制倒序,演算法思想複雜度o log l 網上有乙個 雷德演算法,大致思路也是遞推求得1 n的所有數的二進位制逆序,不過方法比較顯然麻煩,每一次都要在之前的逆序數基礎上找第乙...
js演算法 判斷最大值,排序,倒序輸出。
輸入三個數,判斷它們大小 用三元運算。js function on1 在測試中遇到的問題 a b c在強制轉換中,ma前面不可以加var,否則a b c輸入的數值會按照最多位數的來新增其他不同位數的數值 例如 12 3 14輸出的是3。因為將3當成三十了。另一種寫法 var a document.g...