05 2013 档案

摘要:JVM主要管理两种类型内存:堆(Heap)和非堆(Permanent区域)。Heap是运行时数据区域,所有类实例和数组的内存均从此处分配。Heap区分两大块,一块是 Young Generation,另一块是Old Generation:1)在Young Generation中,有一个叫Eden Space的空间,主要是用来存放新生的对象,还有两个Survivor Spaces(from,to),它们的大小总是一样,它们用来存放每次垃圾回收后存活下来的对象。2)在Old Generation中,主要存放应用程序中生命周期长的内存对象。 Permanent Generation,主要是存储的是java的类信息,包括解析得到的方法、属性、字段等等。永久带基本不参与垃圾回收。Permanent generation 不是Heap的一部分。 阅读全文
posted @ 2013-05-27 15:08 windlaughing 阅读(4865) 评论(1) 推荐(1)
摘要:Python的命名空间是Python程序猿必须了解的内容,对Python命名空间的学习,将使我们在本质上掌握一些Python中的琐碎的规则。 接下来我将分四部分揭示Python命名空间的本质:一、命名空间的定义;二、命名空间的查找顺序;三、命名空间的生命周期;四、通过locals()和globals() BIF访问命名空间 重点是第四部分,我们将在此部分观察命名空间的内容。 阅读全文
posted @ 2013-05-26 20:55 windlaughing 阅读(25714) 评论(9) 推荐(6)
摘要:本blog总结了常见的排序算法,笔者在以下几篇随笔中,用简洁而概括的语言和图表描述了算法的内容、思想、运行时间等等,其中算法的伪代码描述都是摘自《算法导论》一书。希望能给大家带来一些收获。 常见的排序算法主要有:插入排序 insertion sort;归并排序 merge sort;冒泡排序 bubble sort;堆排序 heap sort;快速排序 quick sort;计数排序 counting sort;基数排序 radix sort;桶排序 bucket sort。 插入排序、归并排序、堆排序、快速排序都是比较排序。它们通过对数组中的元素比较来进行排序。定理:任意一个比较排序算法在最坏情况下,都需要做Ω(n lg n)次的比较。 阅读全文
posted @ 2013-05-22 16:22 windlaughing 阅读(1380) 评论(0) 推荐(1)
摘要:与计数排序类似,桶排序也做了某种假设。计数排序假设输入是一个小范围内的整数。桶排序假设输入元素均匀而独立的分布在区间 [0,1)上。排序思想:把区间划分成n个大小相同的子区间,或称为桶。然后将n个输入元素分布的各个桶中去。先对各个桶中的数进行排序,然后按次序把各桶中的数据列出来即可。 阅读全文
posted @ 2013-05-22 15:20 windlaughing 阅读(368) 评论(0) 推荐(0)
摘要:基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较,先按最低有效数字进行比较,再比较高位(高位的决定权更大,所以最后排序)。基数排序也可以应用于字符串(比如名字或日期)和特定格式的浮点数。 阅读全文
posted @ 2013-05-22 15:15 windlaughing 阅读(601) 评论(0) 推荐(0)
摘要:如果n个待排序元素,每个元素的值都在0~k之间,k为某个整数,可以采用计数排序。其运行时间为Θ(n)。 计数排序的一个重要性质就是它是稳定的:具有相同值得元素在输出数组中的位置 与 它们在输入数组中的位置相同。 阅读全文
posted @ 2013-05-22 15:06 windlaughing 阅读(548) 评论(0) 推荐(0)
摘要:快速排序是基于分治策略,其期望的运行时间为Θ(n lg n),且Θ(n lg n)记号中隐藏的常数因子很小。所以快速排序通常是用于排序的最佳选择。快速排序分3个步骤: 1、分解:数组A[p..r]划分为两个子数组 A[p..q-1]和A[q+1.. r]。使得A[p..q-1]中元素都小于A[q],A[q+1.. r]中元素都大于A[q]。2、解决:递归调用快速排序,对数组 A[p..q-1]和A[q+1.. r]排序。3、合并:因为都是原地排序,所以不需要合并。整个数组A[p..r]已排序。 阅读全文
posted @ 2013-05-22 14:51 windlaughing 阅读(303) 评论(0) 推荐(0)
摘要:堆排序:运行时间为O(n lg n);原地排序算法:在任何时候,数组中只有常数个元素存储在输入数组之外。堆排序利用了某种数据结构来管理算法执行中的信息——堆数据结构。(二叉)堆数据结构是一种数据结构,可以视为一颗完全二叉树。二叉堆有两种:最大堆、最小堆。 阅读全文
posted @ 2013-05-22 14:39 windlaughing 阅读(378) 评论(0) 推荐(0)
摘要:冒泡排序是经过n-1趟子排序完成的,每趟时间c(n-i)。时间复杂度为O(n^2) 阅读全文
posted @ 2013-05-22 14:26 windlaughing 阅读(292) 评论(0) 推荐(0)
摘要:归并排序应用了分治策略。算法分3步骤:分解Divide; 解决Conquer; 合并Combine。 运行时间为 O(n lg n)。因为对数函数的增长速度比任何线性函数增长的都要慢,所以归并排序比插入排序好。 阅读全文
posted @ 2013-05-22 14:13 windlaughing 阅读(766) 评论(0) 推荐(0)
摘要:插入排序算法分析:1、数组A分三部分: A[i .. j-1]已排好序,A[j]待插入,A[j+1 .. n]未排序;2、插入排序是一个数组内的排序,排序过程中有O(1)个元素在数组外。插入排序的最坏情况时间代价为 O(n2) 阅读全文
posted @ 2013-05-22 14:03 windlaughing 阅读(430) 评论(0) 推荐(0)