随笔分类 -  算法设计C++实现

摘要:第一部分、从一道题,漫谈数据结构、以及压缩、位图算法(转载)海量数据处理往往会很有趣,有趣在什么地方呢?空间,aliveable的内存不够,需要反复交换内存时间,速度太慢不行,毕竟那是海量数据处理,数据是一次调用还是反复调用,因为针对时间和空间,通常来说,多次调用的话,势必会增加预处理以减少每次调用的时候的时间代价。题目如下7、腾讯面试题:给40亿个不重复的unsignedint的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?分析:1个unsigned int占用4字节,40亿大约是4G个数不到,那么一共大约要用16G的内存空间,如果内存不够大,反复和硬盘交换数据 阅读全文
posted @ 2013-04-22 10:21 glose 阅读(1483) 评论(0) 推荐(0) 编辑
摘要:给定一个超过10万元素,每个元素均不大于1000的数组,怎样对其进行排序?这个题目就要多亏了晓东。明显的是这些元素中会有很多重复的元素。计数排序无疑是最佳的方式。参考链接:http://www.cppblog.com/shongbee2/archive/2009/04/24/80991.html#include<stdio.h>#include<stdlib.h>//计数排序intCountSort(int*pData,intnLen){int*pCout=NULL;//保存记数数据的指针pCout=(int*)malloc(sizeof(int)*nLen);//申请 阅读全文
posted @ 2013-04-21 20:10 glose 阅读(211) 评论(0) 推荐(0) 编辑
摘要:http://www.cppblog.com/baby-fly/archive/2009/10/24/99356.htmlhttp://www.cnblogs.com/Myhsg/archive/2009/08/29/1556460.html 阅读全文
posted @ 2013-04-19 08:39 glose 阅读(132) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.htmlhttp://www.cppblog.com/oosky/archive/2006/07/06/9486.htmlhttp://kenby.iteye.com/blog/1025599 阅读全文
posted @ 2013-04-10 10:24 glose 阅读(143) 评论(0) 推荐(0) 编辑
摘要:最小生成树是数据结构中图的一种重要应用,它的要求是从一个带权无向完全图中选择n-1条边并使这个图仍然连通(也即得到了一棵生成树),同时还要考虑使树的权最小。 为了得到最小生成树,人们设计了很多算法,最著名的有prim算法和kruskal算法。时间复杂度分别为O(n2)和O(eloge) 假设V是途中顶点的集合,E是边的集合,T是最小生成树的边的集合。U为在最小生成树上点的集合,那么V-U为不在最小生成树上的点的集合。 Prim算法的基本思想: 1.首先选取一个点作为起始点,比如说1顶点,加入到U集合中 2.在所有u∈U,v∈V-U的边(u,v)∈E中,找一条权最小的边(u,v),... 阅读全文
posted @ 2011-11-04 20:44 glose 阅读(1047) 评论(0) 推荐(1) 编辑
摘要:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并算法的基本思想:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针达到序列尾将另一序列剩下的所有元素直接复制到合并序列尾 下面我们来分析一下归并排序的时间复杂度,一趟归并需要将A[1]~A[n]中相邻的长度为h的有序序列进行两两归并。并将结果放到B[1]~B[n]中,这需要将待排序... 阅读全文
posted @ 2011-11-04 20:10 glose 阅读(2125) 评论(0) 推荐(0) 编辑
摘要:字典树: 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。 字典树的基本功能是用来查询某个单词(前缀)在所有单词中出现次数的一种数据结构,它的插入和查询复杂度都为O(len),Len为单词(前缀)长度,但是它的空间复杂度却非常高,如果字符集是26个字母,那每个节点的度就有26个,典型的以空间换时间结构。 下面我们选的存储字典树节点的数据结构为: ty... 阅读全文
posted @ 2011-10-26 20:54 glose 阅读(10363) 评论(1) 推荐(1) 编辑
摘要:基数排序是非比较排序算法,算法的时间复杂度是O(n)。 基数排序的主要思路是,将所有待比较数值(注意,必须是正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始, 依次进行一次稳定排序,这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。比如这样一个数列排序: 342 ,58, 576, 356, 以下描述演示了具体的排序过程(红色字体表示正在排序的数位) http://www.cnblogs.com/sun/archive/2008/06/26/1230095.html第一次排序(个位):3 425 763 560 58第二次排序(十位):34235... 阅读全文
posted @ 2011-10-20 19:02 glose 阅读(11230) 评论(1) 推荐(2) 编辑
摘要:堆的定义: n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1)ki<=k(2i+1)且ki<=k(2i+2)(1≤i≤ n),当然,这是小根堆,大根堆则换成>=号。 //ki相当于二叉树的非叶结点,K2i则是左孩子,k2i+1是右孩子 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树: 树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。堆排序: 堆排序是一种选择排序。是不稳定的排序方法。时间复杂度为O(nlogn)。 堆排序的特点是:在排... 阅读全文
posted @ 2011-10-19 20:59 glose 阅读(5691) 评论(0) 推荐(0) 编辑
摘要:1 安装eclipse: 第一种是通过Ubuntu自带的程序安装功能安装Eclipse,应用程序 ->Ubtuntu软件中心,搜Eclipse安装即可。 第二种方法是用命令:应用程序->附件->终端 然后输入(中间可能需要你输入密码): sudo apt-get install eclipse sudo apt-get install eclipse-pde sudo apt-get install eclipse-jdt2 安装中文语言包 菜单栏:Help------>Install New Software------>在Work with的框框下输入以下地址 阅读全文
posted @ 2011-09-03 12:34 glose 阅读(470) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示