<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 簡介 `O(1),O(n),O(lgn),O(nlogn),O(n^2)` 大O描述的是算法的運行時間和輸入數據之間的關系 ~~~ public static int sum(int[] nums) { int sum = 0; for(int num:nums) sum+= num; return sum; } ~~~ # `O(n)` 運行的時間和,n有關,是線性關系 n是nums中元素的個數 # 為什么用大O,叫O(n)? 忽略常數.實際時間`T=c1*n+c2` ~~~ T=2*n+2 O(n) T=2000*n+10000 O(n) 漸進時間復雜度 T=1*n*n+0 O(n^2) 描述n趨近于無窮的情況 T=2*n*n+300n+10 O(n^2) 低階項會被忽略 ~~~ 不一定O(n^2)就比O(n)慢 當n越大,O(n)的作用就體現出來了 # 分析動態數組的時間復雜度 ## 添加操作 `addLast(e) O(1) 所消耗的時間是個常數` `addFirst(e) O(n) 添加一個元素,其他元素都要向后移動一位,要看有多少元素,是線性關系` `add(index,e) O(n/2)=O(n) 和index有關,index大和addLast(e)差不多,小和addFirst(e)差不多,需要概率論的一些知識` 這3個可以叫0(n)的算法,`addLast(e)`是O(1),但是我們一般都是看最壞的情況 resize那也就是0(n)的算法 ## 刪除操作 ~~~ removeLast(e) 0(1) removeFirst(e) O(n) remove(index,e) O(n/2)=0(n) ~~~ 這些也叫O(n) ## 修改操作 ~~~ set(index,e) O(1) ~~~ ## 查找操作 ~~~ get(index) O(1) 已知索引查找 contains(e) O(n) 未知索引,要查找所有,找出來 find(e) O(n) ~~~ ![](https://box.kancloud.cn/be0f25bf433d6ffedeb39309b21310ae_959x483.png) # 均攤復雜度 addLast(e)認為O(n)不一定合理 ![](https://box.kancloud.cn/e4ce772e61c884f2b63cf7336e62eace_1137x535.png) 假設capacity=n,n+1次addLast,觸發resize,總共進行2n+1次基本操作 平均,每次addLast操作,進行2次基本操作 這樣均攤計算是O(1),均攤計算是比最壞計算有意義的 # 復雜度震蕩 我們**同時**看**addLast和removeLast**操作 ![](https://box.kancloud.cn/eeba1640334df9335746bc26da9f9bab_1198x368.png) 出現問題的原因:removeLast時resize過于著急(Eager) 解決方案:Lazy(懶惰) ![](https://box.kancloud.cn/1bca1a84f76f0e49259eab66795a29a6_1227x93.png) 當`size==capacity/4`時,才將capacity減半 所以縮容應該這樣寫 ~~~ //如果數組中的利用少到一定的程度就把數據縮容 if (size == data.length / 4) { resize(data.length / 2); } ~~~
                  <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>

                              哎呀哎呀视频在线观看