摘要:
在上一篇中,回顾了一下针对选择排序的优化算法——堆排序。堆排序的时间复杂度为O(n logn),而快速排序的时间复杂度也是O(n logn)。但是快速排序在同为O(n logn)的排序算法中,效率也是相对较高的,而且快速排序使用了算法中一个十分经典的思想——分治法;因此掌握快速排序还是很有必要的。 阅读全文
摘要:
上一次说到了3种基本的排序算法,三种基本的排序算法时间复杂度都是O(n^2),虽然比较简单,但是效率相对较差,因此后续有许多相应的改进算法,这次主要说说堆排序算法。 <! more 堆排序算法是对选择排序的一种优化。 那么什么是堆呢?堆是一种树形结构。在维基百科上的定义是这样的“给定堆中任意节点 P 阅读全文
摘要:
之前听到过别人有说过Python只是一个玩具做不了大项目,我当时是嗤之以鼻的,不说豆瓣这样的公司采用Python做的网站,GitHub上那么多大项目都是用Python写的,怎么能说Python只是一个玩具呢。直到我参与维护一个Python项目。 弱类型 一般都说Python的弱类型是程序员的福音,程 阅读全文
摘要:
前面几篇基本上把基本的数据结构都回顾完了,现在开始回顾那些常见的排序算法。 排序是将一组无序的数据根据某种规则重新排列成有序的这么一个过程,当时在大学需要我们手工自己实现的主要有三种:选择排序、插入排序和冒泡排序。因为它比较简单,所以这里把他们放到一起作为最基本的排序算法。 <! more 插入排序 阅读全文
摘要:
栈与队列一样也是一种线性的数据结构,与队列不同的是栈是一种先进后出的结构,有点类似于现实中的弹夹,最后压进去的子弹总是最先被打出来,在计算机中栈用到的地方就是用作函数传参与函数中局部变量的保存,也就是我们经常说的函数栈。栈同样有基于数组和基于链表的实现 <! more 基于链表的实现 基于链表实现的 阅读全文
摘要:
队列也是一种线性的数据结构,它与链表的区别在于链表可以在任意位置进行插入删除操作,而队列只能在一端进行插入,另一端进行删除。它对应于现实世界中的排队模型。队列有两种常见的实现方式:基于列表的实现和基于数组的实现 <! more 基于链表的实现 基于链表的队列,我们需要保存两个指针,一个指向头节点,一 阅读全文
摘要:
上一篇简单的开了一个头,简单介绍了一下所谓的时间复杂度与空间复杂度,从这篇开始将陆陆续续写一下常用的数据结构:链表、队列、栈、树等等。 <! more 链表当初是我在学校时唯一死磕过的数据结构,那个时候自己还算是一个好学生,虽然上课没怎么听懂,但是课后还是根据仔细调试过老师给的代码,硬是自己给弄懂了 阅读全文
摘要:
最近突然萌生了一个想法,好好系统的学习一下算法与数据结构然后产生一系列的文章来回顾与总结学到的东西,这部分我想从最简单的部分一一介绍总结,包括一些很基础的内容 <! more 为什么要学习数据结构与算法 以前在学校的时候就知道 程序 = 算法 + 数据结构,程序的作用是用来处理与解决现实问题,而在描 阅读全文
摘要:
时间也是过得很快,不知不觉又过了一年。这一年发生了很多事,但是好像又过的很平淡。回想起来自己好像做过好多事,但好像又没做过什么事,在这里我再次回顾一下去年的一些状态、然后展望一下未来,接着立一下对应的flag。 <! more 去年的目标总结: 我去年好像说过要好好锻炼的,这个基本放弃了,或者说从来 阅读全文
摘要:
最近根据项目需要,要在产品中添加对IpV6的支持,因此研究了一下IPV6的相关内容,Ipv6 与原来最直观的改变就是地址结构的改变,IP地址由原来的32位扩展为128,这样原来的地址结构肯定就不够用了,根据微软的官方文档,只需要对原来的代码做稍许改变就可以适应ipv6。 <! more 修改地址结构 阅读全文