2009-09-11 88 views
2

有人可以給我一個關於直方圖的僞代碼是怎麼樣的提示嗎?頻率直方圖C

+3

這個問題需要更多的細節。 – Noldorin 2009-09-11 23:09:01

+0

爲什麼,因爲問題很簡短?有多少種做標準直方圖的方法? – 2009-09-11 23:44:55

+0

因爲他沒有說出他想要什麼或者他卡在哪裏。命名他想要堅持的數據類型也不錯。我必須像其他人一樣猜測。 – dmckee 2009-09-11 23:50:03

回答

7

如何構造和填充直方圖?

簡單的情況是僅有每個塊的計數:

/* needs error checking, badly */ 
int *buildHist(int bins, double min, double max, int n, double *data){ 
    double *hist=malloc(bins*sizeof(int)); 
    if (hist == NULL) return hist; 
    for (int i=0; i<n; ++i){ 
     int bin=int((data[i]-min)/((max-min)/(bins))); 
     if ((bin>=0) && (bin<n)) hist[bin]++; 
    } 
    return hist; 
} 

對於加權直方圖,所述陣列必須是浮點型。

隨着越來越多的數據(過採樣和欠流計數,累積的統計...甚至保持在相同的位置作爲計數的限制),使用包括該陣列的結構。

增量填充通常是需要的,但從這裏應該是顯而易見的。

輸出很大程度上取決於您手頭的顯示技術。

+0

有朋友幫我上手,但我不知道他打算做......這就是我有 無效computeHistogram(int數據[],INT DATA_SIZE,INT HISTO [],INT histo_size){ \t int min = 99999999; \t int max = -99999999; \t int i = 0; \t而(I'DATA_SIZE){ \t \t如果(數據[I] <分鐘){ \t \t \t分鐘=數據[I]; } \t \t如果(數據[I]>最大){ \t \t \t最大=數據[I]; printf(「數據的最小值爲%d」,min);以及「 } – user133466 2009-09-11 23:29:27

+0

看起來他打算動態設置限制。對數據進行一次遍歷以找到限制值,然後使*另一個*傳遞數據以填充直方圖。你的火把給了你極限發現通行證,填充通行證將看起來像我上面展示的那個。 – dmckee 2009-09-11 23:33:24

+0

謝謝dmckee,但我被指示不要使用指針....是否有其他選擇?謝謝! – user133466 2009-09-12 00:16:35

0

那麼,你很可能有一堆printf語句的頂部爲您的標題給予一定意義的數據。然後,也許一行破折號或等於或某事作爲分隔符。

然後在下面,循環訪問您希望繪製的值。每行一個。