在最近優化一些代碼時,我們最終執行了我認爲是「記憶式」的「類型」,但我不確定我們應該這麼稱呼它。下面的僞代碼不是實際的算法(因爲我們在我們的應用程序中幾乎不需要階乘因子,並且發佈了所述代碼是一個觸發攻擊),但它應該足以解釋我的問題。這是原文:這是否被認爲是記憶?
def factorial (n):
if n == 1 return 1
return n * factorial (n-1)
很簡單,但我們增加了固定點,這樣可避免較大的數字大量的計算,是這樣的:
def factorial (n):
if n == 1 return 1
if n == 10 return 3628800
if n == 20 return 2432902008176640000
if n == 30 return 265252859812191058636308480000000
if n == 40 return 815915283247897734345611269596115894272000000000
# And so on.
return n * factorial (n-1)
這當然意味着12!
計算爲12 * 11 * 3628800
而不是效率較低12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
。
但我不知道我們是否應該被調用此memoisation因爲這似乎被定義爲記住計算的過去的結果,並使用它們。這更多的是關於硬編碼計算(不記得)和使用這些信息。
這個過程是否有一個合適的名稱,或者我們可以聲稱memoisation不僅延伸到運行時所做的計算,還包括那些在編譯時完成的計算,甚至在我開始之前回到我腦海中完成的計算編寫代碼?
是的。這是一種記憶。你還需要知道什麼? – 2011-03-22 03:00:37
_這是我需要知道的。它不會與維基百科條目凝結在一起,它具體指出:「一個memoized函數」記住「與某些特定輸入集相對應的結果。隨後的記憶輸入的調用返回記憶的結果,而不是重新計算它,......。我認爲可能會有不同的術語,因爲它不記得它,而是將其硬編碼。 – paxdiablo 2011-03-22 03:03:01
好吧,到目前爲止我有兩個答案,是和否。這意味着可能需要引用權威來源。我會離開這個問題幾個小時,看看會發生什麼。 – paxdiablo 2011-03-22 03:08:40