簡體   English   中英

從程序中獲取時間復雜度和空間復雜度

[英]Getting Time Complexity and Space Complexity From a Program

我正在創建一個網站(我的學術項目),用戶可以在其中上傳他的程序文件(.cs,.PHP,.java),然后網絡編譯該程序並能夠自動說出時間和空間的復雜性。 這可能嗎? 我們如何計算程序的復雜度。 Java中是否有任何代碼可以查找程序的復雜性? 還是我們可以從編譯器本身中找到這些?

假設您知道為程序提供什么樣的輸入,則可以通過實際運行程序的連續迭代來估算復雜度。 但是,由於停止問題 ,一般情況下的靜態分析是不可能的。

如果可以在各種大小的輸入集上多次運行應用程序,則可以得出一個近似值。

在對數字進行排序的經典情況下,您可以讓應用程序對2個數字進行排序,然后依次對4、8、16、32等進行排序,並從本質上繪制每次運行的內存和時間要求。 基本曲線擬合將向您顯示復雜性的增長。

請注意,這並不是嚴格精確的,因為某些算法可能在某些方面會導致其性能發生根本變化。 這樣的系統也可能會被“看起來”相似但具有極大不同特性(例如漸近曲線和對數曲線,或指數曲線和多項式曲線)的增長之間的差異所欺騙。

確定程序的時間和空間復雜度是一個難題。 正如反饋所指出的那樣,通常甚至無法指出程序是否將終止。 (這被稱為暫停問題

首先,我建議您研究一下Cyclomatic Complexity ,它是由GMetrics項目計算得出的。

這將使您開始探索主題。

暫無
暫無

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

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