zoukankan      html  css  js  c++  java
  • 算法分析

    写简历的时候,填写学过的课程,随手就写下了算法设计与分析,从来没想过为什么要起这么个名字。算法设计是给出算法的本质和设计流程,算法分析我只会几个大o,其他就不知道了。任何学科任何方向,当涉及到对一个研究对象进行评估的时候,就会出现各种各样的评估方案,即使是在算法上,即使是在每次选择题只能选几个大o的问题上。

    给定一个归并排序,首先分解,分解到最底层,排序,之后归并;在平均情况和最坏情况下的时间复杂度都是O(nlogn)。首先看下这个算法的具体过程:对于一个含有n个元素的数组,给出递归树应该有 logn层,假设叶子节点是一对元素,经过一次比较就可以排好顺序。

    mergesort(datalist &L)

    {

      datalist l1=left(l)

      datalist l2=right(l)

      return merge(mergesort(l1),mergesort(l2)

    }

    其中merge()需要o(n); 根据算法思路可以看出

    T(n)=cn+2T(n/2)

    T(1)=1

    可以推出 o(nlogn)

    或者画一个递归树,然后从叶子节点开始累加比较次数,每一层的节点数*一组merge节点的耗时,也可以得出同样结论

    由于归并不存在随机选取(快速排序中的随机选择一个pivot),所以和数据初始状态无关,和过程选取无关,最好最坏最平均都是差不多的性能。

    快速排序

    quicksort(list)

    {  partition((list)

       quicksort(leftlist)

      quicksort(rightsort)

    }

    在归并排序中,是近似等分两边子数组,然后在快排中,是否等分是个未知数,因此就存在了平均和最差性能的差异

    算法分析一般分为概率分析 摊销分析 竞争分析

    概率分析 以输入为变量,在不清楚输入的情况下,假设服从一定分布,然后分析完成任务的概率,算法的时间复杂度 空间复杂度等性能

    摊销分析

    和理解的平均分析还不一样,摊销分析更灵活一点,聚类分析:考虑综合消耗后,除以变量长度; 会计分析:可以积累消耗,以备后用;势能分析;摊销分析中主要考虑多次执行算法,但是和概率无关,而是从多次间的联系入手,利用限制条件 等降低消耗上限

    竞争分析 给出了离线算法和在线算法的概念,通过和离线的最优算法比较,做出最佳策略,关注与最优间的差值,而不是自身从无到有的几个消耗过程。

    待续

  • 相关阅读:
    Let’s Work on an LLVM Superoptimizer
    菜鸟程序员的成长之路(二)——时间都去哪儿了
    python进阶五_类(二)
    python进阶五_类(一)
    基于asp.net + easyui框架,一步步学习easyui-datagrid——完成,总结(四)
    给师弟师妹的一个计算机专业书单
    python进阶四_模块调用
    python进阶三_函数
    实训第一天--增删改查加hibernate+搭建环境常见问题
    9周的项目实训从今天就开始了,
  • 原文地址:https://www.cnblogs.com/18fanna/p/3104770.html
Copyright © 2011-2022 走看看