当所有的静态查找结构添加和删除一个数据的时候,整个结构都需要重建。这对于常常需要在查找过程中动态改变数据而言,是灾难性的。因此人们就必须去寻找高效的动态查找结构,我们在这讨论一个非常常用的动态查找树——二叉查找树。二叉查找树的特点下面的图就是两棵二叉查找树,我们可以总结一下他的特点:(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值(3)它的左、右子树也分别为二叉查找树我们中
系统 2019-08-29 21:59:55 1741
SuffixTrie:又称后缀Trie或后缀树。它与Trie树的最大不同在于,后缀Trie的字符串集合是由指定字符串的后缀子串构成的。比如、完整字符串"minimize"的后缀子串组成的集合S分别如下:s1=minimizes2=inimizes3=nimizes4=imizes5=mizes6=izes7=zes8=e然后把这些子串的公共前缀作为内部结点构成一棵"minimize"的后缀树,如图所示,其中上图是Trie树的字符表示,下图是压缩表示(详细见
系统 2019-08-29 21:59:51 1741
从《基于比较的排序结构总结》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快的算法。这些算法并不是不用“比较”操作,也不是想办法将比较操作的次数减少到logN。而是利用对待排数据的某些限定性假设,来避免绝大多数的“比较”操作。桶排序就是这样的原理。桶排序的基本思想假设有一组长度为N的待排关键字序列K[1....n]。首先将这个序列划分成M个的子区间(桶)。然后基于某种映射函数,将待排序列的关键字k映射到第i个桶
系统 2019-08-29 21:59:41 1741
今天这堂培训课讲什么呢?我既不讲Spring,也不讲Hibernate,更不讲Ext,我不讲任何一个具体的技术。我们抛开任何具体的技术,来谈谈如何提高代码质量。如何提高代码质量,相信不仅是在座所有人苦恼的事情,也是所有软件项目苦恼的事情。如何提高代码质量呢,我认为我们首先要理解什么是高质量的代码。高质量代码的三要素我们评价高质量代码有三要素:可读性、可维护性、可变更性。我们的代码要一个都不能少地达到了这三要素的要求才能算高质量的代码。1.可读性强一提到可读
系统 2019-08-29 21:58:58 1741
《深入浅出Hibernate》读书笔记(1)——实体对象生命周期最近正在研读《深入浅出Hibernate》一书,前面写的随笔有些也是读该书的笔记,只是未做归类,从这篇开始,我将把相关的内容都整理成一个系列的读书笔记。今天这篇是有关实体对象的生命周期。我刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/RMapping的API工具,它还是一个容器。它可以帮你管理
系统 2019-08-29 21:58:52 1741
在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化。如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。一,结构:二,示例代码:publicinterfaceState{publicvoidhandle(Contextcontext);}classConcreteStateAimplementsState{publicvoi
系统 2019-08-12 09:29:27 1741
P是素数且M也是素数,并且满足等式M=2^P-1,则称M为默尼森数。例如,P=5,M=2^P-1=31,5和31都是素数,因此31是默尼森数。frommathimportsqrtdefprime(num):ifnum==1:returnFalse;ifnum==2:returnTrue;k=int(sqrt(num))+1foriinrange(2,k):ifnum%i==0:returnFalse;returnTrue;defmonisen(no):k=
系统 2019-09-27 17:57:15 1740
python垃圾回收机制一、什么是垃圾回收机制?垃圾回收机制(简称GC)是Python解释器自带一种机制,专门用来回收不可用的变量值所占用的内存空间二、为什么要用垃圾回收机制?程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序崩溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来。python采用的是引用计数机制为主,标记-清除和
系统 2019-09-27 17:57:11 1740
对list的操作向list中插入一个元素前面有一个向list中追加元素的方法,那个追加是且只能是将新元素添加在list的最后一个。如:>>>all_users=["qiwsir","github"]>>>all_users.append("io")>>>all_users['qiwsir','github','io']从这个操作,就可以说明list是可以随时改变的。这种改变的含义只它的大小即所容纳元素的个数以及元素内容,可以随时直接修改,而不用进行转换。这
系统 2019-09-27 17:56:53 1740
Python详解基本语法概要:函数的返回值是函数重要的组成部分。函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返回给程序再由程序作出进一步的操作。可以说是函数的返回值令函数与函数之间,函数与主程序之间更加紧密的联系起来。函数的返回值在Python的函数中都有一个返回值,默认为None。也可以使用returnvalue语句来定义一个且只能定义一个可为任意类型的返回值。但是我们能够返回一个序列类型的对象,来实现返回多个值的效果。Exa
系统 2019-09-27 17:56:49 1740