zoukankan      html  css  js  c++  java
  • 【路飞学城Day170】算法小结

    Evernote Export

    算法的思想是能省则省,内存能少则少,时间运行能少尽量少
    堆排序的时间复杂度O(nlogn)
    堆排序的内置模块heapq
    常用函数 heapify(x)
    heappush(heap, item)
    heappop(heap)
    topkey问题
    现在有n个数,设计算法得到前k大的数(k>n)
    解决思路: 
        排序后切片  O(nlogn)
        排序lowB三人组 O(kn)
        堆排序 O(nlogk)
    堆排序解决思路
        取列表前k个元素建立一个小根堆,堆顶就是目前第k大的数
        一次向后遍历原列表,对于列表中的元素,如果小于堆顶,则忽略该元素,如果大于堆顶,则将堆顶更换为该元素,并且对堆进行一次调整
    归并排序
    假设现在的列表分两段有序,如何将其合成为一个有序列表
    归并排序
    分解:将列表越分越小,直至分成一个元素
    终止条件:一个元素是有序的
    合并:将两个有序列表归并,列表越来越大

    三种排序算法小结
    时间复杂度都是O(logn)
    一般情况下,就运行时间而言:快速排序<归并排序<堆排序
    三种排序算法的缺点:
    快速排序:极端情况下排序效率低
    归并排序:需要额外的内存开销
    堆排序:在快的排序算法中相对较慢
     
    排序方法
    时间复杂度
    空间复杂度
    稳定性
    代码复杂度
    最坏情况
    平均情况
    最好情况
    冒泡排序
    O(n^2)
    O(n^2)
    O(n)
    O(1)
    稳定
    简单
    直接选择排序
    O(n^2)
    O(n^2)
    O(n^2)
    O(1)
    不稳定
    简单
    直接插入排序
    O(n^2)
    O(n^2)
    O(nlogn)
    O(1)
    稳定
    简单
    快速排序
    O(n^2)
    O(nlogn)
    O(nlogn)
    平均情况O(logn);
    最坏情况O(n)
    不稳定
    较复杂
    堆排序
    O(nlogn)
    O(nlogn)
    O(nlogn)
    O(1)
    不稳定
    复杂
    归并排序
    O(nlogn)
    O(nlogn)
    O(nlogn)
    O(n)
    稳定
    较复杂
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Win a contest, win a challenge
  • 相关阅读:
    微信菜单设置为小程序报错85005错误
    VS2013常用快捷键
    VS2017专业版和企业版激活密钥
    微信小程序image组件binderror使用例子(对应html、js中的onerror)
    本科无学位有哪些途径来获得硕士学位
    asp.net 微信JsSDK
    使用nginx反向代理,一个80端口下,配置多个微信项目
    对称与非对称加密;SSL;HTTPS;AJP
    java 在实例化异常的时候做的事情
    简单理解正向,反向,透明代理
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/10091906.html
Copyright © 2011-2022 走看看