按分辨率递增迭代列表的算法名称是什么?Python是否有对应实现?
问题解答
1. 算法标准名称
你描述的这种逐层选取区间中点、采样分辨率逐轮提升的迭代规则,最通用的标准名称是 逐次中点采样(Successive Midpoint Sampling),属于多分辨率分层采样的线性场景实现。部分数字信号处理、几何建模场景也会称其为「二分渐进采样序列」,核心逻辑和低差异序列中的范德科鲁普序列(Van der Corput Sequence)高度同源,只是你这里固定优先选取两端端点作为初始采样点。
2. Python实现说明
Python 标准库没有直接封装该遍历逻辑的现成函数,不过实现逻辑非常简单,你可以参考以下代码实现:
def progressive_midpoint_sample(lst): if not lst: return [] n = len(lst) res = [] # 第0轮先加两端元素索引 res.append(0) if n > 1: res.append(n-1) # 待处理的区间队列,存储(左边界索引, 右边界索引) intervals = [(0, n-1)] while intervals: next_intervals = [] for l, r in intervals: mid = (l + r) // 2 if mid not in res: res.append(mid) next_intervals.append((l, mid)) next_intervals.append((mid, r)) intervals = next_intervals # 按索引提取原列表元素 return [lst[i] for i in res] # 测试用例 test_list = [1,2,3,4,5,6,7,8,9] print(progressive_midpoint_sample(test_list)) # 输出:[1, 9, 5, 3, 7, 2, 4, 6, 8],和你给出的示例完全一致
如果需要处理超长序列,可以用位运算优化索引生成逻辑,去掉mid not in res的判断来提升性能。
内容的提问来源于stack exchange,提问作者user171780
相关产品推荐
相关产品推荐

