算法设计怎么写

1. 如何设计算法

设计一个正确的算法是一件困难的工作,因为它需要创新,从以太真空中发掘出一个解方案来解决问题。

算法设计比对现有的方案进行改良要难得多,因为算法设计的可选择空间太,过多的自由反而成了一种约束。 This book is designed to make you a better algorithm designer. The techniques presented in Part I of this book provide the basic ideas underlying all combinatorial algorithms. The problem catalog of Part II will help you with modeling your application and point you in the right direction of an algorithm or implementation. However, being a successful algorithm designer requires more than book knowledge; it requires a certain attitude, the right problem-solving approach. It is difficult to teach this mindset in a book; yet getting it is essential to become a successful designer. 本书的设计目标是让你成为一个更好的算法设计者。

本书第一部分展示有关组合算法的基本原理和基本思想;第二部分的问题清单帮助你为你的问题建模,并且为你指明实现正确算法的方向。尽管如此,要成为一个成功的算法设计者光有书本知识是不够的,面对问题的态度(attitude)和选择正确的方法更重要。

书本容易传授知识,很难传授人的心态(mindset)和思考方式;而这种心态和思考却是成为成功的算法设计者的根本条件。 The key to algorithm design (or any other problem-solving task) is to proceed by asking yourself a sequence of questions to guide your thought process. What if we do this? What if we do that? Should you get stuck on the problem, the best thing to do is move onto the next question. In any group brainstorming session, the most useful person in the room is the one who keeps asking, ``Why can't we do it this way?'' not the person who later tells them why. Because eventually she will stumble on an approach that can't be shot down. 算法设计(或其它问题解决任务)的关键是一系列持续的自我反问,这些反问引导我们思维的前进。

“如果这样做会怎样?”,“如果那样做又会怎样?”……如果 你被一个问题掐住了,最好的办法就是先搁一下,换一个问题换一个前进的方向试试。在每组头脑风暴会议中,最有价值的人是不断提出为什么的人,不是尔后解说为什么的人。

因为我们常常被一些习以为常的东西所拌倒,掉进自己设置的陷阱。 kemin:如果问题解决是一种思考过程,那么思考的形式(过程的严谨性、细致性和正确性)很重要,而思考的内容也不容忽视。

因为引导我们思考前进的方式 除反问本身外,反问的内容也很重。就比如参加头脑风暴的材料一样。

人大脑的思维功能是硬编码的,人与人之间没有思维规律——质的区别,只是思维的清晰度和 灵敏度——量的差别。人与人之间智力的差别更多体现在思维内容的量上,体现在对外部世界的事实掌握的广度和深度上。

Towards this end, we provide below a sequence of questions to guide your search for the right algorithm for your problem. To use it effectively, you must not only ask the questions, but answer them. The key is working through the answers carefully, by writing them down in a log. The correct answer to, ``Can I doit this way?'' is never ``no,'' but ``no, because 。.'' By clearly articulating(明确有力地表达) your reasoning as to why something doesn't work, you can check if it really holds up or whether you have just glossed(掩盖) over a possibility that you didn't want to think hard enough about. You will be surprised how often the reason you can't find a convincing(使人信服的) explanation for something is because your conclusion is wrong. 在末尾我们提供一个反问问题的列表,你不但要反问自己这些问题,更重要是仔细回答这些问题,最好把答案写下来。

回答诸如问题“我可以使用这种方式吗?”的 不是一个“不能”就完了,而是“不能,因为……”。通过仔细明确的回答“为什么不能”时,你会发现到底是“真的不能“,还是只是你自己不愿意去深入思考掩 盖了”能“。

如果你不曾训练出严谨的思考方式,当你这样做时你会惊讶的发现,为了说明某些东西但却找不到一个令人信服的解释的原因常常是因为你的结论本身 是错的。 An important distinction to keep aware of during any design process is the difference between strategy and tactics(战略). Strategy represents the quest for the big picture, the framework around which we construct our path to the goal. Tactics are used to win the minor battles we must fight along the way. In problem solving, it is important to check repeatedly whether you are thinking on the right level. If you do not have a global strategy of how you are going to attack your problem, it is pointless to worry about the tactics. 在设计过程中特别重要区分策略和战略的概念。

策略是对全局的一个探索,一个构筑通向目标路径的指导框架。战略则是用来解决通向大目标过程的较小的问题。

如果你对关于如何对付所面临的问题没有一个全局的策略。

2. 如何写一个算法

算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。

一个算法应该具有以下五个重要的特征:

1、有穷性: 一个算法必须保证执行有限步之后结束;

2、确切性: 算法的每一步骤必须有确切的定义;

3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;

4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。

当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来;如果没见过,那么考虑以下问题:

当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来;如果没见过,那么考虑以下问题:

1. 问题是否是建立在某种已知的熟悉的数据结构(例如,二*树)上?如果不是,则要自己设计数据结构。

2. 问题所要求编写的算法属于以下哪种类型?(建立数据结构,修改数据结构,遍历,查找,排序。)3.

分析问题所要求编写的算法的数学性质.是否具备递归特征?(对于递归程序设计,只要设计出合理的参数表以及递归结束的条件,则基本上大功告成.)4.

继续分析问题的数学本质.根据你以前的编程经验,设想一种可能是可行的解决办法,并证明这种解决办法的正确性.如果题目对算法有时空方面的要求,证明你的设想满足其要求.一般的,时间效率和空间效率难以兼得.有时必须通过建立辅助存储的方法来节省时间.5.

通过一段时间的分析,你对解决这个问题已经有了自己的一些思路.或者说,你已经可以用自然语言把你的算法简单描述出来.继续验证其正确性,努力发现其中的错误并找出解决办法.在必要的时候(发现了无法解决的矛盾),推翻自己的思路,从头开始构思.6.

确认你的思路可行以后,开始编写程序.在编写代码的过程中,尽可能把各种问题考虑得详细,周密.程序应该具有良好的结构,并且在关键的地方配有注释.7.

举一个例子,然后在纸上用笔执行你的程序,进一步验证其正确性.当遇到与你的设想不符的情况时,分析问题产生的原因是编程方面的问题还是算法思想本身有问题.

8. 如果程序通过了上述正确性验证,那么在将其进一步优化或简化。

9. 撰写思路分析,注释.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------看不懂,还是不明白,有谁清楚告诉我啊,

3. 如何设计算法

因为……”, you must not only ask the questions, but answer them;而这种心态和思考却是成为成功的算法设计者的根本条件, you can check if it really holds up or whether you have just glossed(掩盖) over a possibility that you didn't want to think hard enough about. You will be surprised how often the reason you can't find a convincing(使人信服的) explanation for something is because your conclusion is wrong,并且为你指明实现正确算法的方向,你会发现到底是“真的不能“。

在每组头脑风暴会议中,最有价值的人是不断提出为什么的人. What if we do this。尽管如此,要成为一个成功的算法设计者光有书本知识是不够的,面对问题的态度(attitude)和选择正确的方法更重要, by writing them down in a log. The correct answer to, ``Can I do it this way,体现在对外部世界的事实掌握的广度和深度上。

Towards this end, we provide below a sequence of questions to guide your search for the right algorithm for your problem. To use it effectively. The key is working through the answers carefully,掉进自己设置的陷阱,你不但要反问自己这些问题,更重要是仔细回答这些问题;第二部分的问题清单帮助你为你的问题建模。通过仔细明确的回答“为什么不能”时,而是“不能。

The key to algorithm design (or any other problem-solving task) is to proceed by asking yourself a sequence of questions to guide your thought process, the most useful person in the room is the one who keeps asking。 kemin:如果问题解决是一种思考过程,那么思考的形式(过程的严谨性?”……如果 你被一个问题掐住了。

因为引导我们思考前进的方式 除反问本身外,反问的内容也很重; is never ``no,',最好的办法就是先搁一下,换一个问题换一个前进的方向试试,最好把答案写下来。回答诸如问题“我可以使用这种方式吗?”的 不是一个“不能”就完了? Should you get stuck on the problem, the best thing to do is move onto the next question。

就比如参加头脑风暴的材料一样。人大脑的思维功能是硬编码的,人与人之间没有思维规律——质的区别,只是思维的清晰度和 灵敏度——量的差别。

人与人之间智力的差别更多体现在思维内容的量上. 在末尾我们提供一个反问问题的列表;' not the person who later tells them why. In any group brainstorming session? What if we do that设计一个正确的算法是一件困难的工作,因为它需要创新,从以太真空中发掘出一个解方案来解决问题。算法设计比对现有的方案进行改良要难得多,因为算法设计的可选择空间太,过多的自由反而成了一种约束。

This book is designed to make you a better algorithm designer; yet getting it is essential to become a successful designer. 本书的设计目标是让你成为一个更好的算法设计者。本书第一部分展示有关组合算法的基本原理和基本思想. Strategy represents the quest for the big picture, the framework around which we construct our path to the goal. Tactics are used to win the minor battles we must fight along the way. In problem solving, it is important to check repeatedly whether you are thinking on the right level. If you do not have a global strategy of how you are going to attack your problem, it is pointless to worry about the tactics. 在设计过程中特别重要区分策略和战略的概念。

策略是对全局的一个探索,一个构筑通向目标路径的指导框架。战略则是用来解决通向大目标过程的较小的问题。

如果你对关于如何对付所面临的问题没有一个全局的策略,那关心战略是不得要领的,予事无补的。在解题领域,不断修正思维的层次(thinking on the right level)是很重要战略。

(--莱布尼兹曾经将人的解题思考过程比喻成晃筛子,把脑袋里面的东西都给抖落出来,然后正在搜索的注意力会抓住一切细微的、与问题有关的东西。事实上,要做到能够令注意力抓住这些有关的东西,就必须时刻将问题放在注意力层面,否则即使关键的东西抖落出来了也可能没注意到。)

An example of a strategic question is, ``How best can I model my application as a graph algorithm problem?'' A tactical question might be, ``Should I use an adjacency邻接 list or adjacency matrix data structure to represent my graph?'' Of course, such tactical decisions are critical to the ultimate quality of the solution, but they can be properly evaluated only in light of a successful strategy. 一个策略问题的例子是:“我如何才能更好地把我的问题建模成图问题?”。而一个战略问题可能是这样:“我是用邻接列表还是邻接矩阵来实现我的图结构?”。

当然,这种战略选择是对解决方案的最终质量起着重要作用;不过战略价值的体现还是基于正确的策略的选择。 When faced with a design problem, too many people freeze up in their thinking. After reading or hearing the problem, they sit down and realize that they don't know what to do next. They stare(凝视) into space, then panic(惊惶), and finally end up settling。

算法设计怎么写

转载请注明出处育才学习网 » 算法设计怎么写

知识

半字的象形字怎么写

阅读(201)

本文主要为您介绍半字的象形字怎么写,内容包括半是象形字吗,象形字大全,山的象形字怎么写图片。不是。象形文字(Hieroglyphic)来自于图画文字,是一种最原始的造字方法,图画性质减弱,象征性质增强。因为有些实体事物和抽象事物

知识

七夕节贺卡怎么写

阅读(171)

本文主要为您介绍七夕节贺卡怎么写,内容包括20字左右的七夕贺卡内容怎么写,七夕贺卡怎么写,七夕送花贺卡怎么写。七夕贺卡:我是鹊桥旁那颗美丽的流星,只为有你一次真爱的回应,我痴痴的等待着你……久久不愿离去……2、情人节快乐!愿我俩的爱情

知识

yong长怎么写

阅读(209)

本文主要为您介绍yong长怎么写,内容包括学习计划表怎么写,“yong道”的yong怎么写(三声,就是学校里边的路),yongchang汉字怎么写。原发布者:小熊学习计划写范文大学生学习计划范文一年之计在于春,一个学期之计在于开始,新学期初始,一切事物都充满

知识

怎么写电脑配置单

阅读(185)

本文主要为您介绍怎么写电脑配置单,内容包括怎样写电脑配置单,怎么写电脑配置单,怎样写电脑配置单。写电脑配置单的简单方法如下:1.AMD的CPU一定要搭配AMD芯片组的主板,intel的CPU一定要搭配intel芯片组的主板;2.一般

知识

情人合同怎么写

阅读(168)

本文主要为您介绍情人合同怎么写,内容包括情人协议书怎么写,情人合约要怎么写的啊,情人合约要怎么写的啊。情人协议书 男 方: 女 方: 经双方友好深刻商谈,本着诚信、互不伤害、互不损失的原则,双方自愿签订如下协议: 生活 男方自愿无偿为女方

知识

论文的选题描述怎么写

阅读(224)

本文主要为您介绍论文的选题描述怎么写,内容包括论文选题理由怎么写,论文选题背景怎么写,毕业论文的选题背景那些怎么写。选题缘由就是解释你为什么要选这个题目。主要有两种写法:是由于看到与你论文中观点一致或相反的资料、事例引发的思考

知识

问卷调查方法怎么写

阅读(263)

本文主要为您介绍问卷调查方法怎么写,内容包括问卷调查步骤怎么写,问卷调查法怎么写,调查问卷怎么写。步骤1:确定调研目的、来源和限制因素         首先我们得先确定一个好的调研课题,然后明确我们的调研目的,必须非常明确这两个要点

知识

交通事故的认识怎么写

阅读(331)

本文主要为您介绍交通事故的认识怎么写,内容包括交通事故认识怎么写,交通事故认识怎么写,写一篇交通事故的认识。“以人为本”的精神在交通安全法中的体现主要是两个方面,一个就是道路交通安全管理工作的方便群众原则,另一个就是本法着重强调

知识

专家约稿函怎么写

阅读(173)

本文主要为您介绍专家约稿函怎么写,内容包括约稿函怎么写,求正规的指定某人的约稿函怎么写主要是格式~,专家推荐信怎么写。给你两个示例,就是如此这样去写: 约稿函一般不会变动 《花火》稿费80-100/千字 《花火》编辑部郑重承诺: 《花火》只收

知识

晴小篆怎么写

阅读(256)

本文主要为您介绍晴小篆怎么写,内容包括晴字用小篆怎么写,小篆的“晴”和“杰”字怎么写,风,晴,雪,百,里,屠,苏用,金文,小篆,隶书,楷书,行书,草。清的篆体写法如下:字源解说 清,金文 (水bai) (青,即“倩”,美丽、漂亮),表示水体透澈漂亮。有的金du文

知识

写公鸡的作文怎么写

阅读(188)

本文主要为您介绍写公鸡的作文怎么写,内容包括描述公鸡的作文怎么写,写公鸡的作文,写公鸡的作文。老奶奶的公鸡院子里一位老奶奶养了一只大公鸡。它非常的勤快,每天早晨天还没亮就会喔喔喔地叫我们起床。它也非常漂亮,头上顶着一顶美丽的鸡冠

知识

借支的报告怎么写

阅读(183)

本文主要为您介绍借支的报告怎么写,内容包括借支申请条需要怎么写,写一张借支条怎么写有例子参照吗,借支怎么写。借支条的样张如下:

知识

基督徒碑文怎么写

阅读(835)

本文主要为您介绍基督徒碑文怎么写,内容包括基督徒的碑文格式如何书写,基督教徒墓碑的格式,父亲没信仰去世之后母亲信基督怎么立碑基督徒碑文如何写。比较常见以及推荐的格式:碑上方画一个十字, 右侧坚写生辛年月,正中写尊称姓名 (及圣名), 左侧

知识

最后的最字怎么写

阅读(151)

本文主要为您介绍最后的最字怎么写,内容包括最后的最怎么写,最后的字念什么怎么写,半命题作文:最后的..怎么写,600字以上。作文:最后的一堂课 在今天下午3点半的时候!我的小学生活彻底的结束了!今天是我们补习班最后的一节课,原先爱闹的同学乖乖

知识

毕业设计的展望怎么写

阅读(179)

本文主要为您介绍毕业设计的展望怎么写,内容包括毕业论文展望怎么写,毕设结论及展望怎么写,设计总结与展望怎么写。试读结束,如需阅读或下载,请点击购买>原发布者:教育资料库论文总结和展望怎么写 毕业论文是大家手头都在忙,下面小编推送给大家

知识

专卖店设计说明怎么写

阅读(198)

本文主要为您介绍专卖店设计说明怎么写,内容包括专卖店的设计说明谁能给我提供一份啊谢谢啊不要太长的啊,专卖店设计的介绍,跪求服装店设计说明。专卖店设计是指专卖商店的形象设计,越来越多的企业经营者开始重视专卖店的设计。专卖店设计的

知识

室内设计毕业论文怎么写

阅读(231)

本文主要为您介绍室内设计毕业论文怎么写,内容包括室内设计专业的毕业论文如何去写呢,室内设计毕业论文怎么写,关于室内设计的论文怎么写。浅论室内设计中的环保节能设计 论文关键词:室内设计 环保 节能 论文摘要:从环保节能设计角度出发,反思

知识

设计说明的摘要怎么写

阅读(206)

本文主要为您介绍设计说明的摘要怎么写,内容包括说明书摘要怎么写,设计方案的摘要怎么写,毕业设计的摘要怎么写。1 毕业设计说明书的前置部分 1.1 题名 毕业设计说明书的题名(即毕业设计课题名)要求以最恰当、最简明的词语反映说明书中最重要

知识

毕业论文题目或毕业设计怎么写

阅读(192)

本文主要为您介绍毕业论文题目或毕业设计怎么写,内容包括毕业论文题目或毕业设计怎么写,毕业论文的题目怎么写,毕业论文及毕业设计题目怎么写。提供一些设计专业毕业论文的题目,供参考。 数码相机的设计报告 2、产品设计中的人机交互探讨 3

知识

论文设计思想怎么写

阅读(188)

本文主要为您介绍论文设计思想怎么写,内容包括毕业论文设计怎么写,论文开题报告主要思想怎么写,网页设计的毕业论文中的设计思想应该怎么写呀。毕业设计(论文)是学生毕业前最后一个重要学习环节,是学习深化与升华的重要过程。它既是学生学习、

知识

设计风格怎么写

阅读(195)

本文主要为您介绍设计风格怎么写,内容包括怎样写现代风格的设计说明呢,设计理念怎么写,服装设计风格怎么写。你若是个家装设计师的话 首先你要了解客户的需要 现代风格是否适合他再根据他的品味 给他制定一款他喜欢且合适他的家居风格以设

知识

论文方案设计怎么写

阅读(162)

本文主要为您介绍论文方案设计怎么写,内容包括论文的开题报告的设计方案怎么写,毕业设计方案怎么写,论文实施方案怎么写的格式。最低0.27元开通文库会员,查看完整内容> 原发布者:二不唧唧的人 开题报告的主要内容包括以下几个部分:课题研究的

[/e:loop]