簡體   English   中英

Math.Sqrt() 的時間復雜度?

[英]Time complexity of Math.Sqrt()?

我怎樣才能找到這個函數的復雜性?

private double EuclideanDistance(MFCC.MFCCFrame vec1, MFCC.MFCCFrame vec2)
{
  double Distance = 0.0;
  for (int K = 0; K < 13; K++)
     Distance += (vec1.Features[K] - vec2.Features[K]) * (vec1.Features[K] - vec2.Features[K]);
  return Math.Sqrt(Distance);
}

我知道下面的部分是 O(1):

double Distance = 0.0;
for (int K = 0; K < 13; K++)
   Distance += (vec1.Features[K]-vec2.Features[K])*(vec1.Features[K]-vec2.Features[K]);

但我無法弄清楚Math.Sqrt()的復雜性是什么。

你可以認為它是 O(1):

換句話說,Math.Sqrt() 轉換為單個浮點機器代碼指令

來源: c# Math.Sqrt 實現

正如所提到BlackBear ,所述Math.Sqrt執行轉換為一個給單個浮點機器代碼指令(FSQRT)。 該指令的周期數是有界的(這里有一些例子)。 這意味着它的復雜度是 O(1)。

那是正確的,因為我們使用了有限數量的浮點值。 該操作的“實際”復雜度取決於輸入的位數。 在這里您可以找到基本算術函數的復雜性列表。 根據該列表,平方根函數具有乘法函數的復雜性(兩個 n 位數的 O(n log n))。

你說,你假設加法和乘法函數的復雜度為 O(1)。 這意味着,您可以假設平方根函數雖然慢得多,但也具有 O(1) 復雜度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM