簡體   English   中英

如何估算使用遞歸Java的程序的時間和內存消耗

[英]How to estimate the time and memory consumption of a program that uses recursion Java

我正在解決騎士的旅行問題。 桌子的大小是5X5,游覽的起點可以是任何正方形。 我找到了所有可能的開放式解決方案,並計算了內存使用率以及程序的時間消耗。 我正在使用遞歸,並且在每個騎士的動作上,我正在計算一個騎士的下一個可能動作。

問題是如何在更大的桌面上計算內存和時間消耗。 Java中通常使用哪種工具來估算無法實際運行的程序的這些值? 應該只是使用O標記的假設嗎?

通常,沒有Java工具或其他編程語言的工具可以做到這一點。 它與Turing暫停問題有關 ,眾所周知這是無法解決的。

對於具體的問題實例,您可以編寫一個實例,嘗試使用具體算法的理論分析(O表示法)從較小尺寸的電路板中得出的測量值進行推斷。

例如,如果您知道運行時間為O(2 ^ n),則意味着

t = c *(2 ^ n)(+可以忽略的部分)

您可以通過在方程式中設置具體時間(例如n = 5)來計算常數c,例如,如果在n = 5時測量t = 10s:

10秒= c *(2 ^ 5)

==> c = 10 s /(2 ^ 5)

這只是一個例子(我不知道您的問題是否為O(2 ^ n))。

但是正如我說的,為此,您必須知道算法的O表示法,它是由人類數學直覺得出的證明而來的,通常不能通過神算法來計算。

擴大到更大的辦公桌的尺寸是多少

請注意, 可以計算出消耗(的時間和內存),並從復雜性估計消耗之間的差異顯著。 前面的答案(Thomas Philipp)是正確的,但有一個細節:

t = c *(2 ^ n)(+可以忽略的部分)

從一個理論的角度來看,這是一個矛盾:如果您關心因子c ,那么您可能還會關心所謂的“可忽略的部分”。 那些在復雜度確定的O(2 ^ N)世界中消失了,其中唯一重要的項是在+ infinity處限制極限的項。

實際上,請檢查您的設置復雜性以及算法中任何迫在眉睫的次要條件。 例如,我開發的一個程序具有簡單的O(n ^ 2 log n)解決方案。 O(n log n)個准備工作和一些O(n)開銷。

我們面臨的問題是,給我們的消費者,該算法並沒有出現按比例的方式。 對於小任務,開銷占主導地位。 對於典型的評估任務,前期工作和主體的時間大致相等。 對於真實的應用程序,主體顯示其真實的顏色並接管了工作,盡管前兩個階段花費的時間比評估任務的整個運行時間長。

簡而言之,由於較低復雜度階段的常數和系數值較高,因此中期計算無法按外部觀察者的預期進行擴展。

暫無
暫無

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

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