结论: 满足条件1、顺序访问
2、迭代步骤彼此独立,不必等到上一步迭代结束
由状态指标控制算法无缝执行。(每步由一个计算机完成,共需n个)
分析: 插排每步的策略都是顺序访问前缀子数组。
代价来自:1、元素间比较,2、数组内元素变动。
然而,因为相邻两步迭代存在一定的独立性,当第一步迭代进行到一定阶段,可以直接开始第二步迭代,不必等到第一步完全结束。
首先我们观察一次迭代过程i,顺次比较【0】,【1】…【i-1】。
|
1 |
2 |
3 |
4 |
5 |
6 |
… |
i-1 |
i |
Step0 |
|
Read |
|
|
|
|
|
|
|
|
step1 |
|
Over |
Read |
|
|
|
|
|
|
|
2 |
|
Over |
Over |
Read |
|
|
|
|
|
|
3 |
|
Over |
Over |
Over |
Read |
|
|
|
|
|
4 |
|
Over |
Over |
Over |
Over |
>=i |
Read2write |
Read2write |
Read2write |
|
5 |
i在【5】处插入,每步结束后,前缀子串都已经准备好被下次迭代访问,则
在step2结束后,即可开始插入元素i+1
同理,在step3结束后,即可开始插入元素i+2…
算法花费时间计算:
任何元素i开始于时刻i,操作总时长i,结束于2i,max(2i)=2n
算法时间O(2n)
下步迭代只需等待一个元素修改完成,所以算法的瓶颈在于元素修改的速度,但只影响常数因子。
每个元素的状态编码(全局变量)用以总体调控。
伪代码:
functionstep_x
while(check[i])
work(i)
i++
work(x)
thefunction is compare or change the num
functionmain
while(check[x])
step_x
x++
也许这一切并没有用。
本文探讨了一种插排算法,该算法通过顺序读写迭代器访问实现,并且在每两步迭代之间保持独立性。分析表明,由于迭代步骤的独立性,可以在前一步未完全结束时开始下一步,从而优化了时间复杂度。算法的时间成本为O(2n),主要受限于元素修改的速度。全局状态编码用于整体控制算法流程。伪代码展示了具体实现方式。
1万+

被折叠的 条评论
为什么被折叠?



