演算法導論第十六章--貪心演算法
貪心演算法:程式碼為演算法導論課本例題。
//貪心演算法 #include<iostream> using namespace std; int GreedySelect(int *s,int *f,int length,int *a) { int i,j=2; a[1]=1; i=1; for(int m=2;m<=length;m++) { if(s[m]>=f[i]) { a[j++]=m; i=m; } } return j; } int main() { int s[12]={0,1,3,0,5,3,5,6,8,8,2,12}; int f[12]={0,4,5,6,7,8,9,10,11,12,13,14}; int a[13]; int i=GreedySelect(s,f,11,a); for(int j=1;j<i;j++) { cout<<a[j]<<" "; } cout<<endl; }
相關推薦
演算法導論第十六章--貪心演算法
貪心演算法:程式碼為演算法導論課本例題。 //貪心演算法 #include<iostream> using namespace std; int GreedySelect(int *s,int *f,int length,int *a) { int i,j=
《演算法導論》第十六章——貪心演算法
雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正! 貪心演算法並不保證能得到最優解,但對於很多問題確實可以得
演算法導論第十六章習題16.1-2
從最後一個開始的活動開始選擇,則各個活動開始時間要進行排序。程式碼如下: //貪心演算法 #include<iostream> using namespace std; //選擇最先結束的活動 int GreedySelect(int *s,int *f,int
演算法導論 第十二章:二叉查詢樹 筆記(二叉查詢樹、查詢二叉查詢樹、插入和刪除、隨機構造的二叉查詢樹)
二叉查詢樹是一種樹資料結構,它與普通的二叉樹最大的不同就是二叉查詢樹滿足一個性質:對於樹中的任意一個節點,均有其左子樹中的所有節點的關鍵字值都不大於該節點的關鍵字值,其右子樹中的任意一個節點的關鍵字值都不小於該節點的關鍵字值。 在二叉查詢樹上可以進行搜尋、取最小值、取最大值、取指定節點的前驅
演算法導論 第十一章:散列表 筆記(直接定址表、散列表、通過連結法解決碰撞、雜湊函式、開放定址法、完全雜湊)
前面討論的各種資料結構中,記錄在各種結構中的相對位置是隨機的,和在記錄的關鍵字之間不存在有確定的關係,因此在查詢記錄是需要進行一系列和關鍵字的比較。而理想的情況是不希望進行任何的比較,一次存取便能得到所查記錄。那就必須在記錄的儲存位置和它的關鍵字之間建立一種確定的關係f,使每個關鍵字和結構中有一
演算法導論 第十五章:動態規劃之棒的切割(Rod Cutting)
和分治法一樣,動態規劃(Dynamic programming)是通過組合子問題的解而解決整個問題的。 其不同點在於: 1)分治法是將問題劃分成一些獨立的子問題,遞迴求解各個子問題,然後合併子問題的解而得到原問題的解 2)動態規劃使用於子問題不獨立的情況,也就是各個
演算法導論 第十四章:區間樹
區間樹是一種對動態集合進行維護的紅黑樹,具體設計如下: step1:基礎資料結構 我們選擇的基礎資料結構式紅黑樹,其中每個節點x包含一個區間域x.int,x的關鍵字為區間的低端點 x.int.low. step2:附加資訊 每個節點x除了區間資訊外,還包含一個
演算法導論第十五章習題15.4-2
不適用陣列b就能實現LCS結果的列印,程式碼如下: //LCS #include<iostream> #include<string> using namespace std; //改進的LCS演算法,不使用陣列b便可打印出結果 void LCS_
演算法導論第十五章動態規劃
概述: 1.動態規劃是通過組合子問題的解而解決原問題的。 2.動態規劃適用於子問題不是獨立的情況,也就是各子問題的包含公共的子子問題。 3.動態規劃對每個子問題只求解一次,將其結果儲存在一張表中。 4.動態規劃的設計步驟:a.描述最優解的結構b.遞迴定義最優解的值c.按自底
演算法導論第十五章15.5-2構造最優二叉搜尋樹
#include "StdAfx.h" #include <iostream> #include <vector> using namespace std; void optimal_bst(vector<double>&
演算法導論第十五章(最長公共子序列)
package chapter15_dynamic_programming; import java.util.ArrayList; /** * 動態規劃:最長公共子序列,動態規劃的演算法自底向上的計算 * * @author liuyw * */ pub
演算法導論第十二章總結以及課後題答案
二叉搜尋樹 總結 1.查詢二叉搜尋樹中最大關鍵字元素 TREE-MAXIMUM(x) while x.right!=NIL x=x.right return x 2.查詢二叉搜尋樹中最小關鍵字元素 TREE-MINIMUM(x) while x.l
演算法導論第十九章二項堆
自己寫的bug應該很多 BinHeapNode.h #include<iostream> using namespace std; class BinHeap; class BinHeapNode { private: friend BinHeap; int
演算法導論第十五章習題15-1--雙調歐幾里得旅行商問題
思路:1),首先將所有點加上座標,x軸指向右,y軸指向下。然後將所有點按照x軸座標從小到大排列。 2)總體思路是依次從排好序的節點取出一個節點,決定該節點應該放在第一條路徑上還是第二條路徑上。 3)定義一個數組:double b[8][8]; //b[i][j]表示第一條
算法導論第十六章
LG ted sum 不能 復雜度 selector else n-1 greedy 16.1 16.1-1 int c[n+1][n+1]; int b[n+1][n+1]; for (int i = 0; i <= n; i++) { for (int j =
為什麼我要放棄javaScript資料結構與演算法(第十一章)—— 演算法模式
本章將會學習遞迴、動態規劃和貪心演算法。 第十一章 演算法模式 遞迴 遞迴是一種解決問題的方法,它解決問題的各個小部分,直到解決最初的大問題。遞迴通常涉及函式呼叫自身。 遞迴函式是像下面能夠直接呼叫自身的方式或函式 function recursiveFunction(someParam){
演算法導論第十二(12)章 二叉查詢樹
12.1 二叉查詢樹 定義:設x為二叉查詢樹中的一個結點。如果y是x的左子樹中的一個結點,則key[y]≤key[x]。如果y是x的右子樹中的一個結點,則key[x]≤key[y]. 前序遍歷:先遍歷根再遍歷左右子樹,簡稱根-左-右。 中序遍歷:先遍歷左子樹再遍歷根再遍歷右
算法導論筆記——第十六章 貪心算法
一個 出現 預處理 優化 節點 求解 多選 數據結構 集中 通常用於最優化問題,我們做出一組選擇來達到最優解。每步都追求局部最優。對很多問題都能求得最優解,而且速度比動態規劃方法快得多。 16.1 活動選擇問題 按結束時間排序,然後選擇兼容活動。 定理16.1 考慮任意
演算法導論 第二十二章:拓撲排序
拓撲排序(針對有向無迴路圖DAG)是深度優先搜尋的一個應用,其結果圖中所有頂點的一個線性排列。 虛擬碼如下: EG: 拓撲排序完整程式碼如下: #include<iostream> #include<iomanip> #include<
【MySQL必知必會】第十六章 創建高級聯結
類型 where子句 contact items order by 其他 mysq custom 必知必會 1、使用表別名 好處: a、縮短SQL語句。 b、允許在單條SELECT語句中多次使用相同的表。 輸入: SELECT cust_name,cu