数据结构和算法
shark.zyq
work@alibaba
hangzhou
展开
-
海量数据处理之--哈希分治
方法介绍对于海量数据而言,由于无法一次性装进内存处理,不得不把海量的数据通过hash 映射的方法分割成相应的小块数据,然后再针对各个小块数据通过hash_map 进行统计或其他操作。那什么是hash 映射呢?简单来说,就是为了便于计算机在有限的内存中处理大数据,我们通过一种映射散列的方式让数据均匀分布在对应的内存位置(如大数据通过取余的方式映射成小数据存放在内存中,或大文件映射转载 2014-10-09 22:18:03 · 2691 阅读 · 0 评论 -
查找优化
插值查找:将mid = (low + high)/2 = low + 1/2(high - low) 改进为 ===>>> mid = low + (key - a[low])/(a[high - a[low]])*(high - low)这样在关键字分布较为均匀,表较大的情况下有明显的改善。斐波那契(Fibonacci)查找:略。思想都是改进mid的切分方法。原创 2014-09-24 15:57:14 · 479 阅读 · 0 评论 -
无序序列中O(n)时间复杂度寻找最小(最大)的K个数
一、快速排序,平均复杂度为n*logn二、维护K个最小(最大)堆,平均复杂度为n*logK三、类似快排的划分方法转载 2014-11-26 19:33:10 · 5252 阅读 · 0 评论 -
寻找和为定值的两个数/多个数
一、寻找和为定值的两个数1、若无序,先排序后二分,时间复杂度总为O(n*logn),空间复杂度为O(1)2、扫描一遍X-S[i] 映射到一个数组或构造hash表,时间复杂度为O(n),空间复杂度为O(n)3、两个指针两端扫描(若无序,先排序后扫描),时间复杂度最后为:有序 O(n),无序O(n*logn+n)=O(n*logn),空间复杂度都为O(1)。转载 2014-10-15 18:26:06 · 1145 阅读 · 0 评论 -
lock free编程思想
无锁(lock-free)数据结构提到并行计算通常都会想到加锁,事实却并非如此,大多数并发是不需要加锁的。比如在不同电脑上运行的代码编辑器,两者并发运行不需要加锁。在一台电脑上同时运行的媒体播放放器和代码编辑器,两者并发运行不需要加锁(当然系统调用和进程调度是要加锁的)。在同一个进程中运行多个线程,如果各自处理独立的事情也不需要加锁(当然系统调用、进程调度和内存分配是要加锁的)。在以上这些情况转载 2015-01-10 10:13:40 · 620 阅读 · 0 评论 -
外排序之多路归并&&位图法
外部排序技术之多路归并1.外部排序概述外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装人内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行归并排序。2. 多路归并的实现转载 2014-10-10 09:23:42 · 1429 阅读 · 0 评论 -
字符串包含问题
题目描述:假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些。什么方法能最快的查出所有小字符串B里的字母在大字符串A里都有?比如,如果是下面两个字符串:String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPO答案是true,所有在string2里的字母string1也都有。 如果是下面两个字符串:转载 2014-11-27 19:03:27 · 544 阅读 · 0 评论 -
旋转字符串
题目描述:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。 一、指针翻转法转载 2014-10-10 11:13:06 · 500 阅读 · 0 评论 -
从M个数中随机等可能的取出N个的问题
从0到m-1这m个数中随机取出n个(n 第一个方法是把这m个数丢到一个List里面 然后用nextInt(list.size())来产生随机数 然后把list里面对应的元素丢到另一个数组或者list里面 这个方法本来是不错的 但要注意的是 为了保证每个元素取到的概率相等 需要每取出一个元素 就把它从list里面删除 原因就不解释了 简单的概率问题 但众所周转载 2014-10-17 13:47:46 · 838 阅读 · 0 评论 -
trie树(字典树)&& 后缀树
rie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。转载 2014-10-09 15:59:29 · 795 阅读 · 0 评论