Sequence 模块详解
Sequence 模块提供各种数组与字符串序列生成器,适合用来构造测试用例:有序、近乎有序、逆序、块结构、几何增长、随机字符串数组等。
主要函数(静态)
random_array(int n, int min_val, int max_val, int seed = 0):生成 n 个在 [min_val, max_val] 范围的随机整数。increasing_array(...)/decreasing_array(...):生成有序或逆序数组。nearly_sorted(int n, int min_val, int max_val, double fraction = 0.05, int seed = 0):先生成有序数组,再做少量随机交换以模拟近乎有序场景(fraction为交换比例)。block_reversed(int n, int min_val, int max_val, int blocks = 4, int seed = 0):把数组分成若干块并对每个块做 reverse,产生局部序或块结构。geometric_sequence(int n, int start, int ratio):生成等比序列(注意数值可能快速溢出)。random_string_array(int n, int len, const std::string& charset, int seed):生成 n 个长度为 len 的随机字符串。
使用场景
- 测试排序算法:
nearly_sorted评估算法在接近有序输入下的表现。 - 测试分治或窗口算法:
block_reversed可产生局部逆序场景,考察局部性影响。 - 测试字符串处理:
random_string_array用于哈希、字典序、模式匹配等算法的随机样本生成。
示例
using namespace STAR_CPP;
// 生成 100 个近乎有序元素
auto v = Sequence::nearly_sorted(100, 0, 1000, 0.02, 2026);
// 生成分块逆序
auto vr = Sequence::block_reversed(50, 0, 100, 5, 123);
// 生成 10 个随机字符串
auto sa = Sequence::random_string_array(10, 8, "abcdefghijklmnopqrstuvwxyz", 77);
注意事项
- 对于大 n,优先 reserve 容器大小以减少扩容开销(已在内部实现中尽量预分配)。
- 几何序列当 ratio 较大或 start 大时会很快超出整数范围,请注意使用
long long或限制输入。