[翻译]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行业常用术语,它 ...
随机推荐
- js定时跳转
在项目中有时会用到定时跳转,自己收藏了一个比较好用的 js写的,不依赖jQuery <script type="text/javascript"> function c ...
- python学习第十五天 -面向对象之继承和多态
大家都知道面向对象的三大特性:封装,继承,多态.封装特性在上一章节已经讲解过.这一章节主要讲解继承和多态. 继承: 当定义一个类的时候,可以从现有的类进行继承.那么新定义的类可以称为子类,被继承的现有 ...
- HTML&CSS基础学习笔记1.3-HTML的标签语法
HTML标签语法 1. 标签由英文尖括号<和>括起来,如<html>就是一个标签. 2. HTML中的标签一般都是成对出现的,分开始标签和结束标签.结束标签比开始标签多了一个/ ...
- C++得到最大的int值
要得到最大的int值: 1.利用(unsigned int)-1,这样得到的就是unsigned int表示的最大值. 2.int值只是比unsigned int多一位符号位,所以对(unsigned ...
- 使用Volley StringRequest Get的方式进行发票查询操作
//进行发票查询 btnFpSelect.setOnClickListener(btnFpSelectClickListener); private OnClickListener btnFpSele ...
- 关于DDMS查看Data文件夹
真机是无法查看的,只有通过模拟器查看
- NOI 2013 矩阵游戏
http://uoj.ac/problem/124 矩阵乘法. 十进制快速幂. 刚开始还傻傻地写二进制快速幂,然后陈老师一语点醒梦中人...... #include<cstdio> #in ...
- <php>删除(有内容的)文件夹函数程序
function deldir($dirname) { if(!file_exists($dirname)) {//判断文件夹是否存在 die("文件夹不存在!");//作用等于( ...
- Http(get,post)及HttpClient(get,post)的简单使用
1. 使用 Http 的 Get 方式读取网络数据 import java.io.BufferedReader; import java.io.IOException; import java.io. ...
- 自定义checkbox样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...