算法

解题方案的准确而完整的描述

基本特征

可行性:能解决问题
确定性:每个步骤必须是明确定义的,不许模棱两可,也不许有多义性
有穷性:算法必须在有限时间内做完,在执行有限个步骤后终止
拥有足够的情报:要有一定的输入数据,必须 有输出结果

基本要素

对数据对象的运算和操作:算术运算(+-*÷)逻辑运算 关系运算(大小)数据传输(a=b)
算法的控制结构:顺序 选择 循环

分析算法

常用时间复杂度和空间复杂度表示
目的:降低两个度,提高执行效率

时间复杂度

可以用算法所执行的基本运算次数度量。与问题和问题的规模有关(两个杯子 三个杯子
例 交换两个杯子中的水,基本运算次数是3
分析算法工作量的方法:

空间复杂度

执行算法所需要的内存空间。包括算法程序 输入的初始数据 执行过程中需要的额外空间(杯子c

数据结构

相互有关联的数据元素的集合

逻辑结构

包含两个要素

线性结构

线性表,栈,队列

条件

有且只有一个根结点,它无前件
有且只有一个终端(叶子)结点,它无后件
除根结点和叶子结点外,其它结点有且只有一个前件,也有且只有一个后件

限定在一端进行插入和删除的线性表。原则是先进后出 或后进先出。具有记忆功能

栈运算

队列

是指允许在一端进行插入,而在另一端进行删除的线性表。原则是先进先出 或后进后出

  • 循环队列
    将队列存储空间的最后一个位置绕道第一个位置,形成逻辑上的环状空间
比较


非线性结构


树是n(n>0)个元素的有限集合。它有且仅有一个称为根的元素;其余元素是互不相交的子树
父结点:每个结点只有一个前件,为父结点
根结点:没有前件的结点(只有一个)
子节点:每个结点的后件可以有多个,称为子节点
叶子节点:没有后件的结点
结点的度:一个结点所拥有的后件的个数
树的度:所有结点中最大的度称为树的度
树的深度:树的最大层次

二叉树

非空二叉树只有一个根结点,每个结点最多有两棵子树(度最大是2)分别称为左子树和右子树

  • 满二叉树
    每一层上的结点数均达到最大值
  • 完全二叉树
    只缺少最后一层右边的若干结点
    编号为k的结点左子结点为2k,右子结点为2k+1
    编号为k的结点的父结点变好为k/2
  • 二叉树的遍历
    从某一个结点出发,依次访问到二叉树的所有结点
    前序遍历:访问根结点 前序遍历左子树 前序遍历右子树
    中序遍历:中序遍历左子树 访问根结点 中序遍历右子树
    8 4 9 2 10 5 1 6 3 7
    后序遍历:后序遍历左子树 后序遍历右子树 访问根结点
    8 9 4 10 5 2 6 7 3 1

存储结构

指数据的逻辑结构在计算机存储空间中的存放形式。一种数据结构的逻辑结构根据需要可以表示成多种存储结构。不同的存储结构,数据处理的效率是不同的

顺序存储


空间是连续的

顺序表

线性表的顺序存储

  • 插入运算
  • 删除运算

链式(接)存储

不需要连续的存储空间,但需要额外的空间放小纸条

线性链表

线性表的链式存储结构

  • 单链表
  • 带头结点的单链表
    空间换时间
  • 循环链表
  • 双向链表
  • 比较

运算

插入
删除

查找

顺序查找

适用于无序表或链式线性表。在最坏情况下进行n次比较

二分(对分)查找

数据必须是排好序的
即使是有序线性表,如果采用链式存储结构,也只能用顺序查找

排序

交换类排序法
  • 冒泡排序法
    借助数据元素之间的互相交换进行排序的一种方法
  • 快速排序
    选择一个元素T,将小于T的元素移动到T前面,将大于T的元素移动到T的后面
插入类排序法
  • 简单插入排序法
    将无序列表中的各元素依次插入到已经有序的线性表中
  • 希尔排序法
选择类排序法
  • 简单选择排序法
    扫描整个表,从表中选一个最小的放到表的前面,剩下的表采用同样的方法,直到子表为空为止
  • 堆排序法
    最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求
    保存时从最底下开始从右到左进行交换


归并排序

将两个或两个以上的有序表组合成一个新的有序表,所需内存最大

比较

希尔和堆比其他快

求极值

对于长度为n的线性表,要比较n-1次

Posted on 2022-09-01 00:26  无欲无邱女士  阅读(70)  评论(0编辑  收藏  举报