資料結構學習之第五章遞迴

2022-09-03 18:00:11 字數 1522 閱讀 6651

自己還是太菜了,還有平時上實驗課的效率賊低,這次遞迴學習的4個小實驗,第一次折騰了一下午才弄出乙個上樓梯的斐波那契數列問題,還好第二次實驗寫出來了,其中有乙個leetcode上的原題恢復ip位址還沒做出來,頭疼啊,現在老師都講到了第8章了圖的相關知識了,我還停留在第五章,得加把勁才行。

一次可以走兩階或一階,問有多少種上樓方式?

0x2.1.1 **#include using namespace std;

int solvecount(int n)

int main()

int main()

\),要求最多使用o(\(\log(2^)\))次遞迴呼叫

0x2.3.2 **#include #define ll __int64

using namespace std;

int res=1;

int fastmulti(int x,int n,int res,int k)

int main()

\),9對應的二進位制為: 1001 => \(9=1*2^+0*2^+0*2^+1*2^\)

可以發現他們二進位制相鄰之間就是差了2倍, 所以說我們就可以讓k=x一直倍增 \(k^\)

\(k^\) 當遇到1的時候我們乘上倍增的結果,為0的時候就繼續讓k取倍增,這樣子我們再把結果相乘指數就是上面的相加。

其實轉換的思想就是控制盡量去倍增,比如求$$x^$$的次方 那麼直接 \(x^\)

\(x^ x^\) 3次就好了,但是面對奇數怎麼解決呢,我們就可以或者超過的時候怎麼解決的問題,我們就可以細化成二進位制這個規律去做個轉換,真的是很巧妙。

那我們同時也可以去拓寬思路,比如三進製能對應什麼?

那麼三進製對應的指數倍增是 \(1*3\)

\(2*3\)

\(0*3\)

那麼遇到2的情況就乘多一次k就行了。 比如 12 = 120=> \(x^ x^ x^\)

這個能進一步優化速度,不過要涉及到位運算。

設有不同價值、不同重量的物品n件,求從這n件物品中選取一部分物品的方案,使選中物品的總重量不超過指定的限制重量,便選中的

物品的價值之和為最大

#include #define n 20

int w[n];

int v[n];

int x[n];

using namespace std;

int solverucksack(int n,int m)

else

//return max(solverucksack(n-1,m),solverucksack(n-1,m-w[n])+v[n]);

}int main()

cout<< "揹包的最優解為:"<< solverucksack(n,m) 《也就是一直在回溯 取了第n個揹包的結果然後與n-1去比較,總的來說這裡還有有點繞的,因為n和重量都在改變,不過我們可以結合反推,當我們取n的時候如果比之前最大值還可以再大,那麼我們還可以再去取的,

這個遞迴揹包變數很重要,很巧妙的想法。

​ mmp,自己還是太菜了,學習速度太慢了。

資料結構(第五章)

樹下 第一講一.堆 什麼是堆?在講堆之前,我們先看看什麼是優先佇列。優先佇列 是一種特殊的佇列,從名稱上看,優先,顧名思義,取出的元素是按照一定的優先順序出隊的,而不是元素進入佇列的先後順序。優先佇列的完全二叉樹表示 堆的兩個特性 結構性 用陣列表示的完全二叉樹。有序性 任一結點的關鍵字是其子樹所有...

資料結構 第五章學習小結

樹的結構定義是乙個遞迴的定義 5.1.2 樹的基本術語 5.1.3 二叉樹的定義 5.2 案例引入 5.3 樹和二叉樹的抽象型別定義 樹的抽象型別定義 二叉樹的抽象型別定義 5.4 二叉樹的性質和儲存結構 完全二叉樹 深度為k的,有n個結點的二叉樹,當且僅當其每乙個結點都與深度為k的滿二叉樹中編號從...

資料結構筆記 第五章

一.樹的邏輯結構 樹是乙個有限的集合,集合中的元素稱為結點。1 結點的個數為0 稱為空樹。2 結點的個數為1 此節點稱為根節點。3 節點的個數大於1 則除了根結點以外的結點又可分為多個集合,每乙個集合本身其實質上也是一棵樹,並且是根節點的子樹。二.二叉樹的邏輯結構 1 二叉樹的定義 二叉樹首先必須是...