1. 程式人生 > >演算法學習之調和級數

演算法學習之調和級數

        Harmonic numbers(調和級數,參考連結:About Harmonic numbers)常用於演算法分析,它的最大特徵是:隨著n取值的增大,相鄰的兩個Harmonic numbers的差將變小,且它不收斂,趨向於無窮,只是遞增的趨勢會越來越慢。原文如下:

A remarkable characteristic of harmonic numbers is that, even though as n gets large and the difference between consecutive harmonic numbers gets arbitrarily small ( 

tex2html_wrap_inline58467), the series does not converge

        從一個簡單的查詢陣列最大值的演算法來看,

unsigned int FindMaximum(unsigned int a[], unsigned int n)
{
    unsigned int result = a[0];
    for (int i = 1; i < n; ++i)
        if ( result < a[i])
            result = a[i];
    return result;
}

Thus, the running time of the above Program
tex2html_wrap_inline58299, is a function not only of the number of elements in the array, n, but also of the actual array values, tex2html_wrap_inline58363.

即,它的時間開銷不但和陣列大長度n相關,也和陣列元素的序列有關。其中,最好的情況是,陣列降序排列,最壞的情況是陣列升序排列。此外,需要關注的是,一個隨機排列的陣列,查詢最大值的平均時間開銷,即T(average)。

參考Average Running timesT(average) = t1 + t2 * n + t3 * ( H(n) - 1),即與Harmonic numbers相關。

而 H(n-1) = In(n) (約等於對數加Euler constant,這個公式是一個約等於)。