zoukankan      html  css  js  c++  java
  • 读书笔记——数据结构(2)运行时间中的对数

    某些分支算法将以O(logN)时间运行。

    一般法则:

    如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是O(logN)。

    另一方面,如果使用常数时间知识吧问题减少一个常数(如将问题减少1),那么这种算法就是O(N)的。


    三个例子:

    1.对分查找(二分查找)

    给定一个整数X和整数A0,A1,……,AN-1,后者已经预先排序并在内存中,求使得Ai=X的下表i,如果X不在数据中,则返回i=-1。

    int BinarySearch(const ElementType A[],ElementType X,int N)
    {
    	int Low,Mid,High;
    	Low=0;
    	High=N-1;
    
    	while(Low<=High)
    	{
    		Mid=(Low+High)/2;
    
    		if(A[Mid]<X)
    		{
    			Low=Mid+1;
    		}
    		else if(A[Mid]>X)
    		{
    			High=Mid-1;
    		}
    		else
    		{
    			return Mid;
    		}
    	}
    
    	return -1;
    }
    2.欧几里德算法

    计算最大公约数的欧几里德算法。

    unsigned int Gcd(unsigned int M,unsigned int N)
    {
    	unsigned int Rem;
    
    	while(N>0)
    	{
    		Rem=M%N;
    		M=N;
    		N=Rem;
    	}
    
    	return M;
    }
    3.幂运算

    计算一个整数的N次幂

    long int Pow(long int X,unsigned int N)
    {
    	if(N==0)
    	{
    		return 1;
    	}
    
    	if(N==1)
    	{
    		return X;
    	}
    
    	if(IsEven(N))
    	{
    		return Pow(X*X,N/2);
    	}
    	else
    	{
    		return Pow(X*X,N/2)*X;
    	}
    }


  • 相关阅读:
    div居中鼠标悬浮显示下拉列表
    javascript循环
    javascript函数
    javascript时间、随机数
    javascript外部使用
    Javascript 探路
    CSS六大选择器(注释css表里不能加注释!!)
    框架链接
    Jmeter分布式测试dubbo接口2
    Jmeter分布式测试dubbo接口1
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202185.html
Copyright © 2011-2022 走看看