6.5.6 Three Assignment to 1

6.5.6

Each exchange operation on line 5 of HEAP-INCREASE-KEY typically requires

three assignments. Show how to use the idea of the inner loop of INSERTIONSORT

to reduce the three assignments down to just one assignment.


HEAP-INCREASE-KEY.A; i; key/
1 if key < A[i]
2 error “new key is smaller than current key”
3 A[i] = key
4 while i > 1 and A[ PARENT(i)  < A[i]
5 exchangeA[i] with A[PARENT(i)]
6 i = PARENT(i)


Analyse

The equivalent of the above procedure is the follows:

There's a array B, now you konw B[i] can be greater than the element before B[i], you're asked to move B[i] to after the first element B[j] where B[j] > B[i].


Solution 1 

Just like in heap-increase-key, loop through the array from i, exchange each element greater than the original B[i], which involves 3 assignments for each exchange.


Solution 2

Just loop through the array, 

1. find the final position of B[i], 

2 record B[i] to temp, 

3. move the B[i-1] through B[j] one position ahead, 

4. put temp to B[j].

On average, one assignment for each exchange.

Extension

If  the order of memcpy satisfies our need, then a single machine instruction will do this stuff.

From http://blog.csdn.net/cheetach119/article/details/9352731



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值