Lud*_*rin 49
每天解决问题.观察红绿灯并问自己:"如何同步这些以优化交通流量?或优化行人流量?两者的最佳解决方案是什么?".看看电梯并问自己"为什么这些电梯使用的规则与我昨天访问的其他建筑物中的电梯不同?它是如何实际实施的?如何改进?".
尝试在任何地方看到问题,即使它已经解决了.反思解决方案.问问自己为什么你自己的优秀解决方案可能不如你能看到的那么好 - 你错过了什么?
等等.每天.一直以来.
这个想法是,几乎所有东西都可以被视为一种算法(一个对某人具有某种意义的目标,以及一种实现它的方法).下次在电视上观看比赛时,或者在阅读最新银行抢劫的新闻报道时,请记住这一点.问问自己"目标是什么?","它的目标是什么?" 和"方法是什么?".
它很容易被误认为是批判性思维,但更多的是质疑自己的解决方案,而不是你试图理解和改进的解决方案.
jpm*_*los 26
首先,最重要的是:练习.想想每次解决所有问题的方法.它不必在您的计算机上进行编程.所有算法都会很棒.像这样:当你习惯换卡时,你是如何比较你的套牌和朋友的,以确定你们两个交易的最佳方式?你怎么能定义你可以做多少交易来做到最大但却没有得到任何重复的卡?
使用像本网站http://uva.onlinejudge.org/index.php这样的问题数据库和在线评委,这些数据库存在数百个与一般算法有关的问题.而且你根本不需要成为专家程序员来解决任何问题.你需要的是具有逻辑和数学的良好能力.在那里,您可以找到从最简单到最具挑战性的问题.他们大多数来自编程马拉松.
然后,您可以使用C,C++,Java或Pascal实现它们并将它们提交给在线评判者.如果你有一个好的算法,它将被接受.否则,法官会说你的算法给出了问题的错误答案,或者花了太长时间才解决.
阅读算法有所帮助,但不要浪费太多时间......阅读无助于自己解决问题.也许您可以阅读问题,尝试为自己找出解决方案,与源提出的解决方案进行比较,看看您错过了什么.不要试图记住它们.如果您已经充分了解这个概念,那么您可以在任何地方实施它.对大多数人来说,理解是最困难的部分.
ctd*_*ctd 11
Polya的"如何解决它"是一本很好的书,用于思考如何解决数学问题和做证明,我建议任何解决问题的人.
但!它并没有真正解决当现实世界通过信道噪声,用户狡猾,其他程序获取资源等为系统提供输入时所发生的兴奋.为此,值得研究应用于实际输入的算法. (对Knuth的集合强制性且值得认可),以及面对相同(TCP,内核内部)相当强大的系统.提出良好的算法解决方案的一部分是知道已经存在的东西.
除了阅读所有这些,当然还有练习练习.
"实践完美"的说法绝对适用.我在编程时辅导我的一个朋友,我提醒他"如果你不知道如何骑自行车,你可以阅读每本关于它的书,但这并不意味着你会比兰斯阿姆斯特朗更好明天 - 你必须练习".
在你的情况下,如何尝试项目欧拉的问题?http://projecteuler.net
那里有很多问题,对于每一个你都可以练习开发算法.一旦获得足够好的实施,您就可以访问其他人的解决方案(针对特定问题),并了解其他人如何做到这一点.不要将其视为数学问题,而应将其视为创建解决数学问题的算法的问题.
在大学里,我实际上参加了算法设计和分析课程,其背后肯定有很多理论.你可能会听到人们在谈论"大O"复杂性和类似的东西 - 算法本身有很多不同的属性,这可以使人们更好地理解什么是"好"算法.从长远来看,你可以在这方面进行相当多的研究.
| 归档时间: |
|
| 查看次数: |
32681 次 |
| 最近记录: |