20162308 2017-2018-2 《程序设计与数据结构》第二周学习总结

20162308 2017-2018-2 《程序设计与数据结构》第二周学习总结

教材学习内容总结

  • 本周学习了教材第十三章"查找与排序"的内容
  1. 查找算法
    查找算法,一般来讲,分为遍历(线性)和二分,算法复杂度分别为O(n)和O((1/2)^n),二分查找一般是在有序的数据集中进行,即便是在极大的数据规模下,也可以保证至关快的速度。线性的遍历查找,在最坏状况下,须要遍历数据集中的每一个元素,一旦数据规模变大,计算速度就会下降。

想象这样一种状况,咱们设计了一个网络爬虫,咱们爬到了几十亿(甚至几百亿)个url,为了加快爬取的速度,对于相同的url,咱们的爬虫将再也不进行重复下载。这时候,如何快速在由数十亿个元素组成的集合中快速发现是否有重复的元素?布隆提出了一种复杂度为O(1)的查找算法——Bloom Filter。html

布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它其实是一个很长的二进制向量和一系列随机映射函数。布隆过滤器能够用于检索一个元素是否在一个集合中。它的优势是空间效率和查询时间都远远超过通常的算法,缺点是有必定的误识别率和删除困难。git

虽然存在必定的偏差,可是在大规模应用的状况下,布隆过滤器,经过HASH和创建二进制向量,可以很是出色地完成一些工做,在暑假,我和同窗进一步拓展了布隆的工做,将其实现了Bloom Filter的分布式部署。算法

  1. 排序算法
    教材中介绍了冒泡、快速、归并、选择等常见的排序算法,从原理上说选择排序、插入排序和冒泡排序都相差不大,都是用了两次循环,只是在第二重循环的具体实现上有一些区别。比较有意思的仍是Quick Sort算法,可是娄老师在课上已经讲的很清楚了,这几天在知乎上看到一篇文章挺有意思,在博客中分享。https://zhuanlan.zhihu.com/p/22150349

下载.png

做者在文章中从信息论角度讨论了排序算法时间复杂度的下限,角度仍是挺新奇的,尤为是见到熟悉的交叉熵,除了用在神经网络算法里面,信息论还能用来计算算法复杂度。而后做者还介绍了一种来自Concrete Math特别酷炫的计算快速排序算法复杂度的方法,我浑沦吞枣的看完了,思路确实是很是精彩。
FireShot Capture 57 - 快速排序(Quick Sort)详解 - 知乎专栏 - https___zhuanlan.zhihu.com_p_22150349.png网络

教材学习中的问题和解决过程

没有问题。数据结构

代码调试中的问题和解决过程

没有问题。分布式

代码托管

  • 代码提交过程 & 代码量截图:
  • 2017-04-30.png

结对及互评

点评模板:

  • 博客中值得学习的或问题:

其余

这周过的很仓促,连着几天熬夜,很大部分的时间都用来忙校庆了。由于全身心地献给祖国献给党,因此学习上就无法兼顾,包括请了一节程序设计课的假。但愿下周开始好好学习,fighting💪函数

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 - 1 10
第一周 - 2 20
  • 计划学习时间:20小时学习

  • 实际学习时间:10小时ui

  • 改进状况:url

参考资料

相关文章
相关标签/搜索