
Algorithm
文章平均质量分 77
tham_
凡是新的事情在起头总是这样,起初热心的人很多,而不久就冷淡下去,撒手不做了。因为他已经明白,不经过一番苦工是做不成的,而只有想做的人,才忍得过这番痛苦。
展开
-
算法导论:回文子串(Manacher)算法 ,O(n)时间效率实现
问题描述:输入一个字符串,求出其中最大的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。解析:这里介绍O(n)回文子串(Manacher)算法算法基本要点:首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一个特殊的符号。比如 abba 变成 #a#b#b#a#, aba变成 #a#b#a#。为了进一步减少编码的复杂度,可以在字符串的开始加入另一个特殊字符,这样就不用原创 2015-03-29 14:53:42 · 1221 阅读 · 0 评论 -
编程面试的10大算法概念汇总
嘿,第一次翻译文章,在ProgramCreek看到的,原文章名为Top 10 Algorithms for Coding Interview, 对于我这个明年即将直奔BAT(目前想法,以后不一定)但基础知识又差的小程序媛而言有点价值,就拿来翻译了下,并发表在伯乐在线。文章本身只是总结介绍简单概念,起个抛砖引玉的作用,具体深入了解需要自己慢慢学习,关键是文章中及末尾给出出了很多非常优秀的参考资料转载 2015-09-21 14:35:01 · 718 阅读 · 0 评论 -
出栈序列统计—中学高级本
关于栈的应用拓展栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两·种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。输入一个整数n(1输出原创 2015-10-28 17:28:45 · 2043 阅读 · 0 评论 -
动态规划—输出所有的最长公共子序列
上篇讲到使用动态规划可以在 θ(mn) 的时间里求出 LCS 的长度,本文将讨论如何输出最长公共子序列。*问题描述:给定两个序列,例如 X = “ABCBDAB”、Y = “BDCABA”,求它们的最长公共子序列的长度。*下面是求解时的动态规划表,可以看出 X 和 Y 的最长公共子序列的长度为4:输出一个最长公共子序列并不难(网上很多相关代码),难点在于输出所有的最原创 2015-09-24 21:12:24 · 3761 阅读 · 0 评论 -
在流程图中求支配点的一种快速算法+[CodeChef FEB14]Graph Challenge解题报告(求半支配点)
0.说明本文译自Tarjan的论文:https://www.cs.princeton.edu/courses/archive/fall03/cs528/handouts/a%20fast%20algorithm%20for%20finding.pdf选取了其中的一部分,有删改,以原文为准。1.简介在学习全局流分析和程序优化时,如下图论问题自然地浮现出来。设G(V转载 2015-12-03 15:34:02 · 3535 阅读 · 0 评论 -
单链表的基本操作(C语言实现)
//////////////////////////////////////////// //单链表的初始化,建立,插入,查找,删除。// //////////////////////////////////////////// #include #include typedef int ElemType; //////////////////////////////原创 2016-04-07 17:46:45 · 12506 阅读 · 5 评论 -
最长回文子串解法详解
回文串,就是指正读和反读都一样的字符串,比如"level"或者"noon"等等。那么,如何求一个字符串的最长回文子串(Longest Palindromic Substring)?这里我们有多种解法。解法一:暴力法暴力解法就是直接枚举所有子串,对每个子串判断是否为回文,时间复杂度为O(n3)。这是最糟糕的方法,相信面试官问你这个问题,绝对不是想要这个答案。解原创 2015-09-24 21:20:03 · 2181 阅读 · 0 评论 -
并查集(union)模板
并查集模板1(常用)int findset(int x)//查 { if(x != father[x]) father[x]=findset(father[x]);//查的过程中进行路径压缩,有效加快并查集运算 return father[x]; } int unio原创 2016-03-28 17:40:49 · 2441 阅读 · 0 评论 -
图算法 单源最短路径 Bellman_Ford算法(边权值为负情况)
一、前瞻 在之前的单源最短路径Dijkstra算法中,博主给出了最短路径的一些基本概念和问题,并且给出了对权值不能为负的图使用Dijkstra算法求解单源最短路径问题的方法。 我们提到,Dijkstra算法的一个巨大前提是:不能有权值为负的边。因为当权值可以为负时,可能在图中会存在负权回路,最短路径只要无限次地走这个负权回路,便可以无限制地减少它的最短路径权值,这就变相地说明最原创 2015-05-27 17:14:16 · 4097 阅读 · 0 评论 -
二分图的最大匹配、完美匹配和匈牙利算法
这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为原创 2016-04-18 11:58:26 · 2852 阅读 · 0 评论 -
带权最短路 Dijkstra, SPFA, Bellman-Ford, ASP, Floyd-Warshall 算法分析
图论中,用来求最短路的方法有很多,适用范围和时间复杂度也各不相同。本文主要介绍的算法的代码主要来源如下:Dijkstra: Algorithms(《算法概论》)Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani;《算法竞赛入门经典—训练指南》刘汝佳、陈峰。SPFA (Shortest Path Faster Algorit原创 2016-04-18 11:37:48 · 4430 阅读 · 1 评论 -
Hiho 数论一·Miller-Rabin质数测试,大素数判断
题目1 : 数论一·Miller-Rabin质数测试时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Hi和小Ho最近突然对密码学产生了兴趣,其中有个叫RSA的公钥密码算法。RSA算法的计算过程中,需要找一些很大的质数。小Ho:要如何来找出足够大的质数呢?小Hi:我倒是有一个想法,我们可以原创 2016-04-18 21:37:06 · 3005 阅读 · 0 评论 -
随机算法 —— 模拟退火
模拟退火例题:CodeVS: P1344 有 N ( P2 -> P3 -> ... -> PN 找出 |P1P2|+|P2P3|+...+|PN-1PN| 长度的最小值)这种问题被称为最优组合问题。传统的动态规划算法O(n22n)在n = 20的情况下空间、时间、精度都不能满足了。这时应该使用比较另类的算法。随机化算法在n比较小的最优化问题表现较好,我们尝试使用随机化算转载 2017-08-19 22:41:26 · 1380 阅读 · 0 评论 -
NOIP2017 国庆郑州集训知识梳理汇总
第一天 基础算法及数学基本算法递推、递归、分治 二分、倍增 贪心递推指通过观察、归纳,发现较大规模问题和较小规模问题之间的关系,用一些数学公式表达出来在一些题解中,和“计数DP”是指同一个概念看例题例 1用 1 * 2 的骨牌,覆盖 2 * n 的棋盘的方案数?解:很经典的Fibonacci 数 O(n) 求转载 2017-10-09 09:08:55 · 1541 阅读 · 0 评论 -
动态规划—最长公共子序列问题
一、动态规划动态规划(Dynamic Programming)是一种设计的技巧,是解决多阶段决策过程最优化问题的通用方法。基本思想:将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解(这部分与分治法相似)。与分治法不同的是,适合于用动态规划求解的问题,经分解得到的子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被原创 2015-09-24 21:09:06 · 2055 阅读 · 0 评论 -
NOI系列赛中 C++容器使用总结
第1章 容器第1条:慎重选择容器类型。标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一“重型”string。非标准的关联容器hash_set、hase_multiset、hash_map和hash_mult原创 2015-08-26 10:35:00 · 2703 阅读 · 0 评论 -
算法导论:快速找出无序数组中第k小的数
题目描述:给定一个无序整数数组,返回这个数组中第k小的数。解析:最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(1)。使用快排的思想,但是每次只对patition之后的数组的一半递归,这样可以将时间复杂度将为O(n)。原创 2015-03-29 14:34:50 · 4006 阅读 · 1 评论 -
深度优先搜索DFS(邻接表实现)
#define _CRT_SECURE_NO_WARNINGS#include using namespace std;#define PATH#define VERTEX_NUM 8#ifdef PATHint count = 1;#endifbool visited[VERTEX_NUM + 1]; // 访问标志数组(备忘表)struct Arc转载 2015-03-29 22:52:37 · 792 阅读 · 0 评论 -
深度优先搜索 DFS(邻接矩阵表示)
#define _CRT_SECURE_NO_WARNINGS#include using namespace std;//#define PATH#define VERTEX_NUM 8#ifdef PATHint count = 1;#endifbool visited[VERTEX_NUM + 1]; // 访问标志数组(备忘表)int FirstAdj转载 2015-03-29 22:50:56 · 1257 阅读 · 0 评论 -
邻接矩阵实现BFS广度优先搜索
#define _CRT_SECURE_NO_WARNINGS#include #include using namespace std;#define VERTEX_NUM 8bool visited[VERTEX_NUM + 1]; // 访问标志数组(备忘表)int FirstAdjVex(bool G[VERTEX_NUM + 1][VERTEX_N转载 2015-03-29 22:53:44 · 935 阅读 · 0 评论 -
邻接表实现BFS广度优先搜索
#include #include #include #define VERTEX_NUM 8typedef enum {FALSE = 0, TRUE = 1}BOOL;typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; // struct不能少}ArcNode;BOOL visi原创 2015-03-29 22:55:12 · 1104 阅读 · 0 评论 -
二叉树遍历,栈实现二叉树的非递归遍历
另见求树高 http://blog.youkuaiyun.com/Justme0/article/details/7694704/********************************************************************created: 2014/05/11 23:13filename: main.cauthor: Just原创 2015-03-29 22:49:01 · 1810 阅读 · 0 评论 -
巫泽俊...《挑战程序设计竞赛》算法及相关书籍论点
前几天,秋叶拓哉(iwi)、岩田阳一(wata)和北川宜稔(kita_masa)所著,我(watashi)、庄俊元(navi)和李津羽(itsuhane)翻译的《挑战程序设计竞赛》,终于通过人民邮电出版社正式出版了。可喜可贺,可喜可贺。有关该书的简介,目录、试读和购买链接请通过传送门访问。这里我主要想说一下自己为什么要翻译和推荐本书,还有对程序设计竞赛学习资料的一些看法。也附带一些对译者序和第1章转载 2015-04-15 17:24:39 · 3679 阅读 · 1 评论 -
信息学(OI)竞赛—常用算法网站
算法竞赛网站归纳:以下大部分也都是表现形式为刷题的算法学习网站~求职面试看这个:结构之法 算法之道推荐的讲解算法的网站、好博客:http://www.csie.ntnu.edu.tw/~u91029/讲解、代码格式、图表都很规范,覆盖广http://www.matrix67.com/informatics.hMatrix67 的一些算法讲原创 2015-04-15 17:49:36 · 4674 阅读 · 0 评论 -
浅谈经典排序算法系列—各种排序算法总结
排序算法的稳定性定义:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。稳定性判定方法:对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特原创 2015-04-28 09:50:42 · 979 阅读 · 0 评论 -
回溯法解八皇后问题及再看八皇后问题优化
1、介绍先上张图来说明用回溯法解八皇后问题的每一步: 2、程序看着严蔚敏的书写的,写好后运行一次性成功了,程序如下:// N皇后问题 #include using namespace std; #define N 8 bool matrix[N + 1][N + 1] = {0}; boo原创 2015-01-11 09:52:04 · 4189 阅读 · 0 评论 -
【ACMer】大学期间ACM进阶计划总结
ACM进阶计划闲来无聊,虽然大学的ACM参赛结局很狗血,还是把大学期间ACM集训队训练的一些经验作一个总结,希望看到这篇博文的ACMer能惊醒,至少博主没做到下面的规划,所以2年集训队只能惨淡收场。。。ACM队不是为了一场比赛而存在的,为的是队员的整体提高。大学期间,ACM队队员必须要学好的课程有:l C/C++两种语言l 高等数学l 线性代数原创 2015-05-05 21:37:39 · 2160 阅读 · 2 评论 -
最小生成树,POJ和HDU几道题目的解题报告(基于自己的模板)
首先POJ题目:链接:1251 Jungle Roads题目大意:纯求最小生成树,结果为最小权值边的和。采用邻接表#include #include #include #include using namespace std;#define maxn 30 //最大顶点个数int n; //顶点数,边数struct arcnode //边结原创 2015-05-27 17:01:41 · 870 阅读 · 0 评论 -
HDU 2112— HDU Today,最短路径算法,Dijkstra
HDU TodayTime Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13396 Accepted Submission(s): 3144Problem Description经过锦囊相助,海东集团终于度原创 2015-05-27 17:09:52 · 1174 阅读 · 0 评论 -
挑战程序设计竞赛 — 知识总结
准备篇1.5 运行时间概述编写的目的是面向ACM程序设计竞赛,不可避免的要涉及复杂度和运行时间的问题,本节给出了解决问题算法选择的依据。假设题目描述中给出的限制条件为n<=1000,针对O(n2)的算法将会执行大于106次。如果时间限制是1s,则有下述结论:上述结论表明,针对O(n2)的算法,n<=1000可以在时限内解决,但是如果n<=10000,则超时的可能性非常大,这就启示...原创 2018-07-08 17:04:47 · 3995 阅读 · 0 评论