• 设计原则


    算法是什么,即是按照一定的步骤,一步步去解决某个问题,解决问题的方法步骤就称为算法。

    基本设计要求:

    一、正确性

    算法的正确性是指算法至少具有输入,输出和加工处理无歧义,并且可以正确反映问题的需求,以及正确得到问题的答案。
    关于“正确”的理解一共有四个层次:

    1. 算法程序没有语法错误。
    2. 算法程序能够根据正确的输入的值得到满足要求的输出结果。
    3. 算法程序能够根据错误的输入的值得到满足规格说明的输出结果。
    4. 算法程序对于精心设计的,极其刁难的测试数据都能满足要求的输出结果。

    第四点比较难,因为我们几乎不可能对所有的情况都逐一进行验证,所以,一般来说,能够满足前3条就是一个正确性比较好的算法了。

    二、可读性

    算法设计的另一个目的是为了便于阅读,理解和沟通,如果写的代码只有你和上帝能看懂,那这个算法只能说明很失败,因为算法越难理解,就越难找到他的bug,对于调试和修改就更难了

    三、健壮性

    当输入的数据不合法的时候,算法也能给出相关的处理,而不是产生异常或者莫名起码的错误。

    四、时间效率高和空间存储量低

    在满足以上几点以后,我们还可以考虑对算法程序进一步优化,尽量满足时间效率高和空间存储量低的需求。

    基本设计思想:

     一、分治

     分治,分而治之。将一个难以直接解决的大问题,划分成一些规模较小的子问题,以便各个击破。

    需要注意子问题的两个规则:

       1、平衡子问题:就是是各个子问题的规模大致相同

       2、独立子问题:各子问题之间相互独立,如果不独立,还需要分解子问题。 

    二、贪心

    把一个复杂问题分解成一系列较为简单的局部最优选择,每一步选择都是对当前解的一个拓展,直到获得问题的完整解,典型应用是求解最优化问题,而且对许多问题都能得到整天最优解。贪心法并不是从整体最优考虑,它所作出的选择只是在某种意义上的局部最优。典型应用:最小生成树问题,Prime算法(最近定点策略),Kruskal算法(最短边策略),背包问题(按单位重量价值最大策略贪心),霍夫曼编码等。

    三、动态规划

    动态规划法和分治法类似,它也是将大问题分解成子问题求解,不同的是,如果分解的子问题有很多是相同的,采用分治法相同的子问题会求解多次,是不是很影响效率;动态规划法呢,它会保存已解决的子问题的答案,再有相同的子问题直接用保存的答案就行了,节省了很多计算时间。

  • 相关阅读:
    java中的访问控制符
    DDD CQRS和Event Sourcing的案例:足球比赛
    你用过Spring中哪些功能?
    基于角色的权限访问控制初步
    mybatis深入学习
    GNU make学习笔记
    XmlFactoryBean和DefaultListableBeanFactory学习
    重新组织函数
    【JRebel 作者出品--译文】Java class 热更新:关于对象,类,类加载器
    不吹不黑,关于 Java 类加载器的这一点,市面上没有任何一本图书讲到
  • 原文地址:https://www.cnblogs.com/allin1579/p/4468750.html
Copyright © 2020-2023  润新知