《修改》2分查找速度【绝对】提升(已证)[★火燎原]

zhangbilei 2010-10-18 02:02:31
10.16原2分查找有序数列(递归到首尾下标相同结束)。假设数列a(n)=n;X为2的100次方,有序表为a(1~x),那找这个【其实任意】有序表(n个数)里的【任意】一个数,递归函数都要做M次【下面的(1)情况】或者M+1次【下面的(2)情况】(M为log2(n)去掉小数点后的到的整数)】,如上面那个要100次(即使是找1或X),【改后】的只要原表或递归切割出来的子表的首或尾出现“查找数”就找到了;

简单的修改:

///////////////////////////////////////////////////////////////////

只要【原表】的【首下标】和【尾下标】没有问题,那就不会进入外层的else中(因为当子表只有2个数时就已经退出了;

////////////////////////////////////////////////////////////////////////////////////////

if(首下标<尾下标)///////





if(首位数==查找数)位置为首下标;//结束(没递归)

else if(末位数==查找数)位置为尾下标;//同上

else





if(首下标==尾下标-1){没有这个数;//退出递归(报错)}//只有2个数,有首尾都不是。。。

else//多于3个数,继续切割。。



照写;////递归











else/////表里只有一个数,或前后下标有问题。



if(首位数==查找数)位置为下标;//

else 报错;//下标有问题,或没有这个数;




////////////////////////////////////////////////////////

以下为基于【修改前】的【倒数第2或3次递归的前面的原表或子表】都没有出现首或尾为“查找数”的情况。。。

//////////////////////////////////////////////////////////

在以下情况下,【改后】和【改前】的运算速度的比较【基于【修改前】2分查找的比较】:

(1)当“查找数”在序列表的倒数第二次递归的子表中时

1. 如果子表个数为2,那改后的速度快 ;//改前的还得再切一次


2.如果子表个数为3,【而且“查找数”为3个里的最后一个】,那还是【改后】快;//【改前】的还得再切一次
(注:切法是有偶数个时左右个数相同,奇数个时左边比右边多一个)



///////【以上这2禾中情况是2分查找里速度最快的情况】(如1,2,3,4,5)找1或2切了3次;找3或4或5只切了两次,即【(1)中的情况比(2)中的少切了一次】

(2) 1.如果子表个数为3,而且【“查找数”为3个里的中间那个】,则此次为【【改前】倒数第三次递归】【【改后】则是倒数第二次】),【改前的】得在切2次,【改后】的只要切一次;

改后则不用(速度快了);

2.如果子表个数为3,而且【“查找数”为3个里的第一个】,则此次为【【改前】倒数第三次递归】;【【改后】则结束了】;


(3)当没有这个“查找数”时,【改后】速度照样比【改前】快(因为【改后】的递归到只有2个数时就结束了,而【改前】的要到1个数是才结束);



*【【改前的2分查找只有以上3种情况,好像没有其它的情况了(注:无论找数列里的哪个数都是要递归到只剩下1个数才停】】

*【【改后的,只要在其原表,或其分割出的任意一个子表的首尾出现“查找数”就可以停了】】
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
某某9 2010-10-19
  • 打赏
  • 举报
回复
【★火燎原】博客
zhangbilei 2010-10-19
  • 打赏
  • 举报
回复
大家好,本人博客里专写【新算法】:
【已更新列表】:
1.【多位数】【多重括号】【带负数】【字符表达式运算】【使用递归】【不用栈实现】

2.自己写的【新的】【排序算法】-【二分对调排序】

3.《修改》2分查找,速度绝对地提升【已证】

4。【自写】【求全排列】【新算法】【递归实现】

5.用【自己改过的2分】做的【2分插入排序】。。(C#) 速度绝对快于【原插入或原二分插入排序】

6.【自写】【递归】【双选择排序】速度比选择排序快

【★火燎原】
zhangbilei 2010-10-19
  • 打赏
  • 举报
回复
如果看了这【算法分析】都还不能确定,那给代码就更难看懂了。
zhangbilei 2010-10-19
  • 打赏
  • 举报
回复
看我博客,用在【改后2分】插入排序中了
乐CC 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ayw215 的回复:]
代码呢?
来点真实的数据对比
[/Quote]
支持数据说话!
ayw215 2010-10-18
  • 打赏
  • 举报
回复
代码呢?
来点真实的数据对比

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧