• 算法笔记


     一、排序算法

    1.桶排序(最快最简单的排序)

      这个算法就好比有11个桶,编号从0~10。每出现一个数,就将对应编号的桶中的放一个小旗子,最后只要数数每个桶中有几个小旗子就OK了。

      优点:速度快

      缺点:比较费空间

      时间复杂度:O(M+N)

     

    2.冒泡排序:(邻居好说话,但是效率低)

      就如同是一个气泡,一步一步往后“翻滚”,直到最后一位。

      优点:空间复杂度较小

      缺点:时间复杂度较高(因此不推荐)

      时间复杂度:O(N^2)

      

     3.快速排序:(最常用的排序)

      每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。

      优点:比冒泡排序效率要高

      缺点:最差的情况,复杂度等于冒泡排序

      时间复杂度:O(NlogN)

    二、常用数据结构

    1.队列:先进先出

    2.栈:后进先出

    3.链表:快速插入

      双向链表、循环链表

    三、常用算法 

    1.枚举法:暴力破解

      通过优化算法,可以减少计算量,降低时间复杂度

    2.搜索算法:递归+枚举

      1)深度优先搜索算法:先深入,再退回,再广度

        水管问题

      2)广度优先搜索算法:先广度,再排除,再深入

        漫水填充法

    3.图算法:利用特制的线条算图求得答案的一种简便算法。无向图、有向图和网络能运用很多常用的图算法,这些算法包括:各种遍历算法(这些遍历类似于树的遍历),寻找最短路径的算法,寻找网络中最低代价路径的算法,回答一些简单相关问题(例如,图是否是连通的,图中两个顶点间的最短路径是什么,等等)的算法。图算法可应用到多种场合,例如:优化管道、路由表、快递服务、通信网站等。

      1)floyd-warshall算法:只需5行代码。使用穷举法,遍历所有2点间的距离,是否比它们之间加入其它点中转要短

      2)dijkstra算法:

    附录:

    时间复杂度:

    我们用大写字母 O来表示时间复杂度,因此如果算法的时间复杂度是 O(m+n+m+n)即 O(2*(m+n))。我们在说时间复杂度的时候可以忽略较小 的常数,最终桶排序的时间复杂度为 O(m+n)。还有一点,在表示时间复杂度的时候,n 和 m 通常用大写字母即 O(M+N)。

  • 相关阅读:
    优酷kux转mp4
    C++实现将一个文件夹内容拷贝至另一个文件夹
    获取NX一组属性
    获取NX特征名称(无时间戳)
    利用glog打印日志
    C++获取运行程序当前目录
    获取NX装配结构信息
    解析形如(k,v)(k,v)(k,v)字符串
    多NX如何共存
    C++ (C#)实现获取NX PART预览图
  • 原文地址:https://www.cnblogs.com/xujanus/p/8960833.html
Copyright © 2020-2023  润新知