运行时间中的对数

举报
心跳包 发表于 2021/11/13 00:43:47 2021/11/13
【摘要】 如果一个算法用常数时间(O(1))将问题的大小消减为某一部分的(通常1/2),那么该算法就是O(logN).另一方面,如果使用常数时间只是把问题减少一个常数,那么该算法就是O(N). 对分查找: 给定一个整数X和整数后者已经预先排序并在内存中,求使得的下标i,如果X不在数据中,则返回i=-1.明显的算法是从左到右扫描数据,其运行花费...

如果一个算法用常数时间(O(1))将问题的大小消减为某一部分的(通常1/2),那么该算法就是O(logN).另一方面,如果使用常数时间只是把问题减少一个常数,那么该算法就是O(N).

对分查找:

给定一个整数X和整数A_{0},A_{1},...,A_{N-1},后者已经预先排序并在内存中,求使得A_{i}=X的下标i,如果X不在数据中,则返回i=-1.明显的算法是从左到右扫描数据,其运行花费的线性时间。然而,这个算法没有用到该表已经排序的事实,这就使得算法不是很好。一个好的策略是验证X是否居中的元素。如果是,则答案就找到了。如果X小于居中元素,那么我们可以应用同样的策略于居中元素左侧已经排序的子序列;同理,如果X大于居中元素,那么我们检查右半部分。


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int BinarySearch(const int A[],int X,int N)
  4. {
  5. int Low,Mid,High;
  6. Low=0;
  7. High=N-1;
  8. while(Low<=High)
  9. {
  10. Mid=(Low+High)/2;
  11. printf("(Low+High)/2;%d,Low %d,High %d\n",Mid,Low,High);
  12. if(A[Mid]<X)
  13. {
  14. Low=Mid+1;
  15. printf("Low;%d\n",Low);
  16. }
  17. else
  18. {
  19. if(A[Mid]>X)
  20. {
  21. High=Mid-1;
  22. printf("High;%d\n",High);
  23. }
  24. else
  25. {
  26. printf("Mid;%d\n",Mid);
  27. return Mid;
  28. }
  29. }
  30. }
  31. return -1;
  32. }
  33. int main()
  34. {
  35. int number[]={1,4,10,15,16};
  36. int data=0;
  37. printf("start ....\n");
  38. data=BinarySearch(number,4,5);
  39. printf("下标是:%d\n",data);
  40. exit(0);
  41. }

运行


  
  1. start ....
  2. (Low+High)/2;2,Low 0,High 4
  3. High;1
  4. (Low+High)/2;0,Low 0,High 1
  5. Low;1
  6. (Low+High)/2;1,Low 1,High 1
  7. Mid;1
  8. 下标是:1

欧几里德算法

两个整数的最大公因数是同时整除二者的最大整数。


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int Gcd(unsigned int M,unsigned int N)
  4. {
  5. unsigned int Rem;
  6. while(N>0)
  7. {
  8. Rem=M%N;
  9. M=N;
  10. N=Rem;
  11. }
  12. return M;
  13. }
  14. int main()
  15. {
  16. int number[]={1,4,10,15,16};
  17. int data=0;
  18. printf("start ....\n");
  19. data=Gcd(4,5);
  20. printf("Gcd:%d\n",data);
  21. exit(0);
  22. }

运算


  
  1. start ....
  2. Gcd:1

 

 

文章来源: xintiaobao.blog.csdn.net,作者:心跳包,版权归原作者所有,如需转载,请联系作者。

原文链接:xintiaobao.blog.csdn.net/article/details/89485952

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。