算法
文章平均质量分 69
普通网友
这个作者很懒,什么都没留下…
展开
-
Bag(背包)
//背包的典型用例//简单的计算标准输入中的所有double值的平均值和样本标准差//背包是一种不支持从中删除元素的集合数据类型——它的目的就是帮助收集元素并迭代遍历所有收集到的元素(用例也可以检查背包是否为空或者获取背包中元素的数量)package Algorithms;import edu.princeton.cs.algs4.Bag;import edu.princeton.cs原创 2016-10-04 14:20:20 · 1029 阅读 · 1 评论 -
希尔排序
//希尔排序//希尔排序是基于插入排序的快速排序算法//希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序package Algorithms;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class原创 2016-10-09 11:42:36 · 602 阅读 · 0 评论 -
归并排序
//归并排序:递归排序算法,将两个有序的数组归并成一个更大的有序数组,即先(递归的)将数组分成两半分别排序,然后将结果归并起来。//原地归并的抽象方法package Algorithms;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P170_M原创 2016-10-21 20:40:05 · 777 阅读 · 0 评论 -
硬币问题 (贪心)
题意:有1元、5元、10元、50元、100元、500元的硬币各C1、C5、C10、C50、C100、C500枚。现在要用这些硬币支付A元,求最少需要多少硬币?示例输入:3 2 1 3 0 2 620示例输出:6#include #include using namespace std;const int v[6] = {1, 5, 10, 50, 100, 50原创 2016-03-30 13:38:25 · 738 阅读 · 0 评论 -
01背包问题
有n个重量和价值分别为wi,vi的物品。从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。#include #include #include using namespace std;int n, W;int dp[1000][1000]; //记忆化数组int w[1000], v[1000];int rec(int i, int j){原创 2016-03-31 10:32:56 · 1950 阅读 · 0 评论 -
二叉树搜索
删除数值一般来说,需要根据下面几种情况分别进行处理:1.需要删除的节点没有左儿子,那么把右儿子提上去2.需要删除的节点的左儿子没有右儿子,那么就把左儿子提上去3.以上两种情况都不满足的话,就把左儿子的子孙中最大的节点提到需要删除的节点上和堆一样,很多情况下不需要自己实现二叉搜索树,使用C++中的STL,STL里有set和map容器,set是使用erc搜索树维护集合的容器,而map则是原创 2016-04-04 21:58:14 · 791 阅读 · 0 评论 -
图的表示
邻接表:用邻接矩阵表示稀疏图会浪费大量的内存空间。而在邻接表中,是通过把"从顶点0出发有到顶点2,4,5的边"这样的信息保存在链表中来表示图的。这样只需要O(|V| + |E|)的内存空间。样例1:vector G[maxn];/* *边上有属性的情况 *struct edge { int to, cost; }; *vector G[maxn]; */ int main原创 2016-04-05 16:24:59 · 508 阅读 · 1 评论 -
二分图判定
给定一个具有n个顶点的图,要给图上每个顶点染色,并且要使相邻的顶点颜色不同。问是否能最多用2种颜色进行染色?题目保证没有重边和自环。vector G[maxn]; //图int V; //顶点数int col[maxn]; //顶点i的颜色(1 or -1)//把顶点染成1或-1bool dfs(int v, int c){ col[v] = c; /原创 2016-04-05 16:28:06 · 740 阅读 · 0 评论 -
最短路问题
最短路问题是图论中最基础的问题。最短路是给定两个顶点,在以这两个点为起点和终点的路径中,边的权值和最小的路径。智力游戏中的求解最少步数问题也可以说是一种最短路问题。1.单源最短路问题1(Bellman-Ford算法)//从顶点from指向顶点to的权值为cost的边struct edge { int from, to, cost; };edge es[max];原创 2016-04-06 14:48:57 · 1113 阅读 · 0 评论 -
最小生成树
最小生成树:如果边上有权值,那么使得边权值和最小的生成树叫做最小生成树。1.最小生成树问题1(Prim算法)int cost[maxn][maxn]; //cost[u][v]表示边e = (u, v)的权值(不存在的情况下设为INF)int mincost[maxn]; //从集合x出发的边到每个顶点的最小权值bool used[maxn]; //顶点i是否包含在集合x中原创 2016-04-06 15:53:10 · 642 阅读 · 0 评论 -
插入排序
//插入排序//为了给要插入的元素腾出空间,我们需要将其余所有的元素在插入之前都向右移动一位package Algorithms;import java.util.Comparator;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P157_Inserti原创 2016-10-07 07:07:49 · 480 阅读 · 0 评论 -
选择排序
//选择排序/* * 找到数组中最小的元素,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么就和它自己交换) * 在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置 * 如此往复,直到将整个数组排序 */package Algorithms;import java.util.Comparator;import edu.princeton.cs.algs4原创 2016-10-06 17:46:59 · 332 阅读 · 0 评论 -
队列(Queue)
//队列的用例//先进先出,当用例使用foreach语句迭代访问队列中的元素时,元素的处理顺序就是他们被添加到队列的顺序//在用集合保存元素的同时保存它们的相对顺序:使它们入列顺序和出列顺序相同package Algorithms;import edu.princeton.cs.algs4.In;import edu.princeton.cs.algs4.Queue;public原创 2016-10-04 17:10:51 · 420 阅读 · 0 评论 -
BinarySearch(二分查找)
//二分查找package Algorithms;import java.util.Arrays;import edu.princeton.cs.algs4.In;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P28_BinarySearch { pu原创 2016-10-04 14:01:15 · 1893 阅读 · 0 评论 -
下压栈(Stack)
//下压栈的用例//后进先出,当用例使用foreach语句迭代遍历栈中的元素时,元素的处理顺序和它们被压入的顺序正好相反//在用集合保存元素的同时颠倒它们的相对顺序package Algorithms;import edu.princeton.cs.algs4.Stack;import edu.princeton.cs.algs4.StdIn;import edu.princeton原创 2016-10-04 17:20:06 · 492 阅读 · 0 评论 -
Dijkstra的双栈算术表达式求值算法
//Dijkstra的双栈算术表达式求值算法/* * 将操作数压入操作数栈 * 将运算符压入运算符栈 * 忽略左括号 * 在遇到右括号时,弹出一个运算符,弹出所需数量的操作数,并将运算符和操作数的运算结果压入操作数栈 */package Algorithms;import java.util.Stack;import edu.princeton.cs.algs4.StdIn;原创 2016-10-04 17:55:38 · 814 阅读 · 0 评论 -
泛型定容栈
//一种表示泛型定容栈的抽象数据类型package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P8原创 2016-10-05 08:22:44 · 612 阅读 · 0 评论 -
下压(LIFO)栈(能够动态调整数组大小的实现)
//下压(LIFO)栈(能够动态调整数组大小的实现)/* * 每项操作的用时都与集合大小无关 * 空间需求总是不超过集合大小乘以一个常数 */package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import edu.princeton.cs.algs4.StdI原创 2016-10-05 10:03:11 · 885 阅读 · 0 评论 -
下压堆栈 (链表实现)
//下压堆栈 (链表实现)package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import java.util.Stack;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOu原创 2016-10-06 09:07:14 · 438 阅读 · 0 评论 -
先进先出队列
//先进先出队列package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P95_Queue im原创 2016-10-06 09:30:03 · 635 阅读 · 0 评论 -
Bag的实现
//Bag的实现package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P98_Bag impl原创 2016-10-06 09:51:10 · 626 阅读 · 0 评论 -
线段树
线段树1.线段树的概念线段树是擅长处理区间的。线段树是一个完美的二叉树(所有的叶子的深度都相同,并且每个节点要么是叶子要么有2个儿子的树),树上的每个节点都维护一个区间。根维护的是整个区间,每个节点维护的是父亲的区间二等分后的其中一个子区间。当有n个元素时,对区间的操作可以在O(logn)的时间内完成。根据节点中维护的数据的不同,线段树可以提供不同的功能。2.基于线段树的RMQ的结原创 2016-04-22 13:20:11 · 560 阅读 · 1 评论 -
分桶法和平方分割
分桶法(bucketmethod)是把一排物品或者平面分成桶,每个桶分别维护自己内部的信息,以达到高效计算的目的的方法。其中,平方分割(sqrtdecomposition)是把排成一排的n个元素每根号n个分在一个桶内进行维护的方法的统称。这样的分割方法可以使对区间的操作的复杂度降至O(根号n)。和线段树一样,根据维护的数据不同,平方分割可以支持很多不同的操作。接下来,和线段树一样,原创 2016-04-28 15:07:47 · 4895 阅读 · 0 评论 -
map常用操作
初始化和赋值// constructing maps#include #include using namespace std;bool fncomp (char lhs, char rhs) {return lhs<rhs;}struct classcomp { bool operator() (const char& lhs, const char& rhs) const原创 2016-03-29 12:57:59 · 513 阅读 · 0 评论 -
霍夫曼编码
原文地址 http://www.acmerblog.com/greedy-huffman-coding-5388.html参考地址 http://www.geeksforgeeks.org/greedy-algorithms-set-3-huffman-coding/霍夫曼编码是一种无损数据压缩算法。在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码转载 2015-12-20 09:07:08 · 1268 阅读 · 0 评论 -
贪心算法
原文 http://blog.csdn.net/effective_coder/article/details/8736718有人说贪心算法是最简单的算法,原因很简单:你我其实都很贪,根本不用学就知道怎么贪。有人说贪心算法是最复杂的算法,原因也很简单:这世上会贪的人太多了,那轮到你我的份?转载 2015-12-18 09:47:51 · 785 阅读 · 0 评论 -
最小生成树Prim算法
原文地址 http://www.acmerblog.com/prims-minimum-spanning-tree-mst-5786.html参考地址 http://www.geeksforgeeks.org/greedy-algorithms-set-5-prims-minimum-spanning-tree-mst-2/一个连通图的生成树是一个极小的连通转载 2015-12-20 09:20:35 · 2249 阅读 · 0 评论 -
DFS 与 BFS
原博文地址 http://blog.csdn.net/lulipeng_cpp/article/details/7524133写在最前的三点:1、所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次。2、实现bfs和dfs都需要解决的一个问题就是如何存储图。一般有两种方法:邻接矩阵和邻接表。这里为简单起见,均采用邻接矩阵存储,说白了也就是二维数组。3、转载 2015-12-18 09:50:01 · 883 阅读 · 0 评论 -
KMP算法
参考地址:http://www.cppblog.com/suiaiguo/archive/2009/07/16/90237.html http://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.htmlKMP 匹配算法是由 "Knuth Morris Pratt" 提出的一种快速的模式匹配算法。 h转载 2016-06-21 12:25:07 · 250 阅读 · 0 评论 -
树状数组
1,用途 树状数组是一种非常优雅的数据结构.当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一区间元素之和的时候,可以考虑使用树状数组. 换句话说,树状数组最基本的应用: 对于一个数组,如果有多次操作,每次的操作有两种:1、修改数组中某一元素的值,2、求和,求数组元素a[1]+a[2]+…a[num]的和。 2,复杂度 最直接的算法可以在O(1)时间内完成一次修改,但是转载 2016-06-24 12:25:06 · 236 阅读 · 0 评论 -
RMQ算法
转自:http://blog.csdn.net/niushuai666/article/details/6624672/1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里我转载 2016-06-24 12:31:06 · 217 阅读 · 0 评论 -
归并排序算法
转自:http://blog.csdn.net/morewindows/article/details/6678165/归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行转载 2016-06-24 12:50:56 · 265 阅读 · 0 评论 -
归并排序求逆序对
转自:http://blog.csdn.net/acdreamers/article/details/16849761我们知道,求逆序对最典型的方法就是树状数组,但是还有一种方法就是Merge_sort(),即归并排序。实际上归并排序的交换次数就是这个数组的逆序对个数,为什么呢?我们可以这样考虑:归并排序是将数列a[l,h]分转载 2016-06-24 12:55:06 · 296 阅读 · 0 评论 -
Kruskal最小生成树
原文地址 http://www.acmerblog.com/greedy-kruskal-spanning-tree-mst-5326.html参考地址 http://www.geeksforgeeks.org/greedy-algorithms-set-2-kruskals-minimum-spanning-tree-mst/什么是最小生成树?生成树是相对图来说的,一个图的生转载 2015-12-20 08:55:24 · 793 阅读 · 0 评论 -
任务选择问题(贪心)
原文地址 http://www.acmerblog.com/greedy-activity-selection-5199.html贪心算法又称贪婪算法是指,在对问题求解时,总是做出在当前看来是最好的选择。当一个问题具有以下的性质时可以用贪心算法求解:每一步的局部最优解,同事也说整个问题的最优解。如果一个问题可以用贪心算法解决,那么贪心通常是解决这个问题的最好的方转载 2015-12-20 08:31:07 · 1781 阅读 · 0 评论 -
C++之pair
定义标准模板库 (STL) 类型、 函数和运算符,以帮助构建和管理的对象,这两个对象视为就可以像在需要时可对。备注对已得到广泛应用的标准c++库中。 它们是必需的作为参数和返回值的各种功能和元素类型的容器 (例如类映射 和 multimap 类。 标题将自动包含通过 要帮助管理其键/值对键入的元素。使用头文件:#include 类pair原创 2016-03-30 14:37:53 · 431 阅读 · 0 评论 -
欧拉函数讲解
欧拉函数欧拉函数,在数论中用于求解 [ 1 , n ] 中与 n 互质数个数 的函数,因为研究者为欧拉,故命名为欧拉函数。通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1) = 1(唯一和1互质的数(小于等于1)就是1本身)。注意:每种质因数只一个。原创 2015-12-22 16:10:06 · 1013 阅读 · 0 评论 -
Hash表算法
原文地址:http://blog.csdn.net/v_JULY_v/article/details/6256463说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。------------------------------------ 第一部分:To转载 2016-06-26 19:34:05 · 336 阅读 · 0 评论 -
KMP算法学习
KMP算法学习&总结0、废话 一直ym传说中的kmp算法能以最坏线性的时间复杂度搞定字符串匹配,开始动手看才知道kmp中的K居然是Donald.E.Knuth,《计算机程序设计艺术》的作者。好吧,继续ym……1、传统的字符串匹配算法(转)" style="margin:0px; padding:0px; border:0px none; list转载 2015-12-17 22:40:51 · 391 阅读 · 0 评论 -
字典树(Trie树)算法
转自:http://www.acmerblog.com/trie-tree-template-3700.html字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。字典树 – 应用串的快速检索给出N个单词组成的熟词表,以及一篇全用小写英文书写转载 2016-06-28 12:53:21 · 457 阅读 · 0 评论