摘要:
可迭代对象 以直接作用于 for 循环的数据类型有以下几种: 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 一类是 generator ,包括生成器和带 yield 的generator function。 这些可以直接作用于 for 循环的对象统称为 阅读全文
摘要:
什么是闭包 #定义一个函数 def test(number): #在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包 def test_in(number_in): print("in test_in 函数, number_in is %d"%nu 阅读全文
摘要:
概述 可以参看之前的文章: 排序算法之计数排序 桶排序就不上代码了, 计数排序和基数排序都是桶排序,基数排序我没有写,其实和基数排序的思想一脉相承,有兴趣的可以看看,写计数排序主要为了帮助理解桶排序的思想。 简单说, 在排序时, 根据数据的范围准备不同的N个桶, 遍历整个序列, 将数据放到不同的各自 阅读全文
摘要:
概述 简单的来说, 归并就是将两个有序数列合并成一个有序数列. 归并排序就是利用归并的思想, 对待排序数组分成若干个长度为1的子数列, 然后将长度为1的数列进行两两合并, 得到若干个长度为2的有序数列, 在两两合并,得到长度为4的数列, 以此类推, 知道合并为1以数列, 结果就是排序好的数组. 其步 阅读全文
摘要:
概述 简单来说, 计数排序就是申请一个相同数据范围的数组空间, 计算每个数字各有几个,如此即可. 如一个数组为: [5, 2, 3, 4, 6, 3, 1, 0] 申请一个长度为6的数组(因为数组范围为0-5), 其中的值为: [1, 1, 1, 2, 1, 1, 1] 其数组意思就是, 0有1个, 阅读全文
摘要:
概述 介绍堆排序之前, 要先介绍什么是堆以及最大堆最小堆 什么是堆 这里的堆指的不是堆栈中的堆, 而是一种数据结构. 堆可以视为一棵完全的二叉树,完全二叉树的一个"优秀"的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素, 如下所示: 最大堆 最大堆 阅读全文
摘要:
概述 希尔排序是插入排序的一种更高效的改进版本. 希尔排序的基本思想是: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止 就是将插入排序分组一下 分组排序步骤如下: 选定一个增量, 即 阅读全文
摘要:
概述 冒泡排序是一种简单的排序算法. 它重复的走过要排序的数列, 每次比较相邻的两个元素, 若它们的顺序错误就把他们进行交换, 如此循环进行, 直到冒泡到最后一个元素或本次比较不需要进行冒泡 就结束. 因为元素就像一个一个向上冒, 故而叫做冒泡算法, 个人理解. 冒泡排序的执行步骤如下(从小到大): 阅读全文
摘要:
概述 快速排序算法是基于交换的高效排序算法, 采用了分治的思想. 其基本思想如下: 从数列中取出一个数作为基准数 将数组进行划分, 将比基准数大的元素移至右侧, 比基准数小的元素移至左侧 对左右的子区间重复进行排序, 直至每个子区间只有一个元素 其时间空间复杂度如下: 快速排序就是将小的放左边, 大 阅读全文
摘要:
概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差. 它的插入和删除操作比ArrayList更加高效, 但还是要遍历部分链表的指针才能移动到下标所指的 阅读全文
摘要:
概述 插入排序是一种简单直观的排序算法. 插入排序的工作原理就是, 对于未排序数据, 在一排序序列中从后向前扫描, 找到对应的位置并插入. 插入排序算法描述如下: 从第一个元素开始, 该元素可以认为已经被排序 取出下一个元素, 在已经排序的元素序列中从后向前扫描 若序列中的元素大于取出的元素, 则向 阅读全文
摘要:
概述 选择排序是一种简单直观的排序算法. 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素, 存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法. 选择排序是从序列中选出最大或最小数, 将其放到最前面, 然后继续选择, 故而叫做选择排序, 个人理解. 阅读全文
摘要:
首先 需求来了 有如下几个封装好的函数供调用: 现在需要在每个函数执行前进行日志记录: 第一个方案 修改每个函数,添加日志记录的代码 但这样显然不太好,存在大量的重复代码,可以将重复代码封装为一个方法 第二个方案 这样的确是比第一个方案好多了,但是不符合开闭原则,即现有的代码不要去修改,而在基础的功 阅读全文
摘要:
概述 Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面就不具体分析源码了, 具体可以查看ArrayList中的源码分析. Vector源码分析 1.主要字 阅读全文
摘要:
分布式经典结构 如图所示的结构, 当前端接收到请求时, 通过计算key的哈希值, 将哈希值模3, 然后分布到不同的后端服务器上 但是, 这样的结构当添加或减少后端服务器时就暴露了问题, 每次添加或减少后端服务器, 放在服务器中的所有数据都要全部重新计算哈希, 将哈希值摸新的台数, 重新添加. 如此, 阅读全文
摘要:
什么是生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循 阅读全文
摘要:
概述 LinkedHashSet与HashSet类似, 不同的是LinkedHashSet底层使用LinkedHashMap维护元素插入的顺序. LinkedHashSet继承自HashSet, 只是重写了HashSet的构造方法, 初始化一个LinkedHashMap, 其他均与HashSet相同 阅读全文
摘要:
注释: /* */1、css和html的结合方式 (1)用(每个)html标签上的style属性结合 (2)使用html的<style>标签 (3)在style标签里使用语句 @import url(css文件路径);(某些浏览器不支持) (4)使用头标签link引入外部css文件2、css的选择器 阅读全文
摘要:
概述 ArrayList可以理解为动态数组, 根据MSDN的说法, 就是Array的复杂版本. 与数组相比, 它的容量能动态增长. ArrayList是List接口的可变数组的实现. 实现了所有可选列表操作, 允许包括null在内的所有元素. 数组的特点, 查询快增删慢. 每个ArrayList实例 阅读全文
摘要:
概述 Hashtable也是基于哈希表实现的, 与map相似, 不过Hashtable是线程安全的, Hashtable不允许 key或value为null. 成员变量 Hashtable的数据结构和HashMap一样, 采用 数组加链表的方式实现. 几个成员变量与HashMap一样: 方法 Has 阅读全文