算法
文章平均质量分 53
还是很孤独很沉默
android developer.
展开
-
红黑树
http://baike.baidu.com/view/133754.htm http://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91http://blog.csdn.net/v_JULY_v/article/details/6105630 从2-3-4树谈到Red-Black Tree(红黑树)http://b原创 2013-05-10 13:24:59 · 921 阅读 · 0 评论 -
JAVA实现双向链表
JAVA实现双向链表 class DoubleLinkedList { /** * 节点类Node */ private static class Node { Object value; Node prev = this; Node next = this; Node(Object v) { value = v; }原创 2013-05-04 15:59:47 · 933 阅读 · 0 评论 -
链表面试题整理
某本书上面说了,链表这个东西,实际用的并不多,但是可以提供很好的考察面试者编程技巧和思维能力的素材。这里总结一下,见过的面试题和对应的候选解法。题一、 给定单链表,检测是否有环。 1)使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。http原创 2013-05-04 15:18:47 · 1575 阅读 · 0 评论 -
桶排序
/** * 桶排序 */public class TongPaixu { public class BucketSortTest { public static int count = 0; public void main(String[] args) { int[] data= new int[] { 5, 3, 6, 2,原创 2013-05-02 11:56:29 · 1299 阅读 · 0 评论 -
归并排序
一、基本概念归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将原创 2013-05-02 10:59:25 · 1811 阅读 · 0 评论 -
计数排序 (线性时间排序之基数排序,计数排序及java实现)
先介绍一下概念 计数排序和基数排序都是非比较排序,就是不用进行比较就能排序,相对于堆排序,快速排序,插入排序等都是比较排序,比较排序算法的最坏情况下届都要做0(nlgn)次的比较,堆排序和合并排序都是渐近最有的比较排序算法,线性时间排序的时间复杂度都是O(n)。 计数排序的基本思想,假设n个输入元素中的每一个都是介于0到k的整数,此处k为某个整数。当k=O(n)时,计数排序运行时间是O原创 2013-05-02 12:54:36 · 914 阅读 · 0 评论 -
基数排序
基数排序(radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性原创 2013-05-02 12:11:07 · 978 阅读 · 0 评论 -
三种线性排序算法 计数排序、桶排序与基数排序
三种线性排序算法 计数排序、桶排序与基数排序[非基于比较的排序]在计算机科学中,排序是一门基础的算法技术,许多算法都要以此作为基础,不同的排序算法有着不同的时间开销和空间开销。排序算法有非常多种,如我们最常用的快速排序和堆排序等算法,这些算法需要对序列中的数据进行比较,因为被称为基于比较的排序。基于比较的排序算法是不能突破O(NlogN)的。简单证明如下:N原创 2013-05-02 12:55:57 · 947 阅读 · 0 评论 -
直接选择排序
这个是2013年4月11号周四下午搜狗笔试的一道题,因为很久没看排序算法了,所以当时确实想不起来了,今天突然想起来这道题,所以赶紧复习下,这样印象会比较深。 直接选择排序和简单选择排序是一个意思。 在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是:选择排序。每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元原创 2013-04-17 16:48:57 · 978 阅读 · 0 评论 -
希尔排序
希尔排序一、基本概念希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。本文主要介绍希尔排序用Java是怎样实现的。希尔排序(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。希尔排序并不稳定,O(1)的额外空间,时间复杂度为O(N*(logN)^2)。最坏的情原创 2013-05-02 10:34:27 · 1151 阅读 · 0 评论 -
搜狗笔试题之实现一个栈结构
2013-5-4号补充:实现一个队列数据结构以及Java中队列的理解http://blog.csdn.net/song_shi_chao/article/details/8859803 一个面试题:关于堆栈和队列的实现http://article.yeeyan.org/view/9225/174245=====================原创 2013-04-17 18:50:38 · 1016 阅读 · 0 评论 -
实现数据结构Hash表
需要自己实现一个,印象才会深。http://xiaoer-1982.iteye.com/blog/501613http://java.chinaitlab.com/base/836418_3.html原创 2013-05-05 16:39:15 · 1025 阅读 · 0 评论 -
java 树结构:二叉树、B树相关、红黑树等
树也是面试中经常问到的一个问题。尤其是二叉树,以及延伸出来的二叉搜索树、B树、B+树、B*树等。主要的树的数据结构有:树:堆(大顶堆、小顶堆),trie树(字母树or字典树),后缀树,后缀数组,二叉排序/查找树,B+/B-/B*,AVL树,Treap,红黑树,splay树,线段树,树状数组 顺带看了Bitmap、Bloom filter,这两个东西,真不是东西。。。 h原创 2013-04-10 23:02:29 · 1086 阅读 · 0 评论 -
二叉树创建及其遍历:前序、中序、后序、层序遍历等
面试中,二叉树也是经常被问题的一个问题,今天复习之。1.前序遍历:根,左,右2.中序遍历:左,根,右3.后序遍历:左,右,根4.层序遍历:从左到右注意一点就是这个顺序是以根节点为基准的 package com.suanfa.tree;import java.util.ArrayList;/** * 节点类 还可以定义成泛型:Node */class Nod原创 2013-04-18 15:25:38 · 2178 阅读 · 0 评论 -
二叉排序/查找树
二叉搜索树,也叫二叉排序树,是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。空树也是二叉搜索树。 首先,创建一个节点类,Node,这个类需要有它左右孩子节点的引用,同时还应该有节点要存储的数据,为了简单起见,这里我只是用了一个 data 的整形数作为原创 2013-05-10 12:48:50 · 1091 阅读 · 0 评论 -
B树(B-树)、B+树、B*树
http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.htmlhttp://blog.csdn.net/v_JULY_v/article/details/6530142原创 2013-05-10 13:23:19 · 915 阅读 · 0 评论 -
Trie树(字典树、字母树)
http://blog.chinaunix.net/uid-23480159-id-2421752.htmlhttp://www.cnblogs.com/shuaiwhu/archive/2012/05/05/2484676.htmlhttp://blog.csdn.net/v_july_v/article/details/6897097http://www.doc88.com/p-7原创 2013-05-05 17:10:31 · 1739 阅读 · 0 评论 -
双端队列
双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的数据结构。双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行。http://baike.baidu.com/view/1627726.htmhttp://www.cnblogs.com/silence250627170/archive/2011/07/24/2115692.html原创 2013-05-09 18:03:44 · 3175 阅读 · 0 评论 -
一个好的学习算法的网站
一个朋友的博客,很多算法题http://blog.csdn.net/niushuai666/article/details/6637263http://www.cnblogs.com/zhangchaoyang/category/256478.html 有几篇关于算法的文章,待以后慢慢一个个的突破。http://dongxicheng.org/category/structur原创 2013-04-27 22:53:57 · 2589 阅读 · 0 评论 -
大数加法
今天一个朋友豌豆荚面试的唯一一个算法题:大数加法,写程序或者说思路。下面的一些理解来自网络。 1.大数,指的是超过int 32位的数。4个字节,最高位是符号位,1用来表负数。剩下31个bit来表示数值,1000...00(31个0)~11111...11(32个1),不是2的31次方多个变化吗?每一个变化用来表示一个负数。至于每一种变化表示那个负数,那你还要学习一下原码、反码和补码原创 2013-05-09 10:48:11 · 1069 阅读 · 0 评论 -
数据结构与算法之:块状链表(或者叫块状数组)
幻灯片1块状链表幻灯片2文本编辑器l 问题描述l 文本编辑器为一个可以对一段文本和该文本中的一个光标进行如右六条操作的程序。操作名称 输入文件中的格式 功能 MOVE(k)Move k将光标移动到第k个字符之后INSERT(n, s)Inse原创 2013-05-05 11:42:00 · 1531 阅读 · 0 评论 -
直接插入排序
直接插入排序一、基本概念直接插入排序( straight insertion sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。二、具体操作 设有一组关键字{ K 1 , K 2 ,…, K n };排序开始就认为 K 1 是一个有序序列;让 K 2 插原创 2013-05-02 09:47:50 · 875 阅读 · 0 评论 -
折半插入排序
折半插入排序一、基本概念当直接插入排序进行到某一趟时,对于 r[i].key 来讲,前边 i-1 个记录已经按关键字有序。此时不用直接插入排序的方法,而改为折半查找,找出 r[i].key 应插的位置,然后插入。这种方法就是折半插入排序( Binary insertion sort )。二、具体操作在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域原创 2013-05-02 09:25:27 · 1026 阅读 · 0 评论 -
快速排序
快速排序开始看了最简单的冒泡排序,看的还行,后来又看看选择排序,也还行,后来想想,还是看看面试最多的快速排序吧,结果越看越蒙,无奈回家,吃晚饭继续看,终于找到一篇好的文章,才看懂。快速排序确实不容易理解啊。 快速排序(quicksort)— O(nlogn) 期望时间,O(n^2) 最坏情况; 对于大的、乱数列表一般相信是最快的已知排序。 这个还有动画演示,不错啊。http原创 2013-04-17 09:18:30 · 859 阅读 · 0 评论 -
冒泡排序
包括冒泡排序的三种改进算法:http://tech.it168.com/KnowledgeBase/Articles/0/4/2/04254ac1f802da1313f28428436ca078.htmhttp://wenku.baidu.com/view/b7b78b164431b90d6c85c7b1.html2种改进算法:http://www.cnblogs.com/fuho原创 2013-04-17 17:24:10 · 1132 阅读 · 0 评论 -
用JAVA 实现“生产者-消费者”问题
生产者和消费者问题是从操作系统中的许多实际同步问题中抽象出来的具有代表性的问题。它反映了操作系统中典型的同步例子。 生产者进程(进程由多个线程组成)生产信息,例如它可以是计算进程。消费者进程使用信息,它可以是输出打印进程。由于生产者和消费者彼此独立,且运行速度不确定,所以很可能出现生产者已产生了信息而消费者却没有来得及接受信息这种情况。为此,需要引入由一个或者若干个存储单元组成的临时存储区原创 2013-04-27 14:47:26 · 1336 阅读 · 0 评论 -
架构设计:生产者/消费者模式[4]:双缓冲区
“双缓冲区”是一个应用很广的手法。该手法用得最多的地方想必是屏幕绘制相关的领域(主要是为了减少屏幕闪烁)。另外,在设备驱动和工控方面,双缓冲也经常被使用。不过今天要聊的,并不是针对上述的某个具体领域,而是侧重于并发方面的同步/互斥开销。 ★为啥要双缓冲区 记得前几天在介绍队列缓冲区时,提及了普通队列缓冲区的两个性能问题:“内存分配的开销”和“同步/互斥的开销”(健忘的同学,先回去看转载 2013-04-27 14:21:00 · 880 阅读 · 0 评论 -
架构设计:生产者/消费者模式[2]:队列缓冲区
经过前面两个帖子的铺垫,今天终于开始聊一些具体的编程技术了。由于不同的缓冲区类型、不同的并发场景对于具体的技术实现有较大的影响。为了深入浅出、便于大伙儿理解,咱们先来介绍最传统、最常见的方式。也就是单个生产者对应单个消费者,当中用队列(FIFO)作缓冲。 关于并发的场景,在之前的帖子“进程还线程?是一个问题!”中,已经专门论述了进程和线程各自的优缺点,两者皆不可偏废。所以,后面对各种缓冲区类转载 2013-04-27 14:19:01 · 957 阅读 · 0 评论 -
架构设计:生产者/消费者模式[0]:概述
本帖墙内镜像:http://blog.csdn.net/program_think/archive/2009/03/25/4022087.aspx今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。鉴于该模式很重要且相关内容比较丰富,俺打算分几个帖子逐一介绍。今天先来扫盲一把。如果你对这个模式已经比较了解,请跳过本帖子,直接看下一个帖子(关于如何确定数据单元)转载 2013-04-27 14:09:55 · 981 阅读 · 0 评论 -
链表反转:有两种方式 - 普通、递归
2013-4-11,周四,搜狗笔试题:单链表反转。这个题是经常出现的一个笔试和面试题。题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点分析:这是一道广为流传的微软面试题。由于这道题能够很好的反应出程序员思维是否严密,在微软之后已经有很多公司在面试时采用了这道题。为了正确地反转一个链表,需要调整指针的指向。与指针操作相关代码总是容易出错的,因此最好在动手写程序之前作全面的原创 2013-04-18 13:10:30 · 1456 阅读 · 0 评论 -
海量数据处理
海量数据处理记得校招的时候找工作,面试腾讯的第一面就问了一个海量数据处理的问题,就是网上的原题,我看过,不过没认真分析过,面试的时候一问,就蒙了,加上又是腾讯这么好的公司,我就比较紧张,给忘了。社招的时候应该也会问吧,所以得看看。1)http://blog.csdn.net/v_july_v/article/details/7382693http://blog.csdn.net/v_J转载 2013-04-17 09:13:04 · 736 阅读 · 0 评论 -
Hash算法
Hash算法应该算是我比较熟悉的一个算法,因为对HashMap,HashTable它们比较熟悉,所以理解的比较深。从头到尾彻底解析Hash表算法http://blog.csdn.net/v_JULY_v/article/details/6256463一致性 hash 算法( consistent hashing )http://blog.csdn.net/sparklian原创 2013-04-16 18:54:47 · 818 阅读 · 0 评论 -
堆排序
堆排序1.基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。2.稳定性:不稳定3.复杂度:平均时间复杂度 nlog(n),最坏情况O( nlog(n) )。没有最坏情况(即与平均情况一样),空间占用又小,综合效率比快速排序还好。空间复杂度 O(1)4.建堆费时O(k),并调整堆(费时O(logk)) package com.suanfa.pai原创 2013-04-17 16:00:49 · 777 阅读 · 0 评论 -
任意的进制转换
2013-4-11号,周四,我去搜狗面试的做的一道笔试题:把一个二进制的数转换成十六进制数,当时怎么也想不起来如何做?想着这样:先转换成十进制,再转换成十六进制。所以涉及到了进制间转换的问题。 计算机中采用的是二进制,一个数字可以用任意进制表示。关键技术剖析:v Java中在声明数字时默认采用的是十进制,可以在数字前加上符号表示数字采用八进制【前面加0(零)】或者十六进制【前面加上原创 2013-04-17 10:06:27 · 1947 阅读 · 0 评论 -
百度,360,淘宝,腾讯,高通中国,htc上海 Android 面试题
备注:这些是我为准备面试在网上看到的,觉得还可以,挺有代表性的题目,暂且放这吧。。。 这些题我都认真的看过一遍,有个别的不会,基本还算简单,下面标绿颜色的是我目前不是特别会的,今天务必查一下答案。 汇总笔者经历了一些来自百度,360,淘宝,腾讯,高通中国,htc上海的电话面试及现场面试,还有笔试相关题目百度:百度在北京中关村上地七街奎科科技大厦,不大但是很安静的转载 2013-04-19 15:17:52 · 3048 阅读 · 0 评论 -
二分查找算法、折半搜索、二分搜索
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以原创 2013-04-27 22:39:31 · 11546 阅读 · 0 评论 -
Java实现折半查找(二分查找)的递归和非递归算法
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wintys.blog.51cto.com/425414/94051 *名称:BinarySearch*功能:实现了折半查找(二分查找)的递归和非递归算法.*说明:* 1、要求所查找的数组已有序,并且其中元素已实现Comparable接口,如Inte原创 2013-04-27 23:26:23 · 1279 阅读 · 0 评论 -
实现二叉树的层序遍历,说说Java中的队列结构(实现一个Java的队列)
几次面试都被问到二叉树的层序遍历,需要用到队列这个数据结构,我一直想使用一个队列来实现,但是java里没有一种好的队列的数据结构,我又一次面试用ArrayList去当队列用,但是被面试官说到,是不对的,然后就一直想着使用一种队列的数据结构,回来就查了下java中的队列结构。 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.C原创 2013-04-27 16:41:24 · 1932 阅读 · 0 评论 -
搜狗面试注意事项
前一阵总结的,暂且放到这里吧。。。算法网络编程: http协议和tcp协议也得看啊。。。多线程比较重视对倒排索引的理解, 大数据量如何建立倒排索引还有个就是对地图中的特征点如何获取数据结构类(有填空题,选择题,一共10题)1.给一种自定义的二叉树,求有2011个节点的二叉树的最小,最大高度2.A-Z表示1-26,AA,AB分别表示原创 2013-04-19 15:14:46 · 1559 阅读 · 0 评论 -
算法第一篇:吐槽
我是一个极其讨厌算法的人,特别特别的讨厌,上大学的时候就不喜欢学习算法,没做过ACM题,当时很多同学每天都去做各种ACM题,我就是不喜欢,那我不喜欢我为什么要做,所以没做,所以算法一直特别差。还记得校招的时候腾讯面试第一面就因为一个海量数据处理的问题悲剧了,现在工作一年多了,想重新学习算法,觉得还是很有用的,当然主要是工作上要用,准确的说是面试要用,否则我才不会学算法,完全是为了工作,一点兴趣没哟原创 2013-04-08 17:25:46 · 838 阅读 · 0 评论