插排O[n]无缝实现:顺序读写迭代器访问+两步迭代间独立性

本文探讨了一种插排算法,该算法通过顺序读写迭代器访问实现,并且在每两步迭代之间保持独立性。分析表明,由于迭代步骤的独立性,可以在前一步未完全结束时开始下一步,从而优化了时间复杂度。算法的时间成本为O(2n),主要受限于元素修改的速度。全局状态编码用于整体控制算法流程。伪代码展示了具体实现方式。
摘要由CSDN通过智能技术生成

结论:  满足条件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++

       

   

也许这一切并没有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值