【发布时间】:2021-08-03 19:18:45
【问题描述】:
下面是插入排序的原始伪代码:
function INSERTIONSORT(A[0..n−1])
for i←1 to n−1 do
j←i−1
while j≥0 and A[j+1]<A[j] do
SWAP(A[j+1],A[j])
j←j−1
一家公司正在其产品中使用插入排序。您是该公司聘请的网络安全专家,负责评估其代码的任何安全漏洞。经过几次尝试,您成功地攻击了他们的插入排序代码,并通过以下方式对其进行了修改(在下面的伪代码中以粗体蓝色显示):
function INSERTIONSORT(A[0..n−1])
for i←1 to n−1 do
j←i−1
while j≥0 and HASH(A,j+1) < HASH(A,j) do
SWAP(A[j+1],A[j])
j←j−1
换句话说,不是在“while”条件中将数组索引为 A[j] 和 A[j+1],而是现在有一个哈希函数,它将数组和索引作为参数并返回一个整数。你的工作是实现特定的散列函数,这些函数会以不同的方式导致算法出现故障。
- 实现一个散列函数,使插入排序保持原始数组不变。解释您的解决方案为何有效。
- 实现一个散列函数,使插入排序始终在最坏情况下运行,即使结果数组最终没有排序。解释您的解决方案为何有效。
- 实现一个散列函数,使插入排序对数组进行反向排序。解释您的解决方案为何有效。
我不知道这个问题。
【问题讨论】: