簡體   English   中英

通過實驗對Java中的函數進行大O表示

[英]Big-O notation of a function in Java by experiment

我需要編寫一個確定Java中算法的Big-O表示法的程序。

我沒有訪問算法代碼的權限,因此它必須基於實驗和執行時間。 我不知道從哪里開始。

有人能幫我嗎?

編輯:我對算法唯一了解的是采用整數值並且沒有返回值

首先,您需要知道這種程序是做什么的,以提供關於該算法屬於哪個復雜度類的基於證據的猜測。 它可能會給出錯誤的答案。 (實際上,在復雜性級別異常的復雜情況下,錯誤答案的可能性越來越大。)

簡而言之,這不是復雜性分析。

通用方法是:

  • 使用整個范圍內的N值多次運行算法,以測量執行時間。 對每個N重復多次,以確保獲得一致的測量結果。

  • 嘗試使實驗結果適合不同種類的曲線; 即線性,二次,對數。 注意,重要的是適合大的N值。 因此,當您檢查“擬合優度”時,請使用一種措施,使較大的數據點的權重增加。

這只是一個起點。 例如,我希望您將對以下問題進行自己的研究:

  • 如何獲得可靠的執行時間度量(對於Java),
  • 如何以數學上合理的方式進行曲線擬合,以及
  • 處理執行時間過長而無法通過實驗測量大N的情況。

您可以進行一些實驗,並繪制輸入數量與執行該功能所花費的時間。 然后,您可以將其與與Big-O相關的眾所周知的曲線進行比較,或者嘗試估算方程。

由於您無權訪問算法的源代碼,因此您唯一可以做的就是測量算法對不同大小的輸入所花費的時間,然后嘗試從中推斷出一個函數。 由於您正在進行實驗,因此您現在進入了統計領域,因此也許您可以使用該領域的想法,例如回歸分析

暫無
暫無

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

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