利用在数组长度N很大的情况下能达到压缩存储的作用。一般还是用在DP题目和递归中,因为DP题目是一个自下而上的扩展过程,我们常常用到是连续的解,而每次用到的只是解集中的最后几个解,所以以滚动数组形式能大大减少内存开支。 比如:斐波那契数列 为了节约空间用滚动数组的方法 ...
今天第一次用了滚动数组,缘由要从一道题说起:POJ Palindrome 题意:给你一个字符串,求对字符串最少添加几个字符可变为回文串。 分析: 简单做法是直接对它和它的逆序串求最长公共子序列长度len。n len即为所求。至于为什么,小盆友们可以自己模拟一下下。O O 因为这不是我们今天讲的重点 噶呜 很明显这是一道LCS题,如果你还不知道什么是LCS,可以点击 LCS,我们都知道要开辟一个dp ...
2014-08-09 10:41 5 1802 推荐指数:
利用在数组长度N很大的情况下能达到压缩存储的作用。一般还是用在DP题目和递归中,因为DP题目是一个自下而上的扩展过程,我们常常用到是连续的解,而每次用到的只是解集中的最后几个解,所以以滚动数组形式能大大减少内存开支。 比如:斐波那契数列 为了节约空间用滚动数组的方法 ...
滚动数组的作用在于优化空间,主要应用在递推或动态规划中(如01背包问题)。因为DP题目是一个自底向上的扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。 一个简单的例子: 斐波那契数列 ...
说来惭愧,我老早以前就学习了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背包问题,能够做到一个表格简单粗暴下去,然后求得结果,但心里总觉得对这个算法理解十分不到位,抱着对算法的热爱,网上很多大牛的算法思维实在让我佩服的五体投地。在此讲一讲动态规划中滚动数组的求解方法,算是对这个知识点做一个记录,也希望有写的不妥的地方 ...