深入浅出:算法原理与实例解析

更新:11-13 神话故事 我要投稿 纠错 投诉

找到基准条件,基准条件必须尽可能简单。

不断分解问题(或缩小其规模),直到满足基线条件。

DC不是一种可以用来解决问题的算法,而是一种解决问题的思想。

4.2 快速排序

使用DC解决问题,对数组进行快速排序。

step1首先判断最简单的情况(即基线条件) —— 空数组,或者只有1个元素的数组—— 这种数组不需要排序!

最简单的待排序数据#基线条件是数组为空或者只包含一个元素。在这种情况下,只需按原样返回数组——,根本不对其进行排序。

def 快速排序(数组):

iflen(数组) 2:

return arraystep2当情况比基线复杂一点时:有两个元素的数组—— 只需要比较两个元素的大小。

step3三元素数组:DC 的想法—— 分解数组,直到满足基线条件。

快速排序的方法是从数据中选择一个基准值,然后找到小于基准值的元素和大于基准值的元素。这相当于构造一个分区,形成:

所有小于基值的数字的子数组;基值;所有大于基值的数字的子数组。接下来要做的就是利用step2来解决。即三元素数组的快速排序步骤如下:

选择一个基值。将数组拆分为两个子数组:小于主值的元素和大于主值的元素。对这两个子数组进行快速排序。依此类推,对于包含4、5 或n 个元素的情况也是如此。

快速排序代码def 快速排序(数组):

iflen(数组) 2:

返回数组------基线条件:空数组或仅包含一个元素的数组是“有序的”

否则:

枢轴=array[0] ------递归条件

less=[i for i in array[1:] if i=hub] --------由所有小于或等于主元值的元素组成的子数组

Greater=[i for i in array[1:] if i hub] --------由所有大于主元值的元素组成的子数组

返回快速排序(较小)+ [枢轴] + 快速排序(较大)

print fastsort([10, 5, 2, 3])

4.3 快速排序的速度

快速排序的性能高度依赖于所选的基准值。如果选择的基准值合适,最佳速度可以达到O(NlogN),每层比较N次,层数由选择的基准值决定。

最坏的情况需要O(NN),这意味着每次选择的基值是最大值或最小值。

最坏情况- O(N) 最优情况- O(logN) 只要每次随机选择基准值,快速排序的平均运行时间就可以达到最优情况,即O(N*logN)。快速排序是最快的排序算法之一。

5 散列表

散列表,逐一进行,用于快速查找—— python中的字典实际上是一个哈希表!

5.1 散列表的基本用途

我们先看用法,再看哈希表结构。

模拟映射;防止重复;缓存/记住数据,以便服务器不会处理它以再次生成它。

5.2 散列表是什么样的

直接解释有点复杂。我们用一个问题来形容:类似于超市里的商品条码对应它的价格——

如果使用笔记本(无序)来记录,通常需要O(N)的时间来查找;如果是有序的,可以使用之前的二分法,大约需要O(logN)的时间;但通常我们去小商店买东西时,老板通常会立即告诉我们单价。他在“大脑”中形成映射,输出对应输出价格的商品名称——。

我们希望在商品较多的情况下仍然能达到这样的效果:输入商品,立即得到价格反馈——。这就像一个映射函数,在哈希表中称为哈希函数。

哈希函数是一种函数,无论您提供什么数据,它都会向您返回一个数字。 —— 哈希函数“将输入映射到一个数字”:满足两个条件,必须一致,即相同的输入得到相同的结果;它必须将不同的输入映射到不同的数字。

通过哈希函数将一个数组与另一个数组对应起来就形成了哈希表。

如果你不确定,就看一下Python的字典结构:

书=字典()

book["apple"]=0.67 ------一个苹果的价格是67 美分

book["milk"]=1.49 ------牛奶的价格是1.49 美元

书["鳄梨"]=1.49

印刷(书籍)

{"avocado": 1.49, "apple": 0.67, "milk": 1.49}

5.3 应用案例:

将散列表用于查找电话簿可以通过哈希表来实现。搜索速度接近O(1)时间。

电话本需要提供以下功能:

添加联系人及其电话号码。输入联系人的电话号码即可获取该号码。简单来说,使用python中的字典来创建这样的电话本是再完美不过了。

防止重复向列表添加数据时,只需检查是否在哈希表中即可。

# 防止双重投票的案例。

投票={}

def check_voter(姓名):

if voted.get(name):

打印“把他们踢出去!”

否则:

投票[姓名]=True

打印“让他们投票!”

check_voter("汤姆")

让他们投票吧!

check_voter("迈克")

让他们投票吧!

check_voter("迈克")

把他们踢出去!将散列表用作缓存

好了,文章到此结束,希望可以帮助到大家。

用户评论

作业是老师的私生子

终于有人把算法讲明白了!

    有15位网友表示赞同!

あ浅浅の嘚僾

看着这些图表好清晰啊,比文字描述实在多了。

    有16位网友表示赞同!

迷路的男人

这下学习算法不那么可怕了!

    有14位网友表示赞同!

浅巷°

我有点头晕数学符号,幸好这图解可以让我理解算法运作原理

    有8位网友表示赞同!

眉黛如画

想入门算法,这篇文章一定要看一遍!

    有5位网友表示赞同!

蹂躏少女

原来算法运行是这么一种逻辑,太有意思了。

    有5位网友表示赞同!

颓废人士

这些图形真好看啊

    有14位网友表示赞同!

爱到伤肺i

希望以后看到更多算法的图解,这样学习效率更高!

    有15位网友表示赞同!

一笑抵千言

这个图解还蛮详细的,每个步骤都能看明白。

    有15位网友表示赞同!

全网暗恋者

现在感觉机器学习一点也不吓人!

    有14位网友表示赞同!

长裙绿衣

我之前总是对算法的定义一头雾水,看了这篇文章豁然开朗了。

    有8位网友表示赞同!

迁心

非常好的入门指南!

    有14位网友表示赞同!

■孤独像过不去的桥≈

这个图解很有帮助,让我更容易理解算法背后的机制。

    有9位网友表示赞同!

有恃无恐

算法的世界原来这么神奇啊!

    有11位网友表示赞同!

疯人疯语疯人愿

下次再学习算法的时候,直接拿出图解来参考就好了!

    有12位网友表示赞同!

陌上蔷薇

真是太棒了!希望还能看到更多不同算法的图解视频!

    有17位网友表示赞同!

有一种中毒叫上瘾成咆哮i

我以前觉得算法很复杂,现在看来其实很有规律性。

    有18位网友表示赞同!

早不爱了

这篇博文的图片真的很有创意,很直观易懂!

    有13位网友表示赞同!

权诈

学习算法更简单了!

    有9位网友表示赞同!

淡抹烟熏妆丶

看了这篇文章让我对算法的认识加深了很多!

    有7位网友表示赞同!

【深入浅出:算法原理与实例解析】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:那一抹鲜艳色彩(刘颖) 下一篇:回忆时光,畅饮美好——品味人生佳酿的美好体验