代码改变世界

随笔分类 -  数据结构和算法

海量数据处理常用思想及重要数据结构

2019-02-04 10:22 by itwolf, 617 阅读, 收藏, 编辑
摘要: 1、大顶堆、小顶堆 特别适合topN问题,如求海量日志中最大的100个数。既然是海量数据,那么内存中一下子无法加载所有的数据集,此时可以先读取海量数据中的100个数,建立数据集为100的小顶堆(小顶堆的对顶比所有元素都小),然后依次往堆结构中读取数字,调整堆,使其保持小顶堆,最后得到top100的最 阅读全文

多维数组的理解

2016-01-14 13:09 by itwolf, 4976 阅读, 收藏, 编辑
摘要: 要清楚的理解多维数组,需要先理解指针的算术运算和数组名的含义。1、指针的算术运算 指针的算术运算与普通的类型的算术运算是不同的,编译器会在指针的算术运算的过程中自动乘以sizeof(type),如int p=1;p=p+2;则p=3;而int *p; (假如p指向的初始地址位2000),那么p=p... 阅读全文

大整数相加和大整数相乘

2015-12-18 09:56 by itwolf, 671 阅读, 收藏, 编辑
摘要: 大数问题是指操作数超过了计算机常用数据类型的存储范围,常常是用字符串来模仿整数相加和相乘运算来实现的,在模拟的过程中要注意考虑进位和边界条件。1、大整数相加先看一下加法的计算过程,如456+56789 45656789---------57245 计算过程是从低位往高位开始计算,计算过程要加上进位... 阅读全文

迷宫问题(bfs的应用)

2015-09-11 22:30 by itwolf, 636 阅读, 收藏, 编辑
摘要: 问题描述:定义一个二维数组N*M(其中2#include#includeusing namespace std;//定义坐标struct point{ int x; int y;};int mn[11][11];//记录迷宫状态:0可以访问,1不能访问,-1已经访问过point pre[... 阅读全文

oj放苹果

2015-09-07 22:05 by itwolf, 563 阅读, 收藏, 编辑
摘要: 题目描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1是同一种分法。输入每个用例包含二个整数M和N。0=n,那么再分两种情况讨论:1)所有盘子上面都有苹果,那么从每个盘子上都拿走一个苹果对结果没有影响,或者理解为放苹果的时候先在... 阅读全文

最长单调递增子序列

2015-09-06 16:49 by itwolf, 409 阅读, 收藏, 编辑
摘要: 动态规划问题:令dp[i]表示:在str[0-i]中,当以str[i]为单调递增子序列最后一个元素时,所得最长单调递增子序列的长度。递推式:dp[0]=1(第一个字符自己也为递增序列 )当0#includeusing namespace std;int main(){ int n; c... 阅读全文

欧拉回路

2015-09-06 16:31 by itwolf, 278 阅读, 收藏, 编辑
摘要: 一、定义欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图称为欧拉图。二、判断欧拉路是否存在的方法(1)有向图:1、图连通2、所有顶点的出度都等于入度或者有一个顶点出度大入度1,有一个顶点入度大... 阅读全文

图的遍历算法

2015-09-06 14:44 by itwolf, 551 阅读, 收藏, 编辑
摘要: 前言:学习图的遍历算法之前,需要先了解一下图的存储方式(这里只以无向图作为讨论了)。(1)邻接矩阵(2)邻接表一、DFS(深度优先遍历)设置一个visited数组防止重复遍历,DFS主要利用的是栈结构邻接矩阵的遍历#includeusing namespace std;const int n=4;/... 阅读全文

01背包及其变种(物品无限背包、恰好装满背包)

2015-09-03 10:26 by itwolf, 2569 阅读, 收藏, 编辑
摘要: 一、01背包问题 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解将那些物品装入背包可使总价值最大。 动态规划: 1) 子问题定义:F[i][j]表示前i件物品中选取若干件物品放入剩余空间为j的背包中所能得到的最大... 阅读全文

链表的相关操作

2015-08-25 14:32 by itwolf, 233 阅读, 收藏, 编辑
摘要: #includeusing namespace std;struct node{ int data; node *next;};//链表的建立,创建有n个结点的链表node *create(int n){ node *head=NULL; node *p=NULL; h... 阅读全文

排序算法总结

2015-08-19 20:11 by itwolf, 296 阅读, 收藏, 编辑
摘要: 关于各种排序算法的总结表格,这里偷个懒直接用Simple life的博客http://blog.csdn.net/whuslei/article/details/6442755中的图片了下面是自己写的各种排序的程序: 1 #include 2 using namespace std; 3 ... 阅读全文

经典算法学习之回溯法

2015-05-17 22:28 by itwolf, 1471 阅读, 收藏, 编辑
摘要: 回溯法的应用范围:只要能把待求解的问题分成不太多的步骤,每个步骤又只有不太多的选择就可以考虑使用回溯法。若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。 而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。回溯法将问题的候选解按照某一顺序逐一枚举和检验... 阅读全文

经典算法学习之分治法(以排列、组合程序为例)

2015-05-07 09:16 by itwolf, 6026 阅读, 收藏, 编辑
摘要: 分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分治法在每层递归是遵循的三个步骤:(1)分解原问题为若干个子问题,这些子问题是原问题的规模较小的实例。(2)解决这些子问题,队规的求解各个子问题,当子问题规模足够小的时候,... 阅读全文

使用数字进行字符遍历

2015-04-23 22:26 by itwolf, 1023 阅读, 收藏, 编辑
摘要: 有些时候使用数字进行遍历,然后将数字转化成需要的进制数,再将进制数对应成需要的字符是一种非常有效的方法。如:输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X比如:12-34+5-67+89 = 51+23+4-5+6-7-8-9 ... 阅读全文

字符串处理技巧

2015-04-20 20:38 by itwolf, 299 阅读, 收藏, 编辑
摘要: 1、快速统计字符串中每个字符出现的个数hash表2、求两个字符串公共的最长子串长度和子串双重循环遍历找到长度,同时用二重指针保留住最长长度时候的指针位置3、求一个字符串中最大的重复子串长度和子串和2的思路差不多4、将一个字符串全排列输出(1)递归 (2)使用STL中的next_permutation... 阅读全文

素数的判断

2015-04-10 21:45 by itwolf, 224 阅读, 收藏, 编辑
摘要: 1、遍历2以上N的平方根以下的每一个整数,是不是能整除N 1 bool Isprimer(int n) 2 { 3 int flag=1; 4 if (n<2) 5 return false; 6 if (n==2) 7 return true... 阅读全文

经典算法学习之贪心算法

2015-04-10 10:08 by itwolf, 1711 阅读, 收藏, 编辑
摘要: 贪心算法也是用来求解最优化问题的,相比较动态规划很多问题使用贪心算法更为简单和高效,但是并不是所有的最优化问题都可以使用贪心算法来解决。贪心算法就是在每个决策点都做出在当时看来最佳的选择。贪心算法的设计步骤:1、将最优化问题转换为:对其做出一次选择之后,只剩下一个问题需要求解的形式(动态规划会留下多... 阅读全文

经典算法学习之动态规划

2015-04-07 14:53 by itwolf, 6418 阅读, 收藏, 编辑
摘要: 动态规划方法通常用来求解最优化问题。适合使用动态规划求解最优化问题应具备的两个要素:1、最优子结构:如果一个问题的最优解包含子问题的最优解,那么该问题就具有最优子结构。2、子问题重叠(如果子问题不重叠就可以用递归的方法解决了)具备上述两个要素的问题之所以用动态规划而不用分治算法是因为分治算法会反复的... 阅读全文

C++中求两个正整数的最大公约数和最小公倍数

2015-03-27 09:41 by itwolf, 2413 阅读, 收藏, 编辑
摘要: 最大公约数直接用辗转相除法,最小公倍数就是两个数的乘积除以最大公约数#includeusing namespace std;int gys(int x,int y){ return y? gys(y,x%y):x;}int main(){ int x,y; cin>>x>>y... 阅读全文

C++中巧妙的位运算

2015-03-25 10:30 by itwolf, 512 阅读, 收藏, 编辑
摘要: 位运算要多想到与预算和异或运算,并常常将两个数对应位上相同和不同分开处理一、x&(x-1)消除x二进制中最右边的一个1。这个比较厉害,比如统计某个二、与和异或的巧妙结合的思想与运算可以取出两个二进制数中都有1的部分,异或可以求出两个二进制数中只有一个有1的部分,所以运用位运算的时候可以将两个数用与和... 阅读全文
点击右上角即可分享
微信分享提示