《演算法導論》筆記 第15章 15.5 最優二叉查詢樹
【筆記】
【練習】
15.5-1 寫出過程CONSTRUCT-OPTIMAL-BST(root)的虛擬碼,給定表root,輸出一棵最優二叉查詢樹的結構。
15.5-2 對有n=7個關鍵字以及如下概率的集合,確定一棵最優二叉查詢樹的代價和結構。
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
p_i | 0.04 | 0.06 | 0.08 | 0.02 | 0.10 | 0.12 | 0.14 | |
q_i | 0.06 | 0.06 | 0.06 | 0.06 | 0.05 | 0.05 | 0.05 | 0.05 |
15.5-3 假設不維護表w[i,j],我們在OPTIMAL-BST直接從公式計算w(i,j)的值,這個改變對漸進執行時間有什麼影響?
*15.5-4 對所有的1<=i<j<=n,總存在最優子樹的根使得root[i,j-1]<=root[i,j]<=root[i+1,j]。修改OPTIMAL-BST使其在O(n^2)時間內執行。
相關推薦
《演算法導論》筆記 第15章 15.5 最優二叉查詢樹
【筆記】 【練習】 15.5-1 寫出過程CONSTRUCT-OPTIMAL-BST(root)的虛擬碼,給定表root,輸出一棵最優二叉查詢樹的結構。 15.5-2 對有n=7個關鍵字以及如下概率的集合,確定一棵最優二叉查詢樹的代價和結構。 i 0 1 2 3
15.5 最優二叉搜尋樹
背景 假定我們正在設計一個程式,實現英語文字到中文的翻譯。對英語文字中出現的每個單詞,我們需要查詢對應的中文。為了實現這些操作,我們可以建立一個二叉搜尋樹,將n個英語單詞作為關鍵字,對應的中文作為關聯資料。 #定義 給定一個n個不同關鍵字的已排序的序列K=<
第十五章動態規劃之“最優二叉查詢樹”
本書從文字翻譯的案例切入,假設把英文翻譯為法文,每個英文單詞為關鍵字,其對應法文為衛星資料。用二叉查詢樹儲存,該怎麼設計這個查詢樹。即使是紅黑樹,查詢的時間複雜度也為O(lgn)即樹的深度。但是因為文章中某個單詞出現的頻率不同,所以可能有些頻率很高的單詞比如the的深度可能
演算法導論第十五章15.5-2構造最優二叉搜尋樹
#include "StdAfx.h" #include <iostream> #include <vector> using namespace std; void optimal_bst(vector<double>&
《演算法導論》第24章——單源最短路徑
雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正! 最短路徑的最優子結構 最短路徑的子路徑也是最短路徑。
《演算法導論》之最優二叉搜尋樹
最優二叉搜尋樹 假定我們正在設計一個程式,實現英語文字到法語的翻譯。對英語文字中出現的每個單詞,我們需要查詢對應的法語單詞。為了實現這些查詢操作,可以建立一棵二叉搜尋樹,將n個英語單詞作為關鍵字,對應的法語單詞作為關聯資料。由於文字中的每個單詞都要進行搜尋,我們
0020演算法筆記——【動態規劃】最優二叉搜尋樹問題
1、問題描速: 設 S={x1, x2, ···, xn} 是一個有序集合,且x1, x2, ···, xn表示有序集合的二叉搜尋樹利用二叉樹的頂點儲存有序集中的元素,而且具有性質:儲存於每個頂點中的元素x 大於其左子樹中任一個頂點中儲存的元素,小於其右子
演算法導論程式39--最優二叉搜尋樹(Python)
最優二叉搜尋樹: 給定一個n個不同關鍵字的已排序的序列K=<k1,k2,...,kn>(因此k1<k2<...<kn)我們希望用這些關鍵字構造一棵二叉樹。對每個關鍵字ki,都有一個概率pi表示其搜尋頻率。 有些要搜尋的值可能不在K中,因此,我們
演算法基礎(八):超詳細最優二叉樹構建(1)
赫夫曼(Huffman)樹也稱最有二叉樹,是一類帶全路徑長度最短的樹,有著廣泛的應用。比如一棵判定樹,根據學生的成績劃分及格還是不及格還是優、中等、良好。顯然用if-else或者switch就可以簡單實現,當然可以直接毫不考慮的直接這樣寫,但是如果我們再肯花點功夫,就可以得
演算法導論 第十二章:二叉查詢樹 筆記(二叉查詢樹、查詢二叉查詢樹、插入和刪除、隨機構造的二叉查詢樹)
二叉查詢樹是一種樹資料結構,它與普通的二叉樹最大的不同就是二叉查詢樹滿足一個性質:對於樹中的任意一個節點,均有其左子樹中的所有節點的關鍵字值都不大於該節點的關鍵字值,其右子樹中的任意一個節點的關鍵字值都不小於該節點的關鍵字值。 在二叉查詢樹上可以進行搜尋、取最小值、取最大值、取指定節點的前驅
《演算法導論》第四章_讀書筆記
分治思想Divide-and-Conquer 包含三個步驟,分解divide,解決conquer,合併combine 求解遞迴式的演算法效率有三個方法,數學規劃,遞迴樹,主方法 最大子陣列問題 遞迴演算法 最大子陣列的位置只能是三種之一 ·
《演算法導論》第22章——基本的圖演算法
雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正! 圖的搜尋指的是系統化地跟隨圖中的邊來訪問圖中的每個結點。
演算法班筆記 第五章 二叉樹和基於樹的DFS
第五章 二叉樹和基於樹的DFS 在這一章節的學習中,我們將要學習一個數據結構——二叉樹(Binary Tree),和基於二叉樹上的搜尋演算法。 在二叉樹的搜尋中,我們主要使用了分治法(Divide Conquer)來解決大部分的問題。之所以大部分二叉樹的問題可以使用分治法
演算法班筆記 第九章 資料結構:區間、陣列、矩陣和樹狀陣列
第九章 資料結構:區間、陣列、矩陣和樹狀陣列 子陣列與字首和 Subarry PrefixSum[i] = A[0] + A[1] + ... + A[i-1], PrefixSum[0] = 0; 構造花費 O(n) 時間,O(n) 空間 Sum(i to j)
《演算法導論》第七章-快速排序(虛擬碼)
快速排序 虛擬碼: QuickSort(A,p,r) if p<r q = Partition(A,p,r) //確定劃分位置
《演算法導論》第四章-第4節_練習(參考答案)
演算法導論(第三版)參考答案:練習4.4-1,練習4.4-2,練習4.4-3,練習4.4-4,練習4.4-5,練習4.4-6,練習4.4-7,練習4.4-8,練習4.4-9 Exercise 4.4-1 Use a reccursion tree
《演算法導論》第12章 二叉查詢樹 (3)基數樹
基數樹與二叉查詢樹和Trie樹很相似。它像BST一樣是二叉的,向左表示0而不是BST的小於, 而向右則表示1而不是大於。它像Trie一樣共享相同的結點來儲存字串中相同的字首,從而 節省了空間,但它不
《演算法導論》第12章 二叉查詢樹 (1)遍歷
二叉查詢樹的效率 在二叉查詢樹中執行的基本操作的時間與樹的高度成正比。最壞情況, 樹的高度是N,像連結串列一樣,而較好情況高度是lgN。因此,樹的高度是關鍵。 下一章將要學習的紅黑樹是對二叉查詢
演算法導論第十二(12)章 二叉查詢樹
12.1 二叉查詢樹 定義:設x為二叉查詢樹中的一個結點。如果y是x的左子樹中的一個結點,則key[y]≤key[x]。如果y是x的右子樹中的一個結點,則key[x]≤key[y]. 前序遍歷:先遍歷根再遍歷左右子樹,簡稱根-左-右。 中序遍歷:先遍歷左子樹再遍歷根再遍歷右
《演算法導論》第19章二項堆的實現原始碼
BinormialHeap.h #ifndef _BINOMAIL_HEAP_H #define _BINOMAIL_HEAP_H // 定義一個求有符號的無窮大的巨集 #define SIGN_INFINITELY_GREAT(T) ((0x1<<8*s