利用在數組長度N很大的情況下能達到壓縮存儲的作用。一般還是用在DP題目和遞歸中,因為DP題目是一個自下而上的擴展過程,我們常常用到是連續的解,而每次用到的只是解集中的最后幾個解,所以以滾動數組形式能大大減少內存開支。 比如:斐波那契數列 為了節約空間用滾動數組的方法 ...
滾動數組的作用在於優化空間,主要應用在遞推或動態規划中 如 背包問題 。因為DP題目是一個自底向上的擴展過程,我們常常需要用到的是連續的解,前面的解往往可以舍去。所以用滾動數組優化是很有效的。利用滾動數組的話在N很大的情況下可以達到壓縮存儲的作用。 一個簡單的例子: 斐波那契數列: 滾動數組實際是一種節省空間的辦法,時間上沒啥優勢,多用於DP中,舉個例子吧: 一個DP,平常如果需要 的空間,其實 ...
2017-05-21 09:01 0 1209 推薦指數:
利用在數組長度N很大的情況下能達到壓縮存儲的作用。一般還是用在DP題目和遞歸中,因為DP題目是一個自下而上的擴展過程,我們常常用到是連續的解,而每次用到的只是解集中的最后幾個解,所以以滾動數組形式能大大減少內存開支。 比如:斐波那契數列 為了節約空間用滾動數組的方法 ...
今天第一次用了滾動數組,緣由要從一道題說起:POJ 1159 Palindrome 題意:給你一個字符串,求對字符串最少添加幾個字符可變為回文串。 分析: 簡單做法是直接對它和它的逆序串求最長公共子序列長度len。n-len即為所求。至於為什么,小盆友們可以自己模擬一下下。O ...
說來慚愧,我老早以前就學習了dp,可直到最近才知道滾動數組。 所以說,滾動數組是什么呢? 它是一種優化dp空間復雜度的思想。 在dp轉移時,我們往往不需要之前推的所有的,而是只需要前一兩個轉移的。 我們以斐波那契數列為例,代碼如下: 可以發現,如果求解99位,那么需要 ...
小技巧—滾動數組 滾動數組是常見的一種空間優化方式。 應用是遞推算法,動態規划(其實現方式是遞推)。 舉個栗子: 斐波那契數列是遞推的一個最好的例子,它的遞推公式是: \[fib_n=fib_{n-1}+fib_{n-2} \] 也就是說,我們只需要知道n-1和n-2項就能 ...
滾動數組 首先什么是滾動數組呢?就是將一個可能有100元素的遍歷,我用一個size=2的數組去遍歷,這時你可能會問容量為3的數組大小明明小於100啊,為什么可以拿他去遍歷100個元素呢? 這時我會用一句話回答你:“具體問題具體分析!”,你有沒有想過,如果我遍歷過的元素就再也不會使用他了,那我 ...
滾動數組是DP中的一種編程思想。簡單的理解就是讓數組滾動起來,每次都使用固定的幾個存儲空間,來達到壓縮,節省存儲空間的作用。起到優化空間,主要應用在遞推或動態規划中(如01背包問題)。因為DP題目是一個自底向上的擴展過程,我們常常需要用到的是連續的解,前面的解往往可以舍去。所以用滾動數組優化 ...
雖然接觸動態規划算法已經有一段時間,給一個01背包問題,能夠做到一個表格簡單粗暴下去,然后求得結果,但心里總覺得對這個算法理解十分不到位,抱着對算法的熱愛,網上很多大牛的算法思維實在讓我佩服的五體投地。在此講一講動態規划中滾動數組的求解方法,算是對這個知識點做一個記錄,也希望有寫的不妥的地方 ...