演算法題目打卡 Ques20201017

2021-10-25 18:35:42 字數 2252 閱讀 3639

設有n個顧客同時等待同一服務,顧客i需要的服務時間為t,1<=i<=n,應如何安排n個顧客的服務次序才能使總的等待時間達到最小?總的等待時間是各顧客等待服務的總和。試給出你的做法的理由。

使用貪心策略,將服務所需時間按從小到大進行排列,優先安排服務時間短的。

二元字首碼:表示乙個字元的0,1字串不能是表示另乙個字元的0,1字串的字首。

b=∑f(xi)d(xi)是儲存乙個字元的平均值。d(xi)為碼長。

平均碼長達到最小的字首編碼方案稱為字符集c的乙個最優字首編碼

不同的字元 a

b cd e

f 頻率

f(千次) 45

13 12

16 9

5定長碼

000001

010011

100101

變長碼 0

// 最優字首碼-huffman編碼

//二元字首碼:表示乙個字元的0, 1字串不能是表示另乙個字元的0, 1字串的字首。

//b = ∑f(xi)d(xi)是儲存乙個字元的平均值。d(xi)為碼長。

//平均碼長達到最小的字首編碼方案稱為字符集c的乙個最優字首編碼。

//例:字符集及其頻率如

//表.長為100000的檔案:

//定長碼:300000 bit,

//變長碼:224000, 省25 %

// 演算法:要點:編碼字元均在葉子節點上,資料結構:佇列中裝樹的結點,佇列遞增排序,取最小元素賦值給樹節點左邊右邊,插入新節點後仍然遞增,注意頻率

//演算法複雜度:

//2行排序o(nlogn)

//3行迴圈n - 1次

//8行迴圈體內插入操作

//o(logn),其它操作常量

//所以t(n) = o(nlogn)

#include #include #include #include // 使用佇列

#include#include using namespace std;

struct huffman ;

struct node

};class minheap

huffman getelement(int i)

void add(huffman &data)

} huffman top()

void minheapify(int i)

if (r < heap.size() && heap[r].frequency < heap[small].frequency)

if (i != small)

} void swap(int i, int j)

};class ques20201017

//huffmans = minheap.getelement();// 得到排好序的陣列

// 開闢葉結點

vectorque;

while(minheap.getsize()!=1)

huffman last = minheap.getelement(0);// 得到最小元素

node* lastnode = new node(last);

que.push_back(lastnode);

// 列印結果

for (int i = que.size()-1; i >=0 ;i--)

}private:

vectorinit(vector&characters, vector&frequencys)

return huffs;

}};int main() ;

vectorfreq = ;

ques.test(s, freq);

return 0;

}

貌似還有些不完善的,比如如何去遍歷這棵樹的問題,作業太多就先不搞了= =

演算法題目打卡 Ques20201007

特別簡單的問題,從一組陣列中選出第k大的元素a i 最容易想到的辦法時間複雜度為o n 2 考慮快排中的劃分法 分治思想 選擇的基準元素預設是陣列的第乙個。對應 試用劃分法 int partselect vector a,int n,int k 但是這樣每次分治迭代只會減少1的複雜度,最壞複雜度 n...

演算法題目打卡 Ques20201012

活動安排問題,乙個場地,安排盡量多的活動。活動安排 include include include using namespace std struct activity class ques20201012 void test vector activities private vectorgre...

演算法打卡Week2

例1 輸入 l1 2 4,3 l2 5 6,4 輸出 7,0,8 解釋 342 465 807 例2 輸入 l1 0 l2 0 輸出 0 學習鍊錶結構 鍊錶是一種遞迴的資料結構,由乙個個結點 node 組成,且每個節點都有資料域 value 和指標域 next head 為單鏈表的頭指標,永遠指向第...