一 定義
Hibbard序列的每個元素由以下公式生成:
h_k = 2^k - 1
其中k從1開始遞增,序列為:1, 3, 7, 15, 31, 63, …
二 生成方式
起始條件:k=1,對應h_1=2^1-1=1
遞推公式:每次k增加1,計算 h_{k+1}=2^{k+1}-1
示例:前5項為:1, 3, 7, 15, 31
三 在希爾排序中的應用
1 目的
作為希爾排序的步長(間隔序列),用于將數據分為多個子序列進行插入排序。
2 操作步驟
1. 從最大的h_k(小于數組長度n)開始。
2. 按遞減順序使用Hibbard序列中的步長。
3. 對每個步長,執行插入排序。
四 C++ 實現步驟
1 生成Hibbard序列
#include <vector>
using namespace std;
vector<int> generateHibbardSequence(int n) {
vector<int> sequence;
int k = 1;
// 找到最大的k使得2^k -1 < n
while ((1 << k) - 1 < n) { // 1<<k等價于2^k
k++;
}
k--; // 回退到最后一個