运行时间中的对数

举报
心跳包 发表于 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大于居中元素,那么我们检查右半部分。


      #include <stdio.h>
      #include <stdlib.h>
      int BinarySearch(const int A[],int X,int N)
      {
     	int Low,Mid,High;
      	Low=0;
      	High=N-1;
     	while(Low<=High)
      	{
      		Mid=(Low+High)/2;
     		printf("(Low+High)/2;%d,Low %d,High %d\n",Mid,Low,High);
     		if(A[Mid]<X)
      		{
      			Low=Mid+1;
     			printf("Low;%d\n",Low);
      		}
     		else
      		{
     			if(A[Mid]>X)
      			{
      				High=Mid-1;
     				printf("High;%d\n",High);
      			}
     			else
      			{
     				printf("Mid;%d\n",Mid);
     				return Mid;
      			}
      		}
      	}
     	return -1;
      }
      int main()
      {
     	int number[]={1,4,10,15,16};
     	int data=0;
     	printf("start ....\n");
      	data=BinarySearch(number,4,5);
     	printf("下标是:%d\n",data);
     	exit(0);
      }
  
 

运行


      start ....
      (Low+High)/2;2,Low 0,High 4
      High;1
      (Low+High)/2;0,Low 0,High 1
      Low;1
      (Low+High)/2;1,Low 1,High 1
      Mid;1
      下标是:1
  
 

欧几里德算法

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


      #include <stdio.h>
      #include <stdlib.h>
      int Gcd(unsigned int M,unsigned int N)
      {
     	unsigned int Rem;
     	while(N>0)
      	{
      		Rem=M%N;
      		M=N;
      		N=Rem;
      	}
     	return M;
      }
      int main()
      {
     	int number[]={1,4,10,15,16};
     	int data=0;
     	printf("start ....\n");
      	data=Gcd(4,5);
     	printf("Gcd:%d\n",data);
     	exit(0);
      }
  
 

运算


      start ....
      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个月内不可修改。