算法の 前戏

废话时间:


算法实际上是高于语言的。

所以我是第一!!!

比如说你的列表.sort 它里面其实就是实现了一种算法。

算法:一个计算过程,解决问题的方法。

程序 = 数据结构 + 算法。

一:时间复杂度:用来评估算法运行效率(时间)的一个式子。


光年是距离。

一般来说:时间复杂度高的算法比复杂度低的算法慢。

​ 问题规模基本上差不多一样的时候。即n

​ 与机器有关。

​ 时间复杂度是独立于机器的。

常见的时间复杂度:


o(1) < o(logn) < o(n) < o(nlogn) < o(n的平方) < o(n平方logn) < o(n的三次方)

如何简单判断时间复杂度?


最好是根据运行过程来估计

找到代表问题规模的n  魑魅魍魉chi‘mei’wang‘liang

如何一眼判断时间复杂度?

是否有循环减半的过程 -> o(logn)

几层循环就是n的几次方的复杂度

二:空间复杂度


用来评估算法内存占用大小的一个式子

  • 空间换时间

    
    例如:如果你想让你的算法快点,就需要更多的缓存。
    
    

三:基本算法

算法里面重要的思想


递归的两个特点:

- 调用自身

- 结束条件

def qq(n):

    if n == 0 :

        print('我的小可爱',end='')

    else:

        print('抱着',end='')

        qq(n-1)

        print('的我',end='')

qq(5)

# 抱着抱着抱着抱着抱着我的小可爱的我的我的我的我的我

def fun(x):

    if x > 0:

        print(x)

        fun(x-1)

def func(x):

    if x > 0:

        func(x-1)

3.0 汉诺塔


当n个盘子时,把n-1看做一部分。

1. 把n-1个圆盘从a经过c移动到b

    2. 把第n个圆盘从a移动到c

    3. 把n-1个圆盘从b经过a移动到c


t = 0

def hanoi(n,a,b,c):

    global t

    if n > 0:

        hanoi(n-1,a,c,b)

        t +=1

        print(':moving from %s --> %s.'%(a,c))

        hanoi(n-1,b,a,c)

hanoi(5,'a','b','c')

print('本次总共运行 %s 次'%t)


汉诺塔移动次数的递推式:h(x) = 2h(x-1)+1

前部分算法分为两部分:查找和排序


3.1 列表查找:从列表中查找指定元素

- 输入:列表、待查找元素

- 输出:元素下标或未查找到元素

3.2 顺序查找

- 从列表第一个元素开始,顺序进行搜索,直到找到为止。

3.3 二分查找

- 从有序列表的候选区data[0:n]开始,通过对待查找的值和候选区中间值的比较,可以使候选区减少一半。

3.1 二分查找

  • 使用二分查找来找3

    • 1,2,3,4,5,6,7,8,9

    • Low high

      • ​ mid
    • 如果high < low ,说明你要找的值不存在。


def erfen_search(li,val):

    low = 0

    high= len(li) - 1

    while low<=high:

        mid = (low+high) // 2

        if li[mid] == val:

            return  mid

        elif li[mid] < val:

            low = mid + 1

        else:

            high = mid - 1

a = erfen_search([1,2,3,4.123,123,12,3,12,3,12,3,21,3,213,21,321,3,213,21,321,3,21,4,3,543,53,45,435,342,5],435)

# 上面这个方法有问题,不信你试。

# 递归版本二分查找

def bin_search_rec(data_set,value,low,high):

    if low <= high:

        mid = (low + high) // 2

        if data_set[mid] == value:

            return mid

        elif data_set[mid] < value:

            low = mid + 1

            return bin_search_rec(data_set,value,low,high)

        else:

            high = mid - 1

            return bin_search_rec(data_set,value,low,high)

    else:

        return

列表排序


- 列表排序

  - 将无序列表变为有序列表。 .sort

- 应用场景

  - 各种榜单

  - 各种表格

  - 给二分查找用

  - 给其他算法用

输入:无序列表

输出:有序列表

排序Low B三人组

- 冒泡排序

- 插入排序

- 选择排序

算法关键点:

- 有序区

- 无序区

升序与降序

排序凶凶组:

- 快排

  - 思路:

    - 取一个元素p(第一个元素),使元素p归位;

    - 列表被p分成两部分,左边逗比p小,右边逗比p大‘

    - 递归完成排序。  递归终止条件:列表剩一个元素。

  - 算法关键点:1. 归位  2. 递归

- 堆排

- 归并排序

没什么人用的排序:

- 基数排序

- 希尔排序

- 桶排序

总览:

执行次数函数 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n²+2n+1 O(n²) 平方阶
5log2n + 20 O(logn) 对数阶
2n + 3nlog2n + 19 O(nlogn) nlogn阶
6n³ + 2n² + 3n +4 O(n³) 立方阶
2" O(2") 指数阶
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容

  • 算法复杂度 时间复杂度 空间复杂度 什么是时间复杂度 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗...
    KODIE阅读 3,249评论 0 9
  • 前言 上一篇《数据结构和算法》中我介绍了数据结构的基本概念,也介绍了数据结构一般可以分为逻辑结构和物理结构。逻辑结...
    VV木公子阅读 4,658评论 4 41
  • 现插播一条新闻:今天下午两点钟,警方接到报警,位于长江路馨家园小区二楼住户李先生发现楼上有渗水情况,且水中夹杂着血...
    菌菇sama阅读 436评论 6 7