算法与数据结构

一、线性结构

栈:

字符串:

    子串;字符串中任一连续的片段,称为子串

    平凡子串:

    非平凡子串:非空且不同于原串

KMP模式next数组计算:

        ①前1、前2两个字符的next 值为0、1;

        ②后面求解每一位的next值时,根据前一位进行比较(前一位的值与next对应的值相比较)

        ③if 相等,则next=前一位的Next + 1;

            if 不相等, 则持续回溯前一位Next 的Next,都不相等,则为1,否则对应的Next + 1

        参照:KMP算法中的next数组求解_kmp算法求next-CSDN博客

数组:

    arr[1...M, 1...N],元素大小K, 首地址:Base

    求arr[i, j]地址:

        按行存储:base+((i-1)*N +j-1 )*K

        按列存储:base+( (j-1)*M + i-1) *k

    

链表:

    需要存储节点之间的指向的指针,

循环队列:

    长度:(rear - front +m) %m,其中M为容量,      尾指针为:(front + size -1 + m) %m

    头指针:(rear - len +1 +m) %m

图:

    无向图:任意两个定点之间的边是无向边(Vi,Vj)。注意括号

    有向图:从顶点Vi到Vj的边有向<Vi,Vj>,任意2顶点的边有向

    完全图:有向完全图和无向完全图,任意两个顶点都存在边则称为无向完全图,任意两个顶点存在互为相反的弧则称为有向完全图

    连通图:在无向图中,从顶点Vi到Vj有路径,则称为连通。任意顶点Vi到Vj都有路径,则称为连通图

    强连通图:在有向图中,任意顶点Vi到Vj同时Vj到Vi有路径,则称为强连通图

    图的存储:

        邻接矩阵:N*N 的二维数组。时间复杂度n^2

        邻接表:一维数组+链表。时间复杂度:顶点数+边数(n+e)

   

树:

    二叉排序树:与父节点对比,小的为左子树,大的为右子树。

   树顺序存储下标:

        父节点下标值i,左子树2*i,右子树2*i+1

    树的节点数:高度h, 则最多有2^h -1个节点,h层最多有2^(h-1)

    树的种类:

        完全二叉树:只有最大层的右边可能缺少节点,其他层都不缺少节点

        平衡二叉树:左右子树高度差不超过1,同时左右子树都是平衡二叉树

        最优二叉树:即哈夫曼树:

        满二叉树:每层节点都存在,没有缺少的节点

        哈夫曼树:根据提供的数值,每次根据两个最小的数值,构造一颗新的二叉树,根节点值为左右子树和,然后删除左右子树,根点加入二叉树中。

排序算法:

    插入排序:

    归并排序:

    冒泡排序:

    二分排序:

    快排:

    堆排序:

    选择排序:

    设计策略:

        ①分治:通常将复杂的分解为简单的,多个简单的合并为一个。一般使用递归。主要使用场景:二分法,快排

        ②贪心:总是选择当前最优,而不考虑整体是否最优。

        ③动态规划:

        ④回溯:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值