算法与数据结构
文章平均质量分 72
jazwoo
这个作者很懒,什么都没留下…
展开
-
SSL协议和几种常见加密算法
SSL协议的工作流程: 服务器认证阶段: 1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接; 2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息; 3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;转载 2014-03-21 10:36:09 · 6835 阅读 · 0 评论 -
十道海量数据处理面试题与十个方法大总结
第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几转载 2012-10-10 09:50:34 · 522 阅读 · 0 评论 -
利用异或求解 N^N=0 N^0=N
1题:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现 一次。每个数组元素只能访问一次,设计一个算法,将它找 出来;不用辅助存储空 间,能否设计一个算法实现?显然已经有人提出了一个比较精彩的解法,将所有数加起来,减去1+2+...+1000的和。这个算法已经足够完美了,相信出题者的标准答案也就是这个算法,唯一的问题是,如果数列过大,则可能会导致原创 2012-10-10 09:25:28 · 1568 阅读 · 0 评论 -
常见的Hash算法
简介哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量。一些常用的分析技术,例如泊松分布可用于分析不同的哈希函数对不同的数据的碰撞率(collision rate)。一般来说,对任意一类的数据存在一个理论上完美的哈希函数。这个完美的哈希函数定义是没有发生任何碰撞,这意味着没有出现转载 2012-10-10 22:57:13 · 669 阅读 · 0 评论 -
从hadoop框架与MapReduce模式中谈海量数据处理
前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理。 由此,最近凡是空闲时,便在看“Hadoop”,“MapReduce”“海量数据处理”这方面的论文。转载 2012-10-10 09:47:35 · 480 阅读 · 0 评论 -
java 实现的Dijstra算法
import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;public class Dijstra { private List arcs; private List vertexs; pri原创 2012-10-10 00:12:34 · 763 阅读 · 0 评论 -
海量数据处理之Bloom Filter详解
前言 本博客内曾已经整理过十道海量数据处理面试题与十个方法大总结。接下来,本博客内会重点分析那些海量数据处理的方法,并重写十道海量数据处理的面试题。如果有任何问题,欢迎不吝指正。谢谢。一、什么是Bloom Filter Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的转载 2012-10-10 09:45:40 · 439 阅读 · 0 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后转载 2012-10-10 09:41:37 · 431 阅读 · 0 评论 -
用邻接表实现图的深度优先遍历、广度优先遍历、最短路径(无权图)
Java代码 import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Stack; public class Graph { /**关键字:图 邻接表 深度优先遍历 广度优先遍历 最转载 2012-09-14 21:26:06 · 1338 阅读 · 0 评论 -
四、图的单源最短路径
单源最短路径问题:已知有向带权图(简称有向网)G=(V,E),找出从某个源点s∈V到V中其余各顶点的最短路径。一、Dijkstra算法的引入 由Dijkstra提出的一种按路径长度递增序产生各顶点最短路径的算法,其算法的基本思想是:设置两个顶点集合T和S,集合S中存放己经找到最短路径的顶点,集合T中存放当前还未找到最短路径的顶点。初始状态时,集合S中只包含源点v0,然后不断从集合T中转载 2012-09-14 09:45:08 · 1036 阅读 · 0 评论 -
五、图的最小生成树
一、概述 对于连通的带权图(连通网)G,其生成树也是带权的。生成树T各边的权值总和称为该树的权,记作: 这里: TE表示T的边集 w(u,v)表示边(u,v)的权。 权最小的生成树称为G的最小生成树(Minimum SpannirngTree)。最小生成树可简记为MST。二、最小生成树的应用 最小生成树有许多重要的应用。【例】网络G表示n转载 2012-09-14 09:45:31 · 1026 阅读 · 0 评论 -
寻找丑数
1,题意: 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。 返回第n个丑数. 2,分析: //类似于筛法寻找素数 创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的丑数乘以2、3或者5得到的。 我们假设数组中已经有若干个丑数,排好序后存在数组中。现在我们来转载 2012-10-29 15:20:55 · 545 阅读 · 0 评论 -
颠倒栈
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来,放到一个数组里,然后在数组里颠倒所有元素,最后把数组中的所有元素逐一push进入栈。这时栈也就颠倒过来了。颠倒一个数组是一件很容易的事情。不过这种思路需要显示分配一个长度为O(n)的数组,转载 2012-10-29 15:31:58 · 587 阅读 · 0 评论 -
如何判断一个点是否在不规则图形内部?
网上查了下,有办法是说连接目标点与各顶点,然后算夹角,加起来为360度,则在内部,否则在外部,但是这种办法对凹形不对。 1) 我自己想了个办法: 直接沿这个目标点画一条垂直线,跟各边形成的所有交点,都在目标点的同一侧,则在图形外,如果不在同一侧(凹形左旋转90度,不在同一侧)则继续画一根水平线,如果跟各边形成的所有交点,都在目标点的同一侧,则在图形外。转载 2013-12-19 23:07:07 · 6630 阅读 · 0 评论 -
位运算
位运算应用口诀 清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 2 " 3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。 4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一原创 2012-11-07 23:36:51 · 697 阅读 · 0 评论 -
通过交换a,b+中的元素,使[序列a+元素的和]与[序列b+元素的和]之间的差最小。
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小。例如:var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];分析:假设序列a,b中元素的和为sum_a和sum_b。假设aa和bb分别为序列a,b中的元素,则交换aa,转载 2012-10-27 10:44:31 · 562 阅读 · 0 评论 -
字符串匹配算法总结
其实,比KMP算法速度快的算法大把大把,而且理解起来更简单,为何非要抓住KMP呢?笔试出现字符串模式匹配时直接上sunday算法,既简单又高效,何乐而不为?说实话,想到sunday算法的那个人,绝对是发散思维,绝对牛。当我在被KMP折磨的够呛的时候,我就琢磨,有没有别的好算法呢??琢磨了半天也没想出个所以然来。笨啊,脑子不够发散。下面贴上一位兄弟写的算法总结,很简单(建议KMP部分就不转载 2012-10-27 09:29:40 · 891 阅读 · 0 评论 -
在排序数组中查找和为给定值的两个数字
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:如果我们不考虑时间复杂度,最简单想法的莫过去先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和是不是等转载 2012-10-25 21:05:25 · 624 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / / 6 10 / / / / 5 7 9 11因此返回true。如果输入7、4、6、5,没有哪棵树转载 2012-10-25 16:58:13 · 590 阅读 · 0 评论 -
求二元查找树的镜像,循环和递归两种方式
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / / 6 10// //5 7 9 11输出: 8 / / 10 6// //11 9 7 5转载 2012-10-25 17:10:41 · 670 阅读 · 0 评论 -
查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)。我们试着寻找更快的解决思路。我们可以开辟一个长度为k的数组。每次从输入的n个整数中读入一个数。如果数组中已经插入的元素少于k个,转载 2012-10-25 20:57:43 · 942 阅读 · 0 评论 -
翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。分析:由于编写字符串相关代码能够反映程序员的编程能力和编程习惯,与字符串相关的问题一直是程序员笔试、面试题的热门题目。本题也曾多次受到包括微软在内的大量公司的青睐。由于转载 2012-10-25 17:01:14 · 699 阅读 · 0 评论 -
找出两个链表的第一个公共结点
分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pNext都指向同一个结点。但由于是单向链表的结点,每个结点只有一个m_pNext,因此从第一个公共结点开始,之后它们所有结点都是重合的,不可能再出现分叉。所以,两个有公共结点而部分重合的链表,拓扑形状看起来像一个Y,转载 2012-10-29 16:13:14 · 531 阅读 · 0 评论 -
判断二叉树中两个节点的最低共同父节点
题目:二叉树的结点的定义如下:struct TreeNode { int m_nValue; TreeNode *m_pLeft; TreeNode *m_pRight;};输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。答:#include "stdafx.h"#include #include #inc转载 2012-10-29 16:03:09 · 861 阅读 · 0 评论 -
三、图的遍历
一、深度优先搜索(1)深度优先遍历的递归定义 假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有转载 2012-09-14 09:43:27 · 780 阅读 · 0 评论 -
一、图的定义
一、图的定义 图是一系列顶点(结点)和描述顶点之间的关系边(弧)组成。图是数据元素的集合,这些数据元素被相互连接以形成网络。其形式化定义为: G=(V,E) V={Vi|Vi∈某个数据元素集合} E={(Vi,Vj)|Vi,Vj∈V∧P(Vi,Vj)} 其中,G表示图,V是顶点的集合,E是边或弧的集合。在集合E中,P(V转载 2012-09-14 09:41:33 · 650 阅读 · 0 评论 -
R树空间索引 Spatial Index
R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子吧:查找20英里以内所有的餐厅。如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中,一个字段记录经度,另一个字段记录纬度。这样的话我们就需要遍历所有的餐厅获取其位置信息,然后计算是否满足要求。如果一个地区有100家餐厅的话,我们就要进行100次位置转载 2012-07-27 11:18:42 · 3949 阅读 · 0 评论 -
java实现标准正态分布
[java] view plaincopyimport java.util.*; public class zheng0_1 { public static void main(String[] args) { double zhengtai0_1; java.util.Random r = new j转载 2012-07-21 18:24:29 · 3471 阅读 · 0 评论 -
Dijkstra迪杰斯特拉 算法详细步骤及实现
1,迪杰斯特拉算法介绍迪杰斯特拉算法是典型最短路径算法,用于计算图或网中某个特定顶点到其他所有顶点的最短路径。主要特点是以起始点为中心向外,层层扩展,直到扩展覆盖所有顶点。2,迪杰斯特拉算法思想设G=(V,E)为一个带全有向图,把图中顶点集合V分成两组。第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将所到达最短路径的顶点加原创 2011-12-11 22:13:02 · 13843 阅读 · 2 评论 -
基于大规模语料的新词发现算法
对中文资料进行自然语言处理时,我们会遇到很多其他语言不会有的困难,例如分词——汉语的词与词之间没有空格,那计算机怎么才知道“已结婚的和尚未结婚的”究竟是“已/结婚/的/和/尚未/结婚/的”,还是“已/结婚/的/和尚/未/结婚/的”呢?这就是所谓的分词歧义难题。不过,现在很多语言模型都已能比较漂亮地解决这一问题了。但在中文分词领域里,还有一个比分词歧义更令人头疼的东西——未登录词。中文没有首转载 2012-06-28 10:39:14 · 1082 阅读 · 0 评论 -
java程序员必知的8大排序
8种排序之间的关系:1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 (2)实例(3)用java实现[java] view转载 2012-06-28 18:56:52 · 757 阅读 · 0 评论 -
微软面试、经典算法、编程艺术、红黑树4大系列总结
无私分享,造福天下以下是本blog内的微软面试100题系列,经典算法研究系列,程序员编程艺术系列,红黑树系列4大经典原创系列作品与一些重要文章的集锦。 一、微软面试100题系列 横空出世,席卷Csdn--评微软等数据结构+算法面试100题 (在此文中,你能找到与微软100题所有一切相关的东西)微软100题微软、谷歌、百度等公司经典面试100题[第1-60题]转载 2012-06-17 14:01:44 · 4446 阅读 · 0 评论 -
不借助第三方变量,交换两个整型数x和y的值
主要思路是用其中一变量存储x,y的运算值,然后逆运算得到/****************************************************************/ /***** 不借助第三方变量,交换两个整型数x和y的值 ****/ /*****************************************原创 2012-06-17 13:58:39 · 2655 阅读 · 0 评论 -
将汉字转换成数字
出处 http://www.diybl.com/course/3_program/java/javajs/20081124/152535.htmlimport java.util.*;public class Hz2Num{ private static final String[] hz = {"零","一","二","三","四","五","六","七","八","九"};转载 2012-02-04 11:35:46 · 1203 阅读 · 0 评论 -
MD5算法详解
MD5的全称是Message-digest Algorithm 5(信息-摘要算法),用于确保信息传输完整一致。在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc,的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(转载 2011-12-15 15:10:18 · 1302 阅读 · 0 评论 -
Hash算法收录
字符串hash算法比较字符串的算法一般大公司都会考到,我们首先要想到高效的hash。如百度查找一组字符串是否出现在某个文本中,这个不是考什么kmp,他们想听到的是hash。趋势科技考的是从某个文本中删除一组字符串,我想也是要hash吧。1 概述链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(转载 2011-12-15 15:21:52 · 449 阅读 · 0 评论 -
Rtree空间索引的java类包 Java Spatial Index (RTree) Library
http://libspatialindex.github.com/ Java Spatial Index (RTree) Library 可以从该网址下载类包http://jsi.sourceforge.net/apidocs/index.html 在线API原创 2012-07-27 11:31:01 · 3462 阅读 · 0 评论 -
A*算法详解
写这篇文章的初衷是应一个网友的要求,当然我也发现现在有关人工智能的中文站点实在太少,我在这里抛砖引玉,希望大家都来热心的参与。还是说正题,我先拿A*算法开刀,是因为A*在游戏中有它很典型的用法,是人工智能在游戏中的代表。A*算法在人工智能中是一种典型的启发式搜索算法,为了说清楚A*算法,我看还是先说说何谓启发式算法。1、何谓启发式搜索算法 在说它之前先提提状态空间搜索。状态空间搜索,转载 2012-07-26 15:56:41 · 934 阅读 · 0 评论 -
A*算法需要注意的问题
1,在扩展节点M时,计算了其后继节点N的F值,发现N节点已经在open链表中,并且新的F值小于老的F值,但是此时不进行F值的更新,那么修改过的算法正确吗?很简单不正确的,看下面这个图 图1各个边的权值都已经标注在各边的旁边。H(A)=-100,H(B)=20,H(C)=转载 2012-07-26 17:38:26 · 1392 阅读 · 0 评论 -
六、图的拓扑排序
一、概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列。注意: ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均转载 2012-09-14 09:46:16 · 1023 阅读 · 0 评论