• 算法的基础


    一、二分查找:

      假如我们来玩一个猜数的游戏,随便想一个1~100的数字,最多需要几次能猜对呢?

      傻找:什么是傻找呢,就是从1开始往上猜,如果想的数是99,岂不是要猜99次,你不傻谁傻?

      最佳的方案:如果我说50,你说猜小了,哇咔咔我们一下子就排除了50个数,再接下来知道怎么猜了把,当然是75啦,即每次猜的数都是余下数的一半,如此下去,不管你想的数是多少,我都能在7次之内猜出来,这就是大名鼎鼎的二分查找法。

      注意:二分查找法只适用于有序的列表。

      一般而言,对于包含n个元素的列表,用二分查找法最多需要log2的n步,而简单查最多需要n步。

      对数:

      算法的世界里,怎么可能少得了数字,那什么叫对数呢?

      如果a的x次方等于N(a>0,且a不等于1),那么数x就叫做以a为底N的对数,记作x=loga(N),其中a为底数,N为真数。例子:2的3次方等于8,那么3就是以2为底8的对数。

    二、运行时间:

      线性时间,简单查找(逐个检查)列表中的元素,换言之,最多需要猜测的次数(之前的猜数)与列表长度相同,这被称为线性时间。

      对数时间,以二分查找运行的时间称为对数时间(log时间,log指log2,2为底数)。

      

    三、大O表示法

      大O表示法为一种特殊的表示法,指出了算法的速度有多块。

      举例:如果说检查一个元素需要1毫秒。使用简单查找时,需要100毫秒(猜数游戏为例),那么二分查找大约需要(log2的100)7毫秒;由此可以得出简单查找所需的时间大约是二分查找的15倍;如果一个序列中包含10亿个元素,二分查找需要约30毫秒,那么简单查找所需要的时间为30*15=450毫秒,结果真的是这样吗?

      其实不是,而且是大错特错!!!

      简单查找与二分查找运行时间的增速不同,什么意思呢?

      也就是说,随着元素数量的增多,二分查找需要的额外时间并不多,而简单查找需要的额外时间却很多。因此,随着列表的增长,二分查找的速度比简单查找快得多。

      有签于此,仅知道算法需要多长时间才能郧西那个完毕还不够,还需要知道郧西那个时间如何随着列表增长而增大,这正是大O表示法的意义所在。

      大O表示法指出了算法有多块。例如,建设列表包含n个元素,简单查找需要检查每个元素,需要执行n次,使用大O表示法,这个时间为O(n),单位秒?没有--大O表示法指的并非以秒为单位的速度,而是让你比较操作数,它指出了算法运行时间的增速。

      二分查找法大O表示法为O(logn,注意此处log为简写,实际为log2的n次方)。

      注意:大O表示法指出的永远都是最糟糕情况下的运行时间。

      一些常见的大O运行时间:

      O(log n),对数时间,这样的算法包括二分查找;

      O(n),线性时间,这样的算法博爱阔简单查找;

      O(n * log n),快速排序,一种速度较快的排序算法;

      O(n的2次方),选择排序,一种速度较慢的排序算法;

      O(n!),旅行商解决方案,一种非常慢的算法。

    总结:

      算法的速度指的并非时间,而是操作数的增速;

      二分查找的速度比简单查找快得多;

      O(log n)比O(n)快。需要搜索的元素越多,前者比后者就快得越多;

      算法运行时间是从其增速的角度度量的;

      算法运行时间使用大O表示法表示。

  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/zsvslx/p/10549508.html
Copyright © 2020-2023  润新知