
算法
文章平均质量分 81
枫之逆
逆风的方向,更适合奔跑。。
展开
-
查找一个序列的最大值和最小值
这个问题,解法比较多,先说下普通的想法,先设定最大值和最小值都为序列中第一个元素值,在一个循环内,每次循环都和当前最大值和最小值来比较更新,这样就需要2N-2次比较了; 再进一步,如果先查找最大值,则需N-1次比较,再查找最小值,则需N-2次比较,总共是2N-3次比较,比上一方法少了1次。 这些做法都是每次取1个数来比较,比较次数为O(2N)。接下来,我们把情况扩展到每次取多于1个数,原创 2012-04-12 17:33:29 · 10741 阅读 · 0 评论 -
算法学习之数据结构之链表是否相交,链表是否存在环
当看到判断两链表是否相交,判断链表是否存在环时,就感觉不知道从何下手,原因是不知道什么是链表相交,什么是链表存在环,所以当明白概念的时候,发现这两个问题并不难,而且,其实两个单链表是否相交是和链表中存在环是有关系的。 一、判断链表是否存在环。 一个链表存在环,指的是,某个节点的next指向的是链表中在他之前的节点,这样在链表尾部形成环。(这个概念很重要。) 弄明白概念后,对于下面原创 2012-09-11 19:36:12 · 2018 阅读 · 0 评论 -
算法学习之数据结构之单链表反转,两两反转
一、单链表反转 链表反转,就是将链表从1->2->3->4->5这种形式反转成5->4->3->2->1这种形式,目前能想到的有两种实现方式,对于什么是链表,链表的一些性质就不多说了,直接说两种实现方式,实现方式如下: 1,用头节点插入法新建链表。反转链表,有创建链表的两种方式(头节点插入法,尾节点插入法)知道,头结点插入法形成的链表是和输入顺序相反的,尾节点插入法形成的链表是和输入顺原创 2012-09-09 11:44:59 · 6022 阅读 · 2 评论 -
算法学习之数据结构之红黑树(一)
一,红黑树性质。 由于二叉查找树知道,一个高度为h的二叉查找树可以实现任何一种基本的动态几何操作,如search,insert,minimum,delete,successor等操作,其时间都是O(h),这样树的高度低了就会执行的比较快,但是当树的高度较高时,操作的性能可能不比链表好。红黑树是许多“平衡的”查找树中的一种,他能保证在最坏的情况下,基本的动态集合操作的时间为O(lgn)。原创 2012-09-06 18:26:43 · 1198 阅读 · 0 评论 -
算法学习之高级数据结构之B树的操作和B+树,B*树介绍
一、介绍磁盘 B树其中一个应用就是在磁盘的存储结构中,先说一下磁盘的读写原理和效率。 磁盘上数据必须用一个三维地址唯一标示:柱面号、盘面号、块号(磁道上的盘块)。读/写磁盘上某一指定数据需要下面3个步骤:(1) 首先移动臂根据柱面号使磁头移动到所需要的柱面上,这一过程被称为定位或查找 。(2) 根据盘面号来确定指定盘面上的磁道。(3) 盘面确定以后,原创 2012-09-04 20:19:30 · 4020 阅读 · 0 评论 -
算法学习之排序学习之基数排序,计数排序及java实现
先介绍一下概念 计数排序和基数排序都是非比较排序,就是不用进行比较就能排序,相对于堆排序,快速排序,插入排序等都是比较排序,比较排序算法的最坏情况下届都要做0(nlgn)次的比较,堆排序和合并排序都是渐近最有的比较排序算法,线性时间排序的时间复杂度都是O(n)。 计数排序的基本思想,假设n个输入元素中的每一个都是介于0到k的整数,此处k为某个整数。当k=O(n)时,计数排序运行时间是O原创 2012-09-05 15:29:59 · 1834 阅读 · 0 评论 -
算法学习之数据结构之双向链表
双链表的没一个元素都是对象,每个对象包含一个关键字域和两个指针域(next,prev)。当然,每个对象还可能包含一些其他的卫星数据。next指向后继节点,prev指向前驱节点。如果prev[x] == null,则无前驱节点,是head头节点。如果next[x] == null则无后继节点,是最后一个节点,即尾节点tail。 双链表的具体操作如下:双向链表的插入:insert(L原创 2012-09-06 12:21:53 · 1409 阅读 · 0 评论 -
算法学习之数据结构之红黑树(二)
红黑树的删除。 红黑树的删除是在二叉查找树的基础上修改得来的,从红黑树上删除一个节点,可以先用普通二叉搜索树的方法,将节点从红黑树上删除掉,然后再将被破坏的红黑性质进行恢复。 我们回忆一下普通二叉树的节点删除方法:Z指向需要删除的节点,Y指向实质结构上被删除的结点,如果Z节点只有一个子节点或没有子节点,那么Y就是指向Z指向的节点。如果Z节点有两个子节点,那么Y指向Z节点的后继节点(其实原创 2012-09-06 20:28:12 · 3356 阅读 · 0 评论 -
算法学习之数据结构之二叉查找树
一,先介绍一些二叉查找树的概念和性质。 二叉树执行基本操作的时间与树的高度成正比。 设x为二叉查找树中的一个结点。如果y是x的左子树中的一个结点,则key[y]=key[x]。 注意这个性质,这个性质表示二叉查找树的根节点的左子树中所有结点都小于根结点,所有右子树的结点都大于根结点。所以根据这个性质,可以用中序访问二叉查找数来实现从小大到排列。 二叉查找树的几个操作:原创 2012-09-06 10:59:45 · 2362 阅读 · 4 评论 -
算法学习之排序学习之快速排序
快速排序,对包含n个数的数组进行排序,最坏运行时间O(n2),期望的运行时间O(nlgn)。 快速排序基本思想,基于分治模式的,先找其中一个数为中间数,然后根据中间数将数组分为两个部分,左边比中间数小,右边比中间数大,然后对左边和右边两部分子数组分别递归调用快速排序,由于两个子数组是就地排序的,合并他们不需要操作,整个数组已经有序了。 具体看代码,下面代码给出了两种实现。pac原创 2012-09-06 12:14:27 · 1387 阅读 · 1 评论 -
算法学习之排序学习之堆排序和如何建堆
堆是一种特殊的数据结构,是一种完全二叉树,分为大根堆(根节点的值大于孩子节点)和小根堆(根节点小于孩子节点),好了,不废话了,怎么建堆和堆排序直接贴代码如下(其中调整堆,建堆,堆排序的具体步骤均有注释,还是代码详细,这样看了一目了然。。呵呵。。):(这个是java实现的大根堆。。)(package test;public class StackSort { public stati原创 2012-04-20 14:51:34 · 12548 阅读 · 2 评论 -
2012腾讯实习招聘笔试附加题1求解方法
参考http://blog.csdn.net/jtlyuan/article/details/7435857#附加题1:问题描述大致如下:一个数组a[n],求构造出一个b[n],使得b[i]=a[0]*a[1]*...a[n-1]/a[i];不能用除法,除了循环变量外 不能用额外的变量 ,要求O(1)的空间复杂度,O(n)的时间复杂度。不多说了直接贴代码。。用java实原创 2012-04-15 12:53:24 · 2116 阅读 · 0 评论 -
K-means算法的java实现,聚类分析681个三国武将
一,k-means算法介绍: k-means算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。 k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各原创 2012-05-07 16:58:29 · 10920 阅读 · 30 评论