演算法導論 學習問題

2021-06-21 22:37:01 字數 1447 閱讀 1003

《演算法導論》裡的counting_sort,用c++實現有問題:

#include

#include

using

namespace std;

void counting_sort(vector

&a, vector

&b, const

int& k)

delete c;

}

int main()

; for (auto index : coll)

cout << index << "   ";

cout << endl;

vector

coll2(coll.size()+1,0);                //b的size要比a大1,因為前面有1個0,如果不加1的話,vector就會out of range

counting_sort(coll, coll2, 16);                   //至於如何解決這個加1的問題我還不知道。

for (auto index : coll2)

cout << index << "   ";

cout << endl;

return 0;

}

a的編號:  0   1   2   3   4   5   6   7   8   9
a(coll):1   2   4   3   8   7   9   10  14  16
c的編號:  0   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16
c        :0   1   1   1   1   0   0   1   1   1    1    0    0    0    1    0    1
c[i] += c[i - 1];之後:
c的編號:  0   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16
c        :0   1   2   3   4   4   4   5   6   7    8    8    8    8    9    9    10

b的編號:   0   1   2   3   4   5   6   7   8   9    10
b(coll2):  0   1   2   3   4   7   8   9   10  14   16
如上所示,b的0位多了1個0,而多了乙個b[10]位,所以如果b與a一樣大的話,則out of range。
至於如何解決問題我不知道。

《演算法導論》學習筆記 排序問題

核心思想 就相當於你在抓取撲克牌,第一張撲克牌是不用排序的,當你抓取第二張撲克牌的時候才與之前的撲克牌排序,當你抓取第三張撲克牌的時候,第 一 二張撲克牌是已經排好的。package com.example public class myclass i沒有以0開始,是因為第一張撲克牌不用排序,相當於...

生日悖論問題 《演算法導論學習筆記》

乙個房間裡的人數必須達到多少,才能使兩個人生日相同的機會達到 50 不考慮閏年情況,也就是一年按照 365天來計算。解答 假設房間裡的人數是 k,我們對其進行編號 1,2,k 為簡單起見,用 n表示一年的天數 也就是 365天 那麼乙個人的生日在一年中的哪一天應該是機會均等的,我們用 bi表示第 i...

演算法導論 僱傭問題

首先介紹一點數學知識。事件 a 的指示器隨機變數i i i定義為 i begin 1 quad 如果a發生 0 quad 如果a不發生 end i pre i pr e i p r,其中p rpr pr為事件a發生的概率。期望性質 期望的和等於和的期望,即若x xix sum x xi 則e xi ...