日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php数组o m n mn,O(m + n)和O(mn)之间的区别?

發布時間:2024/7/23 php 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php数组o m n mn,O(m + n)和O(mn)之间的区别? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小編典典

我對發現直覺的建議是思想實驗,如下所示:

首先,認識到m和n是 輸入的 兩個 不同度量

。它們可能是兩個輸入流的長度,矩陣邊的長度,或同一數據結構的兩個不同屬性的計數,例如同一圖形的邊和節點計數,或任何類似的度量。

直覺是big-O用一個簡單的函數-稱R(m,n)-乘以某個值來表示算法的 真實

運行時間(或其他方面,例如比較計數或所需空間)的界限。任意常數。我們忽略了常數因素,并通過調用運行時間O(R(m,n))來考慮所有以同一R為界的算法。

因此,大O(m + n)表示,對于合適的大m和n,實際運行時間受某個函數R(m,n)= C(m +

n)限制。對于圖示例,這表示算法的實際運行時間將受頂點和邊的數量之和的倍數限制。

您可以將邊界函數看作是3d中具有軸m,n和R(m,n)的圖形。或者您可以想到圖表:

R(m,n) = m + n

--------------

m= 1 2 3 4

n=1 1 2 3 4

2 3 4 5 6

3 4 5 6 7

4 5 6 7 8

對于R(m,n)= mn,您有

R(m,n) = mn

--------------

m= 1 2 3 4

n=1 1 2 3 4

2 2 4 6 8

3 3 6 9 12

4 4 8 12 16

作為3d圖形,第一個函數是一個平面,第二個函數是在幾乎所有點上都快得多的增長函數。這意味著,如果m和n足夠大,則O(mn)邊界最終將比O(m +

n)大(對應于可能更慢的程序),因為常量變得無關緊要了。

以快速增長的成本為例,假設O(m + n)算法在其運行時范圍內具有3的額外常數(與上述兩種算法相比,在小輸入量下它的運行速度可能非常慢):

R(m,n) = 3(m + n)

--------------

m= 1 2 3 4

n=1 3 9 12 15

2 9 12 15 18

3 12 15 18 21

4 15 18 21 24

因此,與上表中的O(mn)相比,O(m + n)的約束似乎受約束的程度要小。但是看一下m = n = 100的情況。此處,在O(m +

n)算法上的界限是3(m + n)=600。但是常數較小的O(mn)算法的界限mn =10000。顯然,如果m和n大,則您要第一個。

@Anonymous在本文的初始版本中提出了一個很好的觀點,它混淆了big-O和big-Theta。Big-O僅處理被測數量的界限或 上限

。例如,這意味著 每個 O(n)算法也是O(n log n)和O(n ^ 2)。如果實際運行時間受較慢增長的函數限制,則它也受所有較快增長的函數限制。

然而,人們常常說“此算法為O(n)”,而這意味著邊界是 緊密的

。也就是說,對于某些常數C,Cn是運行時間的上限,而對于其他常數D(合適的是較大的n),Dn也是下限。這樣的嚴格界限正確地表示為Theta(n),而不是O(n)。Theta(R(m,n))算法的運行時間(大致而言)與R(m,n)成比例。

最后我要補充一點,在許多情況下,您不能忽略常量。文獻中存在許多算法,它們比通常使用的算法漸近“快”,但是常數太大,以至于實際問題的規模總是太慢。計算幾何有很多例子。基數2排序是另一種。它是Theta(n),但實際上,一個好的快速排序(Theta(n

log n)平均大小)將在大小至少為10 ^ 8的整數數組上勝過它。

2020-07-28

總結

以上是生活随笔為你收集整理的php数组o m n mn,O(m + n)和O(mn)之间的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。