【发布时间】:2026-02-01 08:20:02
【问题描述】:
上下文
这个问题是由于试图尽量减少昂贵的函数调用次数
问题定义
请注意 extract_and_insert != 交换。特别是,我们从位置“from”取出元素,将其插入位置“to”,然后SHIFT所有中间元素。
int n;
int A[n]; // all elements are integer and distinct
function extract_and_insert(from, to) {
int old_value = A[from]
if (from < to) {
for(int i = from; i < to; ++i)
A[i] = A[i+1];
A[to] = old_value;
} else {
for(int i = from; i > to; --i)
A[i] = A[i-1];
A[to] = old_value;
}
}
问题
我们知道有 O(n log n) 算法可以对数字列表进行排序。
现在:是否有一个 O(n log n) 函数,它返回 对列表进行排序所需的 extract_and_insert 的最小调用次数?
【问题讨论】:
-
@AlmaDo:这不是问题所在。问题是:“是否有一个 O(n log n) 算法可以返回对列表进行排序所需的最少调用次数到
extract_and_insert?” -
@Dukeling:确实,这两个问题是一样的。没有找到原始问题是我的错。但是,鉴于已经发布了答案,我们不要删除此问题。