Python 基础算法

来源:互联网 发布:淘宝男士运动秋装 编辑:程序博客网 时间:2024/06/15 06:17

算法是指解题方案的准确和描述,那么衡量一个算法的优劣可以用时间复杂度和空间复杂度来表示。

1.时间复杂度:O(1),O(n),O(n^2),O(n^3),O(log2n),O(nlog2n),O(n!)等等

比如说:  

 a = 2 是O(1)

O(n^2)
交换i和j的内容
     sum=0;                 (一次)
     for(i=1;i<=n;i++)       (n次 )
        for(j=1;j<=n;j++) (n^2次 )
         sum++;       (n^2次 )
解:T(n)=2n^2+n+1 =O(n^2)


    for (i=1;i<n;i++)
    {
        y=y+1;         ①   
        for (j=0;j<=(2*n);j++)    
           x++;        ②      
    }         
解: 语句1的频度是n-1
          语句2的频度是(n-1)*(2n+1)=2n^2-n-1
          f(n)=2n^2-n-1+(n-1)=2n^2-2
          该程序的时间复杂度T(n)=O(n^2).         

    a=0;
    b=1;                      ①
    for (i=1;i<=n;i++) ②
    {  
       s=a+b;    ③
       b=a;     ④  
       a=s;     ⑤
    }
解:语句1的频度:2,        
           语句2的频度: n,        
          语句3的频度: n-1,        
          语句4的频度:n-1,    
          语句5的频度:n-1,                                  
          T(n)=2+n+3(n-1)=4n-1=O(n).
                                                                                                 
     i=1;       ①
    while (i<=n)
       i=i*2; ②
解: 语句1的频度是1,  
          设语句2的频度是f(n),   则:2^f(n)<=n;f(n)<=log2n    
          取最大值f(n)= log2n,
          T(n)=O(log2n )

    for(i=0;i<n;i++)
    {  
       for(j=0;j<i;j++)  
       {
          for(k=0;k<j;k++)
             x=x+2;  
       }
    }

2.基本算法

(1)冒泡算法(O(n^2))

data = [1,2,3,6,9,7,45,12]

loop_count = 0for i in range(len(data)):    for j in range(len(data) - i - 1):        if data[j] < data[j+1]:            tmp = data[j]            data[j] = data[j+1]            data[j+1] = tmp        loop_count += 1    print(data)print(data)print('time:', loop_count)
(2)最小算法(O(n))

loop_count = 0mid_num = data[0]for i in range(1, len(data)):    if data[i] > mid_num:        mid_num = mid_num    else:        mid_num = data[i]    loop_count += 1print(mid_num)print(loop_count)
3.插入排序

for index in range(1, len(data)):    currunt_num = data[index]    position = index    while position > 0 and data[position - 1] >currunt_num:        data[position] = data[position - 1]        position -= 1    data[position] = currunt_numprint(data)


原创粉丝点击