zoukankan      html  css  js  c++  java
  • 《啊哈!算法》笔记

    第 1 章 排序 
     桶排序 
     冒泡排序 
     快速排序  
     
    第 2 章 栈、队列、链表  

     队列  
     栈  
     链表  

      模拟链表  


    第 3 章 枚举!很暴力  

     奥数

     数的全排列 


    第 4 章 万能的搜索  

    深度优先搜索 
    广度优先搜索

    第 5 章 图的遍历

    深度和广度优先

    图的深度优先遍历 

    图的广度优先遍历 

    第 6 章 最短路径  
    第 1节 只有五行的算法——Floyd-Warshall  
    第 2节 Dijkstra算法——通过边实现松弛  
    第 3节 Bellman-Ford——解决负权边  
    第 4节 Bellman-Ford的队列优化  
    第 5节 最短路径算法对比分析

    第 7 章 神奇的树

    二叉树

    并查集  

    》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

    1.1桶排序---O(N+M)

    1.2冒泡排序---O(N^2)

      核心:双重嵌套循环

    1.3快速排序(二分法)---O(NlogN)

      1)找基准数    

      2)先从右往左找到一个小于6的数,再从左往右找一个大于6的数,交换

    1.4 去重、排序

      第一种方法:桶排序、

      第二种方法:先排序、后去重,冒泡排序或者快速排序

    2.1 队列

      线性结构,只允许在队列的首部 head 进行删除,在队列的尾部 tail 插入

      例子:买票;先进先出 FIFO

      结构体类型:

    struct queue
    {
    int data[100];//队列的主体,用来存储内容
    int head;//队首
    int tail;//队尾
    };

    2.2 栈

      例子:小桶放球;后进先出

      top:指向栈顶的变量

      用途:判断回文词,

    2.4 链表

      C语言中,可以使用 指针和函数malloc来实现。 

      也可以用数组模拟链表

        结构体 node,两个成员,data和指针

    struct node *head;
    head = NULL;//头指针为空
    
    struct node *p;
    //动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
    p = (struct node *)malloc(sizeof(struct node));
    
    scanf("%d",&a);
    p->data = a;//将数据存储到当前结点的data域中
    p->next = NULL;//设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空

        ->叫做结构体指针运算符,也是用来访问结构体内部成员的。因为此处p是一个指针,所以不能使用.号访问内部成员。

    2.5 模拟链表

      用数组模拟链表

      两个数组,data 和 left

    3.1 枚举

    3.2 炸弹人

      使用数组模拟地图

    3.3 火柴棍模式

      核心是 求方程的解,

    3.4 数的全排列

    4.1 深度优先搜索 (Depth First Search, DFS)

      基本模型

    void dfs(int step)
    {
        //判断边界
        //尝试每一种可能 
        for(i=1;i<=n;i++)
        {
                继续下一步 dfs(step+1);
        }
        返回
    }

     数字全排列

    4.2 迷宫问题

    4.3 广度优先搜索(宽度优先搜索)Breadth First Search, BFS

      层层递增

    4.4 炸弹人 用 dps、bfs 解

    4.5 宝岛探险

    4.5 水管工游戏

      

    五、图的遍历

    5.1 深度和广度优先

       图的邻接矩阵法

    5.2 图的深度优先遍历

      

    六、最短路径

      6.1 Floyd-Warshall,

      6.2 Dijikstra 算法——通过边实现松弛

        曲线救国

      6.3 Bellman-Fod——解决负权边

    for(k=1;k<=n-1;k++)
        for(i=1;i<=m;i++)
            if(dis[v[i]] > dis[u[i]] + w[i])
                dis[v[i]] = dis[u[i]] + w[i];

      6.4 Bellman-Ford 的队列优化

      

      6.5 最短路径算法对比分析

    七、树

    7.1 树

      树:不包含回路

      图:包含回路

      树的特点:1,树中的任意两个结点有且只有一条路径联通。2,n个结点则有n条边。3,在一棵树中加一条边将会构成一个回路。

    7.2 二叉树

      完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

      满二叉树的任意节点,要么度为0,要么度为2.

    7.3 堆

      一种特殊的二叉树

      最小堆:所有父节点都比子节点要小

      最大堆:所有父节点都比子节点要大

      应用:

      

      优先队列:支持插入元素和寻找最大(小)值元素的数据结构

    7.4 并查集

      

      

  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/IDRI/p/5750312.html
Copyright © 2011-2022 走看看