结论: 满足条件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++
也许这一切并没有用。