1. 程式人生 > >preNoip中時間複雜度的計算

preNoip中時間複雜度的計算

特徵方程法解一階線性代數遞推式

數列{ana_n}滿足a1=b,an+1=can+da_1=b,a_{n+1}=ca_n+d,求該數列的通項公式

針對遞推關係式作出一個特徵方程x=cx+dx=cx+d

定理:設上述遞推關係式的特徵方程根為x0x_0

  1. x0=a1x_0=a_1時,an=a1a_n=a_1
  2. x0a1x_0\neq a_1時,an=bn+x0,bn=b1cn1,b1=a1x0a_n=b_n+x_0,b_n=b_1c^{n-1},b_1=a_1-x_0

證明2: c0,1\because c\neq 0,1x0=d1cx_0=\frac{d}{1-c} 作換元bn=anx0b_n=a_n-x_0bn+1=an+1x0=can+dd1c=cancd1c=c(anx0)=cbn\therefore b_{n+1}=a_{n+1}-x_0=ca_n+d-\frac{d}{1-c}=ca_n-\frac{cd}{1-c}=c(a_n-x_0)=cb_n

特徵方程法解二階線性代數遞推式

有數列{ana_n},遞推公式為an+2=pan+1+qn,a1=α,a2=βa_{n+2}=pa_{n+1}+qn,a_1=\alpha,a_2=\beta

特徵方程為x2pxq=0x^2-px-q=0

  1. x1x2x_1\neq x_2時,an=Ax1n1+Bx2n1a_n=Ax_1^{n-1}+Bx_2^{n-1}
  2. x1=x2x_1=x_2時,an=(A+B)x1n1a_n=(A+B)x_1^{n-1}

(以上兩式中的A,BA,Ba1=α,a2=βa_1=\alpha,a_2=\beta決定) 當然解高階線性代數都可以用迭代法 斐波那契數列f(n+2)=f(n+1)+f(n)f(n+2)=f(n+1)+f(n)的特徵方程為x2x1=0x^2-x-1=0,得x=1±52x=\frac{1\pm\sqrt{5}}{2}

真題

t1

T(n)=2T(n2)+2nT(n)=2T(\frac{n}{2})+2n =2(2T(n4)+2×n2)+2n=2(2T(\frac{n}{4})+2\times\frac{n}{2})+2n =4T(n4)+2n+2n=4T(\frac{n}{4})+2n+2n =4(2T(n8)+2×n4)+2n+2n=4(2T(\frac{n}{8})+2\times \frac{n}{4})+2n+2n =8T(n8)+2n+2n+2n=8T(\frac{n}{8})+2n+2n+2n 猜想T(n)=2kT(n2k)+2n×kT(n)=2^kT(\frac{n}{2^k})+2n\times kn2k=1\frac{n}{2^k}=1時,n=2k,k=log2nn=2^k,k=log_2n T(n)=2kT(1)+2n×k=an+2nlog2n\therefore T(n)=2^kT(1)+2n\times k=an+2nlog_2n 故選B

t2

這個的迭代就很簡單了,選D

t3

同理,T(n)=2kT(n4k)+knT(n)=2^kT(\frac{n}{4^k})+k\sqrt{n} n=4k,2k=n,k=log2n2n=4^k,2^k=\sqrt{n},k=\frac{log_2n}{2}

相關推薦

preNoip時間複雜計算

特徵方程法解一階線性代數遞推式 數列{ana_nan​}滿足a1=b,an+1=can+da_1=b,a_{n+1}=ca_n+da1​=b,an+1​=can​+d,求該數列的通項公式 針對遞推關係

演算法時間複雜概括——o(1)、o(n)、o(logn)、o(nlogn)

在描述演算法複雜度時,經常用到o(1), o(n), o(logn), o(nlogn)來表示對應演算法的時間複雜度。這裡進行歸納一下它們代表的含義:這是演算法的時空複雜度的表示。不僅僅用於表示時間複雜度,也用於表示空間複雜度。   O後面的括號中有一個函式,指明某個演算法的

線性表——順序表——時間複雜計算

  資料結構的核心思想是通過資料結構的思維來優化程式碼的演算法,以此來提升程式的執行效能,縮短程式執行的時間。下面我來舉兩個例子,以此來說明資料結構的時間複雜度計算問題。   由於我這裡操作的是線性表——順序表,所以說先把線性表——順序表的原始碼貼出來 Ab

線性表——順序表——時間複雜計算2

   接上一篇文章繼續分析    在之前的文章中的示例1和示例2中,我們通過觀察可以發現,當在順序儲存結構的線性表中某個位置上插入或刪除一個數據元素時,其時間主要耗費在移動元素上(換句話說,移動元素的操作為預估演算法時間複雜度的基本操作),而移動元素的格式

資料結構-演算法-時間複雜計算

演算法的時間複雜度定義為: 在進行演算法分析時,語句總的執行次數T(n)是關於問題規模n的函式,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:T(n}=0(f(n))。它表示隨問題規模n的增大,演算法執行時間的埔長率

資料結構與演算法-時間複雜計算

一、方法 根本沒有必要計算時間頻度,即使計算處理還要忽略常量、低次軍和最高次剩的係數,所以可以採用如下簡單方法: 找出演算法中的基本語句:演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。 計算基本語句的執行次數的數量級:只需計算基本語句執行次數的數量級,這就

計數排序,傳說時間複雜O(n+k)的排序演算法

基本思想 假設數序列中小於元素a的個數為n,則直接把a放到第n+1個位置上。當存在幾個相同的元素時要做適當的調整,因為不能把所有的元素放到同一個位置上。計數排序假設輸入的元素都是0到k之間的整數。 回到頂部 參考程式碼 #include &

演算法之漢諾塔時間複雜計算

 設a, b, c是3個塔座:開始時,塔座a上有n個自上而下、由小到大地疊在一起圓盤,各圓盤從小到大編號為1, 2, …, n,現要求將塔座a上的這一疊圓盤移到塔座b上,並仍按同樣順序疊置,移動圓盤時遵守以下移動規則: 規則1:每次只能移動1個圓盤; 規則2:不允許將較大的圓

演算法的時間複雜計算

時間複雜度與演算法步驟的多少是同樣的含義,計算演算法的總步驟就是時間複雜度。同時大O表示的是時間複雜度的上限。所以計算總步驟時可以按同數量級中最大情況來計算。 1.O(f(n)):輸入規模為n(n個數據)的演算法的時間複雜度為f(n)。 2.O(1):演算法的時間複雜度與輸

演算法時間複雜計算方法

一、概念: 時間複雜度是總運算次數表示式中受n的變化影響最大的那一項(不含係數) 比如:一般總運算次數表示式類似於這樣: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0時,時間複雜度就是O(2^n); a=0,b<

資料結構-時間複雜計算詳解--向李紅老師的資料結構低頭 :)

今天早上突然想總結一下資料結構的時間複雜度的知識。 之前學了很多遍,但是一直沒有總結,所以之前參考了Algorithm還有清華大學出版的那個資料結構書,今天早上花了幾個小時好好的總結一下,也送給三班的同學們。 演算法的時間複雜度定義為: 在

二分法的時間複雜+演算法的時間複雜計算

黃色標亮-劃重點背誦+自己的理解,綠色標亮-引用資源的連結,藍色標亮-要注意的地方 二分法查詢 的 時間複雜度計算 設 查詢資料的長度為n,每次查詢後資料長度減半,則有 查詢次數 資料長度 第1次查詢           n/2                      

遞迴演算法的時間複雜計算

在演算法分析中,當一個演算法中包含遞迴呼叫時,其時間複雜度的分析會轉化為一個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法:     (1)代入法(Substitution Metho

快速排序平均情況下時間複雜計算過程:

就平均情況而言,快速排序是目前被認為最好的一種內部排序方法,其時間複雜度在平均情況下是nlogn,在最壞的情況下(有序時)時間複雜度是o(n^2)。下面來分析時間複雜度的計算過程: 平均情況下:T(n)=2*T(n/2)+n;      第一次劃分            

時間複雜計算

定義:如果一個問題的規模是n,解這一問題的某一演算法所需要的時間為T(n),它是n的某一函式 T(n)稱為這一演算法的“時間複雜性”。 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的“漸近時間複雜性”。 我們常用大O表示法表示時間複雜性,注意它是某一個演算法的時間複雜性。大O表示只是說有上界,由定義如

【轉】演算法時間複雜概括——o(1)、o(n)、o(logn)、o(nlogn)

       在描述演算法複雜度時,經常用到o(1), o(n), o(logn), o(

已知長度為n的線性表A採用順序儲存結構,請寫一個時間複雜為O(n)、空間複雜為O(1)的演算法,該演算法可刪除線性表所有值為item的資料元素。

語言:C++ #include <iostream> using namespace std; typedef int ElemType; //定義 #define MAXSIZE 100 typedef struct {ElemType *elem; int length;}Sq

面試關於HashMap的時間複雜O(1)的思考

今天在面試的時候說到HashMap,面試官問了這麼一個問題:你說HashMap的get迭代了一個連結串列,那怎麼保證HashMap的時間複雜度O(1)?連結串列的查詢的時間複雜度又是多少? 在這之前我是閱讀過HashMap的原始碼的:Java7原始碼淺析——對HashMap的理解

棧表獲取最小值,時間複雜為O(1)

       近期複習資料結構,看到網上有一道演算法題,該題目曾經是google的一道面試題,國內的網際網路公司也紛紛效仿。我也順便複習之。        題目內容為:對現在的stack(棧)資料結構進行改進,加一個

編寫程式,在一非遞減的順序表L,刪除所有值相等的多餘元素。要求時間複雜O(n),空間複雜為O(1)

翠花上程式碼: Status delExcrescentValue(SeqList &S){ int flag = 0,val = S.elem[0];//記錄值不等的下標 //printf("%d\n",S.elem[0]); for(int i = 1;i