<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                什么是算法?1+1=2算不算算法?嚴格講算法不分難易,能解決數學問題的方法都叫算法。 哈,下面讓我們看一下嚴格的定義吧:算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,并且每條指令表示一個或者多個操作。 ### 一、數據結構和算法的關系 數據結構和算法什么關系?這不是介紹數據結構的文章嗎,為什么扯到算法了呢? 如果上一章你看了的話,應該會記得一個公式:**程序設計=數據結構+算法**。(牛人就是牛人,一個公式就說明了所有的關系)通俗地來講這個數據結構和算法的關系就像梁山伯和祝英臺、羅密歐和朱麗葉的關系。只談數據結構和只談算法是沒有意義的,它們倆在一起才能碰撞出智慧的火花! ### 二、算法優劣的比較 上過小學的童鞋(廢話)應該都遇到過這樣一個經典的問題吧:1+2+3+...+100,要解決這樣一個問題,程序改怎么寫?憑你的智商相信這個難不住你吧: ~~~ public class Add { public static void main(String args[]) { int sum = 0; int n = 100; for (int i = 1; i <= 100; i++) { sum = sum + i; } System.out.println(sum); } } ~~~ 最近在用Java,就用Java寫了啊,算法其實是超脫語言的,什么語言都能展現。 這個程序其實是不經過思考寫出來的程序,當然計算機的運行速度很快我們感覺不到,要讓你用筆算估計你就崩潰了。 話說還有沒有更省時的算法呢?上過高中的同學都應該學過等差數列吧,這其實就是一個最簡單的等差數列求和,當然我們有求和公式啦!一百個加法換成一個乘法,是不是很偉大的轉換?節省了大量的時間。 其實我們所要追求的境界就是在能用更好的方法解決問題,而不是僅僅只是解決問題這么簡單,這就是算法的魅力。 ### 三、算法特性 算法具有五個基本特性:輸入、輸出、有窮性、確定性和可行性。 輸入輸出:算法具有零個或多個輸入,有一個或多個輸出。(也就是說**可以沒有輸入但是必有有輸出**) 有窮性:指算法在執行**有限個步驟**之后,自動結束而不會出現無限循環,并且每個步驟在可接受的時間內完成。 確定性:算法的每一個步驟都有確定的含義,不會出現二義性。 可行性:算法的每一步都必須是可行的,也就是說每一步都能夠通過執行有限次數完成。 ### 四、算法設計的要求 1.正確性:算法的正確性是指算法至少應該有輸入、輸出金額加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案。 2.可讀性:算法設計的另一個目的是為了便于閱讀、理解和交流。 3.健壯性:當輸入不合法的數據時,算法也能進行相關處理,而不是產生程序崩潰、異常退出等。 4.時間效率高和存儲量低。 ### 五、算法效率的度量方法 凡事講求證據,你說別人的算法效率低,總的拿出來標準吧,這個標準也就是度量的方法,才能讓別人心服口服。 1.事后統計方法:這種方法主要是通過設計好的測試程序和數據,利用計算機計時器對不同的算法編制的程序的運行時間進行比較,從而確定算法效率的高低。(想法很簡單,實施起來不容易,也缺乏公信力,不予采納) 2.事前分析估算方法:在計算機程序編制前,依據統計方法對算法進行估算。 第二節討論的問題可以量化優劣了: ![](https://box.kancloud.cn/2016-02-15_56c13689c37a6.jpg) 第一種算法執行了2n+3次,第二種算法執行了3次。假如n很大的話,這執行時間可就不是一個數量級了吧。所以說研究算法很大程序上是在研究執行效率上面。 ### 六、算法時間復雜度 1.定義:在進行算法分析時,語句總的執行次數T(n)是關于問題規模n的函數,進而分析T(n)隨n的變化情況并確定T(n)的數量級。算法的時間復雜度,也就是算法的時間量度,記作:T(n)=O(f(n))。它表示隨著問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸進時間復雜度,簡稱時間復雜度。 2.推導大O階方法 推導大O階: 1.用常數1取代運行時間中的所有加法常數。O(3)=O(1) 2.在修改后的運行次數函數中,只保留最高項。O(n^2+n)=O(n^2) 3.若果最高階存在且不是1,則除去與這個項相乘的常數。得到的結果就是大O階。O(2n^2)=O(n^2) 下表介紹常見的時間復雜度: ![](https://box.kancloud.cn/2016-02-15_56c13689e9c28.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看