原文链接: https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/

个人感觉,这篇文章很不错,从一个比较高的高度、相对系统的总结了一些经典算法问题的经典思路。翻译过来是为了方便自己理解和学习,也希望能够帮到有需要的朋友。

全文很长,我会一部分一部分的慢慢搬运。

  1. Dynamic Programming 动态规划问题
  2. 待续

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 网站)的更多相关文章

  1. WebForms VS. MVC(翻译)

    (本文翻译自CodeProject上阿三写的一篇文章,原文地址:http://www.codeproject.com/Articles/528117/WebForms-vs-MVC,讲了有关ASP.A ...

  2. Excel里内嵌在线翻译

    本来寻思着继续写点系统运行日志跟踪技术的,但早晨哥家领导从单位打来电话,让帮助她的闺蜜搞一个excel翻译的问题,总部IT搞不定.我过去是用excel做了几年工作,却都是些数学计算,跟翻译也扯不上啊: ...

  3. 爹地,我找到了!,15个极好的Linux find命令示例

    爹地,我找到了!, 15个极好的Linux find命令示例 英文原文:Daddy, I found it!, 15 Awesome Linux Find Command Examples 标签: L ...

  4. poj 2503:Babelfish(字典树,经典题,字典翻译)

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 30816   Accepted: 13283 Descr ...

  5. Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)

    # 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...

  6. 《Django By Example》第十章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译本章过程中几次想放弃,但是既然 ...

  7. python:爬虫1——实战(下载一张图片、用Python模拟浏览器,通过在线的有道词典来对文本翻译)

    一.下载一只猫 import urllib.request response = urllib.request.urlopen("http://cdn.duitang.com/uploads ...

  8. 'internalField' 和'boundaryField'的区别?【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam/84322-difference-between-internalfield ...

  9. 焦大翻译:提防一些seo错误认知(完整版)

    http://www.wocaoseo.com/thread-179-1-1.html 多人在开始做seo的时候,都曾经尝试通过黑盒测试来找出哪些因素对排名有效果. 黑盒测试是我们IT行业常用术语,它 ...

随机推荐

  1. 标准程序员系列-Github篇-初始化一个代码仓库

    下面将一步步介绍怎样使用GitHub来初始化一个项目的版本控制仓库: 1. 到GitHub上注册自己的账号:https://github.com/ 2. 创建第一个代码仓库一个仓库相当于一个项目的代码 ...

  2. leetcode_Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  3. NSIS脚本调用C语言写的插件

    其实NSIS的官网已经提供了很多别人开发的插件了,今天需要用到GetVersion这个插件,这是不维护的插件了,不推荐用,但是由于现实中的问题,导致我不得不用这个插件. 所以就下载下来了. 下载下来之 ...

  4. 一个资深java面试官的“面试心得”

    在公司当技术面试官几年间,从应届生到工作十几年的应聘者都遇到过.先表达一下我自己对面试的观点: 1.笔试.面试去评价一个人肯定是不够准确的,了解一个人最准确的方式就是“路遥知马力,日久见人心”.通过一 ...

  5. 使IE6同样支持圆角效果

    之前写到过,IE6不支持:hover效果的解决办法,其它这个跟它一样.IE6(7/8)不支持border-radius属性,所以其中的圆角效果显示不出来,可以通过引用ie-css3.htc的方法解决. ...

  6. fdm_search_info_w_book_chain

    数据知识管理平台-元数据管理-fdm_search_info_w_book_chain-详细信息 fdm_search_info_w_book_chain

  7. [置顶] 顿悟JAVA,自己实现Object的Clone的约束关系(上)

    因protected 的理解,顿悟一些JAVA的原理,模拟了Object类的子类为什么在调用clone方法前实现Cloneable接口. 这里不解释 ,上代码先. 运行效果 文件结构 调用类 pack ...

  8. Bubble Sort 冒泡排序

    //Bubble Sort ( O(n²)) public class TestBubbleSort { public int[] bubbleSortArray(int[] arr){ ; i &l ...

  9. php之手机号码查归属地

    免费手机号码归属地API查询接口 一.淘宝网API API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=1585078144 ...

  10. web.xml配置DispatcherServlet

    1. org.springframework.web.servlet.DispatcherServlet 所在jar包: <dependency> <groupId>org.s ...