[翻译]How to Find a Solution ( 如何找到问题的答案,来自Top Coder 网站)
原文链接: https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/
个人感觉,这篇文章很不错,从一个比较高的高度、相对系统的总结了一些经典算法问题的经典思路。翻译过来是为了方便自己理解和学习,也希望能够帮到有需要的朋友。
全文很长,我会一部分一部分的慢慢搬运。
- Dynamic Programming 动态规划问题
- 待续
Dynamic Programming (动态规划)
相当多的问题是用这种算法技巧解决的,因此掌握如何识别这类问题就显得很有价值。但是,这要求我们具有相当的、动态规划方面的编程经验。
通常,动态规划问题会有几个主要的整数变量(比如 N)。这些变量通常是既不太小,也不太大。之所以会这样,是因为通常动态规划问题的复杂度是N^2,或者N^3,既不太大,也不太小的N就会比较合适。值得注意的是,如果N很小,(对于Top Coder上的问题,N很小是指N小雨30),那么很多可能这个问题就不是一个动态规划的问题。
除了这点,动态规划问题中一班都存在一些状态(states)和相应的一些规则(rule)。通过这些规则,一个规模较小的的状态可以到达一个规模大一些的状态。而且,较大的状态应该是仅依赖于较小规模的状态。那么,什么是所谓的状态(state)呢? 状态其实就是一些特定的情形或者状况。如果想进一步了解、掌握动态规划问题,可以阅读这篇文章。
下面,我们来一起分析一道经典的动态规划问题。
给你N枚硬币,和他们的币值(v1,v2,..vN)。再告诉你一个总和S。请算出能够组合出总和S的最少硬币个数。(对于任意一种币值的硬币,你可以使用任意多枚)。如果不存在任何一种组合能够是的总和为S, 返回”不可能“。假定 N <= 100 并且 S <= 1000。
来自问题的提示信息:
* 问题给出了两个主要的整数变量(S和N),并且两者都是大小合适。(即,N * S 是在一个可以解决的时间复杂度范围内)。
* 状态(state)可以被这样定义: 为了能够组合出总和为某一数值、所需要的最少硬币个数。
* 较大状态 state i,仅仅依赖于较小一些的状态 state j ( j < i) 。这里的 i, j 分别代表一个需要组合出来的总和。state i 即表示要凑出总和为 i 所需要的最少硬币个数。
* 如果向某个特定状态添加一枚硬币,就可以获得一个更大的总和,也就是从一个较小的状态到达了一个更大一些的的状态。
如此分析,这个题目具备了所有动态规划的基本要素。下面,我们再来看一道稍微难一些的动态规划问题。
ZigZag - 2003 TCCC Semifinals 3:
一个数字序列叫做ZigZag序列(锯齿序列,如果序列中连续两个数字的差所组成的新序列是严格的正负数字交替出现。第一个差值(如果存在)可以是正数也可以是负数。任意长度小于2的序列都被认为是锯齿序列。给你一组数,找出其中是锯齿序列的最长子序列。(子序列是指从原序列中删除掉0个或更多个元素,对于剩下的元素仍然保持在原序列中相对顺序的序列)。假设给出的序列长度在50以内。
来自题目中的提示信息:
* 给出了N个数字 (N在50以内,不大不小)。
* 状态 state(i, d) 可以这样来定义:以序列中第 i 个数字为结尾的最长锯齿子序列的长度,并且如果子序列中倒数第二个数小于最后一个数,d = 0, 反之,d = 1。
* 状态 state i ,仅仅依赖于 state j (j < i)
* 向子序列的末尾再添加一个数字,就可以到达一个更大的状态。
以上,我们可以看出,这道题也具备动态规划问题的所有基本要素。
对于动态规划问题,最难的部分就是找出或者定义出状态(state),一旦完成了这一步,剩下的工作就是组织问题的答案了,而这个部分超出了本文想要讨论的范围,此处不予赘述。
[翻译]How to Find a Solution ( 如何找到问题的答案,来自Top Coder 网站)的更多相关文章
- WebForms VS. MVC(翻译)
(本文翻译自CodeProject上阿三写的一篇文章,原文地址:http://www.codeproject.com/Articles/528117/WebForms-vs-MVC,讲了有关ASP.A ...
- Excel里内嵌在线翻译
本来寻思着继续写点系统运行日志跟踪技术的,但早晨哥家领导从单位打来电话,让帮助她的闺蜜搞一个excel翻译的问题,总部IT搞不定.我过去是用excel做了几年工作,却都是些数学计算,跟翻译也扯不上啊: ...
- 爹地,我找到了!,15个极好的Linux find命令示例
爹地,我找到了!, 15个极好的Linux find命令示例 英文原文:Daddy, I found it!, 15 Awesome Linux Find Command Examples 标签: L ...
- poj 2503:Babelfish(字典树,经典题,字典翻译)
Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 30816 Accepted: 13283 Descr ...
- Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
# 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...
- 《Django By Example》第十章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译本章过程中几次想放弃,但是既然 ...
- python:爬虫1——实战(下载一张图片、用Python模拟浏览器,通过在线的有道词典来对文本翻译)
一.下载一只猫 import urllib.request response = urllib.request.urlopen("http://cdn.duitang.com/uploads ...
- 'internalField' 和'boundaryField'的区别?【翻译】
翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam/84322-difference-between-internalfield ...
- 焦大翻译:提防一些seo错误认知(完整版)
http://www.wocaoseo.com/thread-179-1-1.html 多人在开始做seo的时候,都曾经尝试通过黑盒测试来找出哪些因素对排名有效果. 黑盒测试是我们IT行业常用术语,它 ...
随机推荐
- php 字符编码转换函数 iconv mb_convert_encoding比较
在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...
- commons-lang使用
跟java.lang这个包的作用类似,Commons Lang这一组API也是提供一些基础的.通用的操作和处理,如自动生成toString()的结果.自动实现hashCode()和equals()方法 ...
- iOS知识点全梳理-备用
感谢大神分享 文/Jack_lin(简书作者)原文链接:http://www.jianshu.com/p/5d2163640e26著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序言 ...
- GO的数组及切片
感觉在向PYTHON学一些数组方面的功能. package main import "fmt" func main() { ]], , , , , , , , , } ] fmt. ...
- 智能卡 APTU命令
一条命令APDU含有一个头标和一个本体.本体可有不同长度,或者在相关数据字段为空时,整个可以不存 在. 头标由四个数据元组成,它们是类CLA(ClAss)字节,命令INS(INStructic,n)字 ...
- 自制单片机之七……扩展:DS18B20温度测量
DS18B20数字温度测量传感器,网上介绍很多,我就不罗嗦了.见图 DS18B20与前产品DS1820的不同: DS18B20继承了DS1820的全部优点,并做了如下改进 1.供电范围扩大为3.0-- ...
- Keil C51 vs 标准C
深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一.因为大多数扩展功能都是直接针对8051系列CPU硬件的.大致有以下8类: 8051存储类型及存储区域 存储模式 存储器类型声明 变量类 ...
- Linux 让进程在后台可靠运行的几种方法
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...
- docker 1.10.3 里php出现 curl 56错误码问题解决
http://www.cnblogs.com/fengwei/p/5899018.html
- Visio 下载,及密钥
Visio2010简体中文高级版(永久激活密钥:GR24B-GC2XY-KRXRG-2TRJJ-4X7DC) ed2k://|file|cn_visio_2010_x64_516562.exe|515 ...