遞歸方程組解的漸進階的求法——代入法

遞歸方程組解的漸進階的求法——代入法

用這個辦法既可估計上界也可估計下界。如前面所指出,方法的關鍵步驟在于預先對解答作出推測,然后用數學歸納法證明推測的正確性。

例如,我們要估計T(n)的上界,T(n)滿足遞歸方程:

img115.gif

其中img109.gif是地板(floors)函數的記號,img113.gif表示不大于n的最大整數。

我們推測T(n)=O(nlog n),即推測存在正的常數C和自然數n0,使得當n≥n0時有:

T(n)≤Cnlog n (6.2)

事實上,取n0=22=4,并取

img76.gif

那么,當n0n≤2n0時,(6.2)成立。今歸納假設當2k-1n0n≤2kn0k≥1時,(1.1.16)成立。那么,當2kn0n≤2k+1n0時,我們有:

img114.gif

即(6.2)仍然成立,于是對所有nn0,(6.2)成立。可見我們的推測是正確的。因而得出結論:遞歸方程(6.1)的解的漸近階為O(nlogn)。

這個方法的局限性在于它只適合容易推測出答案的遞歸方程或善于進行推測的高手。推測遞歸方程的正確解,沒有一般的方法,得靠經驗的積累和洞察力。我們在這里提三點建議:

(1) 如果一個遞歸方程類似于你從前見過的已知其解的方程,那么推測它有類似的解是合理的。作為例子,考慮遞歸方程:

img116.gif

右邊項的變元中加了一個數17,使得方程看起來難于推測。但是它在形式上與(6.1)很類似。實際上,當n充分大時

img117.gifimg118.gif

相差無幾。因此可以推測(6.3)與(6.1)有類似的上界T(n)=O(nlogn)。進一步,數學歸納將證明此推測是正確的。

(2)從較寬松的界開始推測,逐步逼近精確界。比如對于遞歸方程(6.1),要估計其解的漸近下界。由于明顯地有T(n)≥n,我們可以從推測T(n)=Ω(n)開始,發現太松后,把推測的階往上提,就可以得到T(n)=Ω(nlog n)的精確估計。

(3)作變元的替換有時會使一個末知其解的遞歸方程變成類似于你曾見過的已知其解的方程,從而使得只要將變換后的方程的正確解的變元作逆變換,便可得到所需要的解。例如考慮遞歸方程:

img119.gif

看起來很復雜,因為右端變元中帶根號。但是,如果作變元替換m=logn,即令n=2m,將其代入(6.4),則(6.4)變成:

img99.gif

m限制在正偶數集上,則(6.5)又可改寫為:

T(2m)=2T(2m/2)+m

若令S(m)=T(2m),則S(m)滿足的遞歸方程:

S(m)=2S(m/2)+m

與(6.1)類似,因而有:

S(m)=O(m1og m),

進而得到T(n)=T(2m)=S(m)=O(m1ogm)=O(lognloglogn) (6.6)

上面的論證只能表明:當(充分大的)n是2的正偶次冪或換句話說是4的正整數次冪時(6.6)才成立。進一步的分析表明(6.6)對所有充分大的正整數n都成立,從而,遞歸方程(6.4)解的漸近階得到估計。

在使用代入法時,有三點要提醒:

(1)記號O不能濫用。比如,在估計(6.1)解的上界時,有人可能會推測T(n)=O(n),即對于充分大的n,有T(n)≤Cn ,其中C是確定的正的常數。他進一步運用數學歸納法,推出:

img100.gif

從而認為推測T(n)=O(n)是正確的。實際上,這個推測是錯誤的,原因是他濫用了記號O ,錯誤地把(C+l)nCn等同起來。

(2)當對遞歸方程解的漸近階的推測無可非議,但用數學歸納法去論證又通不過時,不妨在原有推測的基礎上減去一個低階項再試試。作為一個例子,考慮遞歸方程

img101.gif

其中img102.gif是天花板(floors)函數的記號。我們推測解的漸近上界為O(n)。我們要設法證明對于適當選擇的正常數C和自然數n0,當nn0時有T(n)≤Cn。把我們的推測代入遞歸方程,得到:

img103.gif

我們不能由此推斷T(n)≤Cn,歸納法碰到障礙。原因在于(6.8)的右端比Cn多出一個低階常量。為了抵消這一低階量,我們可在原推測中減去一個待定的低階量b,即修改原來的推測為T(n)≤Cn-b 。現在將它代人(6.7),得到:

img104.gif

只要b≥1,新的推測在歸納法中將得到通過。

(3)因為我們要估計的是遞歸方程解的漸近階,所以不必要求所作的推測對遞歸方程的初始條件(如T(0)、T(1))成立,而只要對T(n)成立,其中n充分大。比如,我們推測(6.1)的解T(n)≤Cnlogn,而且已被證明是正確的,但是當n=l時,這個推測卻不成立,因為(Cnlogn)|n=1=0而T(l)>0。

轉載于:https://www.cnblogs.com/tongzhiyong/archive/2007/04/08/704887.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392142.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392142.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392142.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉載】C# 理解泛型

術語表 generics:泛型type-safe:類型安全collection: 集合compiler:編譯器run time:程序運行時object: 對象.NET library:.Net類庫value type: 值類型box: 裝箱unbox: 拆箱implicity: 隱式explicity: 顯式linked list:…

javascript 作用_JavaScript承諾如何從內到外真正發揮作用

javascript 作用One of the most important questions I faced in interviews was how promises are implemented. Since async/await is becoming more popular, you need to understand promises.我在采訪中面臨的最重要的問題之一是如何實現承諾。 由于異步/等待變得越來越流…

linux 文件理解,對linux中文件系統的理解

首先在linux系統當中一個可被掛在的數據為一個文件系統1.在安裝linux過程中我們要進行磁盤分區,可以分根目錄/,‘/home‘,‘/boot’,swap等等這些分區,每一個分區(’/(根目錄)‘,’/home‘...)就是一個文件系統。2.文件系統分配完…

編譯原理—語法分析器(Java)

遞歸下降語法分析 1. 語法成分說明 <語句塊> :: begin<語句串> end <語句串> :: <語句>{&#xff1b;<語句>} <語句> :: <賦值語句> | <循環語句> | <條件語句> <關系運算符> :: < | < | > | > | |…

老筆記整理四:字符串的完美度

今天在寵果網上發現一道題目&#xff0c;求一個字符串的完美度http://hero.pongo.cn/home/index覺得這道題很有趣就挑戰了一下&#xff0c;結果沒有在規定的1小時里面寫完&#xff08;笑&#xff09;&#xff0c;多花了10分鐘終于做出來了。題目是這樣的&#xff1a;我們要給每…

nlp構建_使用NLP構建自殺性推文分類器

nlp構建Over the years, suicide has been one of the major causes of death worldwide, According to Wikipedia, Suicide resulted in 828,000 global deaths in 2015, an increase from 712,000 deaths in 1990. This makes suicide the 10th leading cause of death world…

域名跳轉

案例&#xff1a;當訪問lsx.com網站&#xff0c;是我最早論壇的域名。回車之后會自動跳轉到lshx.com。 為什么藥lsx跳轉到lshx.com呢&#xff1f; 為了統一品牌。建議換成了lshx.com。所有之前的lsx.com就不要用了&#xff0c;就讓它跳轉到lshx.com。是因為之前lsx.com上有很多…

Elastic Stack 安裝

Elastic Stack 是一套支持數據采集、存儲、分析、并可視化全面的分析工具&#xff0c;簡稱 ELK&#xff08;Elasticsearch&#xff0c;Logstash&#xff0c;Kibana&#xff09;的縮寫。 安裝Elastic Stack 時&#xff0c;必須相關組件使用相同的版本&#xff0c;例如&#xff1…

區塊鏈去中心化分布式_為什么漸進式去中心化是區塊鏈的最大希望

區塊鏈去中心化分布式by Arthur Camara通過亞瑟卡馬拉(Arthur Camara) 為什么漸進式去中心化是區塊鏈的最大希望 (Why Progressive Decentralization is blockchain’s best hope) 不變性是區塊鏈的最大優勢和最大障礙。 逐步分權可能是答案。 (Immutability is blockchain’s…

編譯原理—語義分析(Java)

遞歸下降語法制導翻譯 實現含多條簡單賦值語句的簡化語言的語義分析和中間代碼生成。 測試樣例 begin a:2; b:4; c:c-1; area:3.14*a*a; s:2*3.1416*r*(hr); end #詞法分析 public class analyzer {public static List<String> llistnew ArrayList<>();static …

linux問題總結

linux問題總結 編寫后臺進程的管理腳本&#xff0c;使用service deamon-name stop的時候&#xff0c;出現如下提示&#xff1a;/sbin/service: line 66: 23299 Terminated env -i LANG"$LANG" PATH"$PATH" TERM"$TERM" "${SERVICEDIR}/${SE…

linux vi行尾總是顯示顏色,【轉載】Linux 下使用 vi 沒有顏色的解決辦法

vi 是沒有顏色的&#xff0c;vim 是有顏色的。我們可以通過 rpm -qa |grep vim 看看系統中是否安裝了下面 3 個 rpm 包&#xff0c;如果有就是安裝了 vim 。[rootBetty ~]# rpm -qa |grep vimvim-minimal-7.0.109-7.el5vim-enhanced-7.0.109-7.el5vim-common-7.0.109-7.el5如果…

時間序列分析 lstm_LSTM —時間序列分析

時間序列分析 lstmNeural networks can be a hard concept to wrap your head around. I think this is mostly due to the fact that they can be used for so many different things such as classification, identification or just simply regression.神經網絡可能是一個難…

關于計算圓周率PI的經典程序

短短幾行代碼&#xff0c;卻也可圈可點。如把變量s放在PI表達式中&#xff0c;還有正負值的處理&#xff0c;都堪稱經典。尤其是處處考慮執行效率的思想令人敬佩。 /* pi/41-1/31/5-1/71/9-…… */ #include <stdio.h> int main(){ int s1; float pi0.,n1.,…

華為產品技術學習筆記之路由原理(一)

路由器&#xff1a;路由器是一種典型的網絡連接設備&#xff0c;用來進行路由選擇和報文轉發。路由器與它直接相連的網絡的跳數為0&#xff0c;通過一臺路由器可達的網絡的跳數為1.路由協議&#xff1a;路由器之間維護路由表的規則&#xff0c;用以發現路由&#xff0c;生成路由…

Linux網絡配置:設置IP地址、網關DNS、主機名

查看網絡信息 1、ifconfig eth0 2、ifconfig -a 3、ip add 設置主機名需改配置文件&#xff1a; /etc/hosts /etc/sysconfig/network vim /etc/sysconfig/network NETWORKINGyes NETWORKING_IPV6no HOSTNAMEwendyhost Linux配置網絡 方法一&#xff1a; 1、使用setup命令進入如…

編譯原理—小型(簡化)高級語言分析器前端(Java)

實現一個一遍掃描的編譯前端&#xff0c;將簡化高級語言的部分語法成分&#xff08;含賦值語句、分支語句、循環語句等&#xff09;翻譯成四元式&#xff08;或三地址代碼&#xff09;&#xff0c;還要求有合理的語法出錯報錯和錯誤恢復功能。 測試樣例 beginwhile a<b do…

linux boot菜單列表,Bootstrap 下拉菜單(Dropdowns)簡介

Bootstrap 下拉菜單是可切換的&#xff0c;是以列表格式顯示鏈接的上下文菜單。這可以通過與 下拉菜單(Dropdown) JavaScript 插件 的互動來實現。如需使用下拉菜單&#xff0c;只需要在 class .dropdown 內加上下拉菜單即可。下面的實例演示了基本的下拉菜單&#xff1a;實例主…

dynamodb管理ttl_如何使用DynamoDB TTL和Lambda安排臨時任務

dynamodb管理ttlby Yan Cui崔燕 如何使用DynamoDB TTL和Lambda安排臨時任務 (How to schedule ad-hoc tasks with DynamoDB TTL and Lambda) CloudWatch Events let you easily create cron jobs with Lambda. However, it’s not designed for running lots of ad-hoc tasks,…

5g創業的構想_數據科學項目的五個具體構想

5g創業的構想Do you want to enter the data science world? Congratulations! That’s (still) the right choice.您想進入數據科學世界嗎&#xff1f; 恭喜你&#xff01; 那(仍然)是正確的選擇。 The market currently gets tougher. So, you must be mentally prepared f…