algorithm - 为什么在恢复最长递增子序列时需要祖先数组?
问题描述
我查看了以下描述最长递增子序列算法的网站:https ://www.fyears.org/2016/12/LIS.html
在“如何重建子序列?”一节中,它说“我们应该注意最后的dp不是LIS。”
不知何故,我不明白 dp 不是 LIS 吗?
我们知道 dp 是已排序的,并且它包含的被算法修改的条目与 LIS 的长度一样多。索引 i 处的元素不能等于 i-1 处的元素,因为对于每个索引 dp[i] 包含长度为 i + 1 的所有递增子序列中的最小可能结束值。因此,如果存在长度为 i 的子序列+ 1,这意味着还有一个长度为 i 的子序列,因此必须以较小的值结束,对吗?
解决方案
LIS is a subsequence (fixed order of elements), but DP array isn't saving elements order. Check on array [2, 3, 1]. DP will be [1, 3] after all iterations, but [1, 3] isn't the subsequence of the initial array.
推荐阅读
- python - 更改 Python Spyder 的解释
- python - 获取 TypeError 试图对文件的内容求和
- bittorrent - KRPC 协议在 BEP-05 中的行为很奇怪
- dart - 在项目中包含 image_picker 时出错(Flutter)
- java - 如何从 org.springframework.data.repository.CrudRepository 后代中取消代理子对象
- python-3.x - 如何使用队列在python3中使用tkinter线程?
- php - 如何在字符串 PHP 中拆分匹配字母
- php - 如何在 Laravel 5.7 中更改数据库
- python - BeautifulSoup:选择器没有提取正确的数据 - Yahoo Scrape
- android - java.lang.NoClassDefFoundError:解析失败:Lcom/google/android/gms/common/internal/zzbp