• 数据结构与算法基础


    数据结构简介:

    数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
    数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。实现应用程序是“逻辑结构”,存储的是“物理结构”。逻辑结构主要是对该结构操作的设定,物理结构是描述数据具体在内存中的存储(如:顺序结构、链式结构、索引结构、希哈结构)等。

    数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。
    数据元素:数据(集合)中的一个“个体”,数据及结构中讨论的基本单位
    数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。
    数据类型:在一种程序设计语言中,变量所具有的数据种类。整型、浮点型、字符型等等

    • 数据结构示意图

    数据的逻辑结构:数据之间的相互关系。

    在数据结构中,从逻辑上可以将其分为线性结构和非线性结构

    集合:结构中的数据元素除了同属于一种类型外,别无其它关系。

    线性结构:数据元素之间一对一的关系

    树形结构:数据元素之间一对多的关系

    图状结构或网状结构: 结构中的数据元素之间存在多对多的关系

    数据的物理结构/存储结构:数据在计算机中的表示。

    物理结构是描述数据具体在内存中的存储(如:顺序结构、链式结构、索引结构、哈希结构)等

    顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。数组就是顺序存储结构的典型代表。

    链式存储结构:是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。

    • 顺序存储结构和链式存储结构的区别:

    比如去银行取钱,顺序存储结构就相当于,所有的客户按照先来后到的顺序有序的的坐在大厅的椅子上(注意:是有顺序的坐着哦)。
    而链式存储结构相当于,所有的客户只要一到银行,大堂经理就给他们每人一个号码,然后他们可以随便坐在哪个椅子上(随便坐,不需要按照什么顺序坐),只需要等待工作人员广播叫号即可。
    而每个客户手里的号码就相当于指针,当前的指针指向下一个存储空间,这样,所有不连续的空间就可以被有顺序的按照线性连接在一起了。

    算法:

    是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制

    • 算法的特性:

    输入
    一个算法具有零个或者多个输出。以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。后面一句话翻译过来就是,如果一个算法本身给出了初始条件,那么可以没有输出。

    输出
    算法至少有一个输出。也就是说,算法一定要有输出。输出的形式可以是打印,也可以使返回一个值或者多个值等。也可以是显示某些提示。

    有穷性
    算法的执行步骤是有限的,算法的执行时间也是有限的。

    确定性
    算法的每个步骤都有确定的含义,不会出现二义性。

    可行性

    算法是可用的,也就是能够解决当前问题。

    当然,回过头来一看,这五个特性都是废话,并且依稀记得大学老师都教过。所以,我们不用浪费脑力在这些不必要的概念上,因为大学早已离我远去,考试什么的跟我也没有一毛钱关系,只要知道这么回事就好。

    • 算法的设计要求

    要设计一个好的算法,需要考虑以下4个特性(其实多半是废话)。

    正确性

    废话,谁会设计一个不能够解决问题的方法。

    可读性

    指算法无论是从设计思路上,还是从注释方面,都要能够保证算法是可读的,也就是可以被其他人员能够读懂的。其实也是废话,这是一个优秀的程序员必备的。

    健壮性

    通俗的讲,一个好的算法应该具有捕获异常/处理异常的能力。另外,对于测试人员的压力测试、边界值测试等刁难的测试手段,算法应该能够轻松的扛过去。

    时间效率高和存储量低

    这其实是两个概念,时间效率就是指的时间复杂度,存储量就是指的空间复杂度。翻译过来就是一个好的算法应该考虑时间复杂度和空间复杂度。而往往时间复杂度和空间复杂度是相互弥补的。

  • 相关阅读:
    js对象的深度克隆
    通用事件监听函数
    JavaScript封装
    Ajax
    MarkDown怎么在博客园展现出来
    MarkDown语法学习
    暑期培训第三周SDN总结
    暑期培训遇到的floodlight+mininet+ubuntu的问题
    Ubuntu14.04搭建mininet与可视化工具miniedit介绍
    Ubuntu 14.04 安装 Sublime Text 3,并用Sublime Text 3 安装Package Control
  • 原文地址:https://www.cnblogs.com/ww11/p/9105136.html
Copyright © 2020-2023  润新知