<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

    Talking and thinking freely !
    Flying in the world of GIS !
    隨筆 - 156, 文章 - 16, 評(píng)論 - 589, 引用 - 0
    數(shù)據(jù)加載中……

    算法分析規(guī)則

    作者:Flyingis

        算法作為實(shí)現(xiàn)計(jì)算機(jī)程序?qū)崿F(xiàn)時(shí)解決問題的方法,在計(jì)算機(jī)應(yīng)用領(lǐng)域發(fā)揮著舉足輕重的作用。它研究的內(nèi)容是解決問題的方法,而不是計(jì)算機(jī)程序的本身。一個(gè)優(yōu)秀的算法可以運(yùn)行在比較慢的計(jì)算機(jī)上,但一個(gè)劣質(zhì)的算法在一臺(tái)性能很強(qiáng)的計(jì)算機(jī)上也不一定能滿足應(yīng)用的需要,因此,在計(jì)算機(jī)程序設(shè)計(jì)中,算法設(shè)計(jì)往往處于核心地位。如何去設(shè)計(jì)一個(gè)適合特定應(yīng)用的優(yōu)秀算法是眾多開發(fā)人員所關(guān)注的焦點(diǎn),在算法設(shè)計(jì)時(shí),需要了解算法設(shè)計(jì)的規(guī)則。

    要想充分理解算法并有效地應(yīng)用于實(shí)際問題,關(guān)鍵是對(duì)算法的分析。通常我們可以利用實(shí)驗(yàn)對(duì)比分析、數(shù)學(xué)方法來分析算法。實(shí)驗(yàn)對(duì)比分析很簡(jiǎn)單,兩個(gè)算法相互比較,它們都能解決同一問題,在相同環(huán)境下,哪個(gè)算法的速度快我們一般就會(huì)認(rèn)為這個(gè)算法性能更好。數(shù)學(xué)方法能將算法分析的更為細(xì)致,能在嚴(yán)密的邏輯推理基礎(chǔ)上判斷算法的優(yōu)劣,但在完成實(shí)際項(xiàng)目過程中,我們很多時(shí)候都不能去做這種嚴(yán)密的論證與推斷,因?yàn)槲覀儾皇窃谕瓿梢坏罃?shù)學(xué)難題,也不是數(shù)學(xué)領(lǐng)域的專家,將大量的時(shí)間花費(fèi)在公式的計(jì)算與證明上會(huì)導(dǎo)致整個(gè)項(xiàng)目進(jìn)度緩慢、成本過高,因此,在算法設(shè)計(jì)中,我們往往采用能近似表達(dá)性能的方法來展示某個(gè)算法的性能指標(biāo)。例如,計(jì)算機(jī)對(duì)n2n2+2n的響應(yīng)速度,當(dāng)n比較大的時(shí)候幾乎一樣沒什么區(qū)別,我們便可直接認(rèn)為后者算法的復(fù)雜度為n2。在分析算法時(shí),隱藏細(xì)節(jié)的數(shù)學(xué)表示法成為大O記法,它可以幫助我們簡(jiǎn)化算法復(fù)雜度的許多細(xì)節(jié),提取主要成分,這和遙感圖像處理中的主成分分析思想相近。

    基于算法復(fù)雜度簡(jiǎn)化表達(dá)的思想基礎(chǔ)上,我們通常會(huì)對(duì)算法進(jìn)行最壞情況分析和平均情況分析。對(duì)于一個(gè)給定的算法,如果能保證它的最壞情況下的性能依然不錯(cuò)當(dāng)然很好,但是在某些情況下,程序的最壞情況算法的運(yùn)行時(shí)間和實(shí)際情況的運(yùn)行時(shí)間相差很大,在實(shí)際應(yīng)用中我們幾乎不會(huì)碰到最壞情況下的輸入,那么此時(shí)進(jìn)行最壞情況分析顯得有些畫蛇添足,特別是分析最壞情況算法會(huì)花費(fèi)大量精力的時(shí)候。算法的平均情況分析可以幫助我們估計(jì)程序的性能,作為算法分析的基本指標(biāo)之一,但是平均情況和實(shí)際情況仍然會(huì)有相差很大的時(shí)候,這時(shí)我們便可以使用隨機(jī)法來盡量模擬現(xiàn)實(shí)中的情況,這樣可以得到在嚴(yán)格的概率意義上的預(yù)測(cè)運(yùn)行時(shí)間。另外,對(duì)于一個(gè)經(jīng)典算法,我們沒有必要再去對(duì)該算法進(jìn)行改進(jìn),研究它的上界和下界,只需要了解該算法的特性,然后在合適的時(shí)候使用它。

    最后,當(dāng)一個(gè)程序變快和變慢,讓計(jì)算機(jī)反映出來的時(shí)間差幾乎不會(huì)讓人產(chǎn)生感覺的時(shí)候,我們也沒有必要去改進(jìn)這個(gè)算法,例如程序進(jìn)行1000次循環(huán)花費(fèi)0.001秒,改進(jìn)后為0.1秒,在實(shí)際應(yīng)用中通常也只需要幾千次循環(huán),此時(shí)我們就沒有必要去花時(shí)間來研究這個(gè)算法了,只要該算法能正確完成任務(wù)即可。

    posted on 2006-01-22 00:34 Flyingis 閱讀(3360) 評(píng)論(9)  編輯  收藏 所屬分類: Algorithm

    評(píng)論

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    叫大O標(biāo)記,可能好一點(diǎn)。因?yàn)槲魑慕蠦ig O. :)
    2006-01-22 13:09 | Big O

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    仔細(xì)讀了一下,發(fā)現(xiàn)你對(duì)算法是不了解的。我簡(jiǎn)單更正一下。

    Big O notaion是有嚴(yán)格數(shù)學(xué)定義的。你理解的那個(gè)不對(duì)。你說多項(xiàng)式的情況還可以,要其他函數(shù)形式呢?

    Big O notation Definition:
    f(n) = O(g(n)) means there are positive constants c and k, such that 0 ≤ f(n) ≤ cg(n) for all n ≥ k. The values of c and k must be fixed for the function f and must not depend on n.

    大O標(biāo)記,表示的是函數(shù)的緊上界(注意是≤ ).如果只是<,就只是上界,用小O標(biāo)記,表示。

    其他,還有ω,Ω,表示緊下屆,下屆。Θ表示,同時(shí)上界和下屆。

    程序員是不需要自己寫算法,但是需要了解算法的。 比如,java Collection Framework里面的sort,是改進(jìn)的merge sort ,而且是stable的。了解了才可以用好他們:)
    2006-01-22 13:35 | 程序員

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    補(bǔ)充一下,是叫做asymptotic upper bound,
    中文真不知道叫什么。應(yīng)該叫非表象上界,不是普通的上界。這個(gè)asymptotic是你說的簡(jiǎn)化細(xì)節(jié)的意思了。
    2006-01-22 13:46 | 程序員

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    "大O記法"的中文定義:
    若存在常數(shù)c和k,對(duì)所有n>k,使0<f(n)<cg(n)成立,函數(shù)f(n)就可以稱為O(f(n))
    使用O記法的原因主要是:當(dāng)我們忽視數(shù)學(xué)公式中的小項(xiàng)時(shí),當(dāng)我們忽略對(duì)整個(gè)分析量只起了少量作用的部分程序時(shí),限制可能出現(xiàn)的錯(cuò)誤,并且根據(jù)算法總體運(yùn)行時(shí)間的上界,對(duì)算法分類。定義中的小于還是小于等于還沒有認(rèn)真考究,感謝“程序員”的評(píng)論。
    我學(xué)習(xí)算法一是因?yàn)榕d趣,二是因?yàn)橐院蠊ぷ骱芸赡軙?huì)需要。和“程序員”建議的一樣,細(xì)節(jié)我不會(huì)去深究,但要了解各種算法的特性。寫一些文章有時(shí)顯得有點(diǎn)班門弄斧,不妥之處請(qǐng)各位高手同行直接批評(píng)糾正,幫助我提高!
    2006-01-22 16:41 | Flyingis

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    剛才在公司沒有五筆,現(xiàn)在在寫幾句.不好意思我只是討論問題,有冒犯的地方,老兄多包含.

    大O標(biāo)記其實(shí)是n>=k的時(shí)候函數(shù)的上界,有了這個(gè)定義才能時(shí)候算法分析.時(shí)間或空間復(fù)雜度進(jìn)行推導(dǎo)的時(shí)候,某一步可以證明有這么一個(gè)K,n>=k的時(shí)候,g()>=f(),于是,就可以用O(g)來表示了.

    不能如你說的就是簡(jiǎn)化掉表達(dá)示后面的東西,那在數(shù)學(xué)上也講不通呀.

    算法分析的技術(shù),除了上面那種根據(jù)程序?qū)懗鰪?fù)雜度f,再推出O(g)的直接方式.還有一種叫做amortize的技術(shù),中文應(yīng)該翻譯成分期嘗還的分析技術(shù).中文的教材里都不講這個(gè),分析基本都不講,清華那本<數(shù)據(jù)結(jié)構(gòu)>只講結(jié)果不講為什么沒有證明過程,象一本速查手冊(cè),現(xiàn)在覺得那些教材編的太差了,誤人子弟.
    2006-01-22 16:54 | 程序員

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    今天看了你很多的blog還是收獲很多的.以后多交流.有冒犯之處,多多原諒呀.
    2006-01-22 16:59 | 程序員

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    @ 程序員

    你見外了:)

    在這里,我本來就應(yīng)該抱著學(xué)習(xí)的態(tài)度來寫文章,看大伙的評(píng)論。在我看來,只要是學(xué)術(shù)或研究方面的問題,可以直接指出,甚至爭(zhēng)論,前提是只對(duì)事,不對(duì)人。能和比我經(jīng)驗(yàn)豐富的人討論問題是我的榮幸。

    國內(nèi)的教材的確令人不敢恭維,我現(xiàn)在看的是Robert Sedgewick的Algorithms in Java,感覺不錯(cuò)。

    在學(xué)習(xí)過程中,我喜歡將看過的內(nèi)容用自己的思維去重新組織一遍,然后覺得有用的東西就寫下來,這里面自然就會(huì)有一些思想上的誤區(qū)與表達(dá)上的問題,貼在blogjava上就是來和大家交流,讓大家提意見的。只有一點(diǎn)一滴的積累,才有最后質(zhì)的變化。

    感謝你的指正!
    2006-01-22 17:09 | Flyingis

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    你在美國?現(xiàn)在上網(wǎng),又在公司加班了吧:)
    2006-01-22 17:13 | Flyingis

    # re: 算法分析規(guī)則  回復(fù)  更多評(píng)論   

    現(xiàn)在已經(jīng)在家了,白天到公司了.沒有加班,比較閑所以有空在blog上瞎寫了:)
    2006-01-22 17:19 | 程序員
    主站蜘蛛池模板: 久青草视频97国内免费影视| 亚洲人精品亚洲人成在线| 亚洲精品久久久www| 成年女人永久免费观看片| 成全视频在线观看免费高清动漫视频下载| 99久久久精品免费观看国产 | 亚洲一区精品中文字幕| 亚洲AV午夜福利精品一区二区| 国产AV无码专区亚洲Av| 亚洲国产精品线在线观看| 亚洲黄网在线观看| 亚洲av永久无码嘿嘿嘿| 亚洲妇女熟BBW| 久久久久亚洲精品无码网址色欲 | 亚洲第一精品福利| 亚洲国语在线视频手机在线| 亚洲AV综合色区无码二区爱AV| 亚洲一区电影在线观看| 亚洲av无码专区国产不乱码| 在线观看亚洲视频| 一个人看www免费高清字幕| 成人片黄网站色大片免费观看APP| 精品一区二区三区免费 | 黑人粗长大战亚洲女2021国产精品成人免费视频 | 无码区日韩特区永久免费系列| 国产免费不卡v片在线观看| 午夜一级毛片免费视频| 免费看男女下面日出水视频| 久久亚洲国产精品123区| 亚洲国产人成在线观看69网站| 亚洲一区中文字幕| 免费精品视频在线| 国产精品免费福利久久| 国产成人午夜精品免费视频| 波多野结衣一区二区免费视频| 亚洲欧洲日产国码av系列天堂| 一级毛片完整版免费播放一区| 三级网站免费观看| 免费AA片少妇人AA片直播 | 国产一级淫片a免费播放口| 综合在线免费视频|