数据结构、算法
DanielWang_
对开源、NLP、网络编程等领域感兴趣 共同学习~~ best wishes
展开
-
十道海量数据处理面试题与十个方法大总结
摘要:本文将向您讲述诸多数据处理面试题以及方法的总结。 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。 再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的转载 2012-11-03 21:23:16 · 1114 阅读 · 0 评论 -
二分查找(Binary Search) 常见问题解决方法总结
缘由今天浏览 何登成的技术博客 无意中发现了写的blog,二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现。随想总结下二分查找的常见问题。问题背景今年的实习生招聘考试,我出了一道二分查找(Binary Search)的题目。题目大意如下:给定一个升序排列的自然数数组,数组中包含重复数字,例如:[1,2,2,3,4,4,4,5,6,7,7]。问题:给定任意自然数,对数...原创 2013-12-13 21:48:07 · 18794 阅读 · 6 评论 -
整形数组中只出现一次的数字(剑指Offer,九度OJ)
题目链接:http://ac.jobdu.com/problem.php?pid=1351 ,剑指Offer P211。题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。解题思路:看到这个题的时候,大家通常会利用比较普通的解法,先对数组排序,然后再遍历一篇,但是题目要求时原创 2013-11-26 17:14:28 · 1924 阅读 · 0 评论 -
后缀数组及其应用
后缀数组概念基本概念介绍:子串:字符串 S 的子串 r[i..j] , i ≤ j ,表示 r 串中从 i 到 j 这一段,就是顺次排列 r[i],r[i+1],...,r[j] 形成的字符串。后缀:从某个位置 i 开始到整个串末尾结束的一个特殊子串。字符串 r 的从 第 i 个字符开始的后缀表示为 suffix(i) ,也就是suffix(i)=r[i..len(r)] 。原创 2013-12-31 17:07:54 · 2806 阅读 · 0 评论 -
字典树 Trie 的实现
Trie,又称单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。Trie,又称单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。它有3个基本性质:1、根节点不包含字符,除根节点外每一个节点都只包含一个字符。2、从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3、每原创 2013-08-06 17:13:36 · 3354 阅读 · 0 评论 -
红黑树 及 linux内核红黑树探讨
红黑树相信大家有一定的了解,红黑树是一种应用很广泛的数据结构,详情点这里。比如在linux内核,nginx等众多开源软件中有应用。发现有很多文章已经把红黑树分析的很好了,现在罗列一下,供以后学习。红黑树的介绍和实现 红黑树算法的层层剖析与逐步实现红黑树Linux内核中的红黑树详解Linux内核红黑等原创 2014-01-16 20:12:11 · 2059 阅读 · 0 评论 -
skiplist 跳跃表详解及其编程实现
skiplist介绍跳表(skip List)是一种随机化的数据结构,基于并联的链表,实现简单,插入、删除、查找的复杂度均为O(logN)。跳表的具体定义,请参考参考维基百科 点我,中文版。跳表是由William Pugh发明的,这位确实是个大牛,搞出一些很不错的东西。简单说来跳表也是链表的一种,只不过它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查找元素时,跳表能原创 2014-03-01 15:40:16 · 19573 阅读 · 3 评论 -
回溯法 求集合全排列、子集
回溯法,参见之前的blog。全排列:全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例固定a,求后面bc的排列:abc,acb,求好后,a和b交换,得到bac固定b,求原创 2013-11-30 17:43:08 · 7009 阅读 · 0 评论 -
二级指针实现单链表的插入、删除及 linux内核源码双向链表之奇技
今天看了coolshell上关于二级指针删除单链表节点的文章。文章中Linus 举例:例如,我见过很多人在删除一个单项链表的时候,维护了一个”prev”表项指针,然后删除当前表项,就像这样:if (prev) prev->next = entry->next;else list_head = entry->next;and whenever I see code原创 2013-12-03 13:54:27 · 9628 阅读 · 4 评论 -
线段树
线段树(Segment Tree)是一种二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左子树表示的区间为[a,(a+b)/2],右子树表示的区间为[(a+b)/2+1,b]。因此线段 树是平衡二叉树。叶节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(原创 2013-10-19 16:59:21 · 1707 阅读 · 0 评论 -
二叉搜索树 c 语言实现
一、介绍二叉搜索树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树:1,若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2,若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3,它的左、右子树也分别为二叉搜索树。二叉搜索树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉搜索序树的存储结构。中序遍历二叉搜索树可得到原创 2013-08-06 16:36:24 · 3749 阅读 · 0 评论 -
并查集及 编程练习
并查集概念:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。比如典型应用:实现Kruskar算法求最小生成树。并查集的主要操作 :下面举例说明并查集的常用的三种操作:1、make_set(x) 把每一个元素初始化为一个集合初始化后每一个元素的原创 2013-12-17 19:42:17 · 2102 阅读 · 0 评论 -
最长递增子序列(LIS)求解
问题描述最长递增子序列也称 “最长上升子序列”,简称LIS ( longest increasing subsequence)。设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lis=,其中k1如:求一个一维数组arr[i]中的最长递增子序列的长度,如在序列{ 7, 1, 6, 5, 3, 4, 8 }中,最长递增子序列长度为4,其递增子序列为:1,3,4,8。原创 2014-05-13 11:33:12 · 4939 阅读 · 0 评论 -
用 python 实现 各种排序算法
归并排序归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并。具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元素的子项,一个元素就是已经排好序的了。然后将这些有序的子元素进行合并。合并的过程就是 对 两个已经排好序的子序列,先选取两个子序列中最小的元素进行比较,选取两个元素中最小的那个子序列并将其从子序列中原创 2013-11-24 23:11:46 · 2406 阅读 · 0 评论 -
C++ STL 优先队列 及其 霍夫曼编码应用示例
优先队列(priority queue)优先队列是一种比较常用的结构,普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高进先出 (largest-in,first-out)的行为特征。c++ priority_queueSTL priority_queue是拥有权值观原创 2013-12-27 17:57:42 · 5549 阅读 · 1 评论 -
欧几里德算法及扩展欧几里德 中科大 ACM 1209
欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(原创 2012-12-08 19:17:18 · 2581 阅读 · 0 评论 -
动态规划 LCS 求两个序列A,B中所有的最长公共子序列
动态规划 求两个序列A,B中所有的最长公共子序列 第一部分、什么是动态规划算法 动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划算法分以下4个步骤:1,描述最优解的结构2,递归定义最优解的值3,按自底向上的方原创 2013-10-22 21:18:17 · 6201 阅读 · 1 评论 -
leetcode Combination Sum 使用集合中的元素求和得到目标值
http://oj.leetcode.com/problems/combination-sum/题目:Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.原创 2013-10-29 19:50:40 · 1846 阅读 · 0 评论 -
字符串最小周期串问题
问题描述:如果一个字符串可以由某个长度为n的字符串重复多次得到,则该串以n为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过100的串,输出它的最小周期。样例输入:ChinaChinaChina样例输出:5问题分析:字符串可能有多个周期,但是只需求出最小的一个。可以从小到大枚举各个周期(即从1到字符串大小),一旦符合条件就原创 2013-11-26 11:05:04 · 6787 阅读 · 4 评论 -
关于位结构体 及 位操作总结
备案待查,指不定啥时候就用上了。 写出下列程序在X86上的运行结果。struct mybitfields{unsigned short a : 4;unsigned short b : 5;unsigned short c : 7;}test;void main(void) {int i;test.a=2;test.b=3;test.c=原创 2012-10-23 16:13:19 · 9030 阅读 · 0 评论 -
算法-- 回溯算法 及 示例
回溯法介绍回溯法(英语:backtracking)也称试探法,回溯法有“通用的解题方法”之称。它可以系统的搜索一个问题的所有解或者任意解。回溯法是一个既带有系统性又带有跳跃性的的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子原创 2013-11-30 16:09:46 · 9056 阅读 · 0 评论 -
编程求幻方(魔方),1-N
题目来源:2013.11.28 带的程序设计 I 上机(即大一C语言课程)。题目描述:有一种正方形的数字排列是一个5×5的数字幻方,即每个1到5的整数在每行每列都出现且出现一次。形式如下:1 2 3 4 52 1 4 5 33 4 5 1 24 5 2 3 15 3 1 2 4对于一个N×N的幻方,如果我们固定了第一行如下:1 2 3 4 5...N我们可以算出符合原创 2013-11-29 22:30:43 · 4558 阅读 · 0 评论 -
如何处理海量数据
转自 http://www.cnblogs.com/lovexinsky/archive/2012/03/09/2387583.html在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面:一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿转载 2012-10-08 17:22:46 · 3501 阅读 · 0 评论 -
HDOJ 1711 (用KMP解决)
hdoj 1711 Number Sequence: http://acm.hdu.edu.cn/showproblem.php?pid=1711此题利用KMP算法即可解决。状态转移图的构造是KMP算法的关键,算法的思想是“用自己匹配自己”根据f[0], f[1],f[2],f[3],...f[i-1] 递推f[i] 。注意审题,刚开始数组开小了,一直报错 wrong ans原创 2013-10-19 16:56:41 · 1671 阅读 · 0 评论 -
杭电OJ 1251 、1671(字典树)
杭电OJ 1251题目传送门:1251 统计难题:http://acm.hdu.edu.cn/showproblem.php?pid=12511671,Phone List: http://acm.hdu.edu.cn/showproblem.php?pid=1671用标准的Trie树即可解决。字典树单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。原创 2013-10-19 16:55:03 · 1787 阅读 · 0 评论 -
实际项目中的常见算法
原文出处: StackExchange 译文出处: infoQ近日Emanuele Viola在Stackexchange上提了这样的一个问题,他希望有人能够列举一些目前软件、硬件中正在使用的算法的实际案例来证明算法的重要性,对于大家可能给到的回答,他还提出了几点要求:使用这些算法的软件或者硬件应该是被广泛应用的;例子需要具体,并给出确切的系统、算法的引用地址;在经转载 2013-12-05 15:14:50 · 2744 阅读 · 0 评论 -
常见数据结构和算法 的可视化
旧金山大学的 David Galles做的各种可视化的数据结构和基本算法的主页,网址在这里,大家可以看看。基础Stack栈: 数组实现Stack栈: 链表实现Queues队列: 数组实现Queues队列: 链表实现Lists列表: 数组实现 ( java 版演示)Lists列表: 链表实现 ( java 版演示)索引Binary Search Trees 二叉检索树AV原创 2013-10-09 19:25:47 · 4422 阅读 · 2 评论