第二章實驗報告

來源:互聯網
上載者:User

標籤:int   複雜   語句   分治   lse   複雜度   bsp   include   二分   

第二章實驗報告

20171003172 陳滿

1. 

7-2 改寫二分搜尋演算法 (20 分)

題目來源:《電腦演算法設計與分析》,王曉東

設a[0:n-1]是已排好序的數組,請改寫二分搜尋演算法,使得當x不在數組中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在數組中時,i和j相同,均為x在數組中的位置。

輸入格式:

輸入有兩行:

第一行是n值和x值; 第二行是n個不相同的整數組成的非降序序列,每個整數之間以空格分隔。

輸出格式:

輸出小於x的最大元素的最大下標i和大於x的最小元素的最小下標j。當搜尋元素在數組中時,i和j相同。 提示:若x小於全部數值,則輸出:-1 0 若x大於全部數值,則輸出:n-1的值 n的值

2.問題描述:求x與這個數組中的元素的關係

3.演算法描述:

#include<iostream>

using namespace std;

int BIN(int a[],int n,int key)

{

      int left=0;

      int right=n-1;

      int t=0;

     

  if(key>=a[0]&&key<=a[n-1]){

    while(left<=right)

      {

         int middle=(left+right)/2;

         t++;

         if(key==a[middle])

         {

               cout<<middle<<" "<<middle<<endl;

               return middle;

         }

         if(key>a[middle])   left=middle+1;

         else                right=middle-1;  

 

      }

     

         

     

            int j;

        for(j=1; j<n; j++)

        {

            if(key<a[j])

               break;

        }

       cout<<j-1<<" "<<j;

   

      }

      if(key<a[0])     cout<<-1<<" "<<0;

      if(key>a[n-1])   cout<<n-1<<" "<<n;

}

int main()

{

      int n,x;

      cin>>n>>x;

      int a[n];    

      for(int i=0; i<n; i++)

            cin>>a[i];

      BIN(a,n,x);

      return 0;

}

先判斷元素是否在數組的區間內,然後採用二分尋找判斷x是否為數組內元素,是則輸出middle middle;否則輸出j-1,j;

然後判斷x是小於數組全部元素還是大於數組全部元素

4.時間複雜度分搜尋法充分利用了元素間的次序關係,採用分治策略,可在最壞情況下用O(logn)時間完成搜尋任務。每執行一次while迴圈,待搜尋數組的大小就減小一半。因此在最壞情況下,while迴圈被執行了O(logn)次。迴圈體內外運算需要O(1)的時間。因此整個演算法在最壞情況下的時間複雜度為O(logn)。

  空間複雜度:二分搜尋法的空間複雜度為O(1)。此演算法的空間複雜度為一個常量,即不隨被處理資料量n的大小而改變時,可表示為O(1)。

5.心得體會:

二分尋找法更加快速便捷。

在做題過程中,範例的情況錯誤,後來發現是語句錯了,其他沒什麼太大問題。

第二章實驗報告

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.