
算法细讲(ACM)
要么不做,要么,就不能为做过的后悔!
FZH_SYU
在这个时代,每个人怀揣着梦想,坚持地迈着步子走。这个时代,正因如此,才会愈发精彩。
展开
-
算法总结序言
序言首先,这是写在一段前面的话。我知道算法是很多校招面试的必问科目(暂且把它称作这个吧),经典的包括动态规划、搜索、最短路、线段树等等。最近一段时间,闲来无事,在网上也看了些关于算法的博客。心中仍有几点觉得不太美满的地方,博客知识点针对于ACM算法竞赛的题解居多,详细讲解内容的甚少,有的是寥寥几笔带过,让很多ACM门外汉看着云里雾里,事倍功半。这是其一;算法本来就是一个比较抽象,比较难懂的东西,就...原创 2018-02-12 23:46:19 · 502 阅读 · 0 评论 -
动态规划算法
动态规划算法关键字:子结构 状态转移方程 数塔 背包问题 目录 一、前言二、动态规划概述 1. 定义 2. 概念 3. 求解基本步骤 4. 谈谈动态规划与其他算法之间的联系和区别 5. 动态规划迷思 6. 动态规划解决方法辨析 7. 对动态规划总结性理解三、基础动态规划 1. 数塔问题 2. DAG ...原创 2018-03-03 16:53:41 · 2352 阅读 · 1 评论 -
贪心算法
关键字:最优解 动态规划 子结构 背包问题 区间覆盖导言有人说,贪心很简单,因为不用学,人人都知道怎么贪。也有人说,贪心很难,因为这个世界上会贪的人太多了,哪轮得到你我的份?在acm竞赛中,贪心思想已经能够用来解决许许多多的实际应用。比如背包问题,最优解问题,区间覆盖问题,方案调度问题。同时,贪心思想也是很多算法的灵魂,比如说哈夫曼编码,Dijkstra算法,最小生成树算法。那...原创 2017-08-09 12:47:49 · 664 阅读 · 0 评论 -
递归算法
目录: 1.简单递归定义 2.递归与循环的区别与联系 3.递归的经典应用1.简单递归定义什么叫递归?(先定义一个比较简单的说法,为了理解,不一定对)递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。比如说我要你先求一个N!的结果你说我会用循环啊(没错,但是现在是学递归)int factorial(int x,int...原创 2017-02-08 00:20:28 · 72360 阅读 · 14 评论 -
浅谈动态规划(一)
前言:猿爸爸把 1+1+1+1+1+1+1+1 = 写在纸上,问小猿(咦): 「它们加起来是多少哇?」(数了一会…)「8 !」猿爸爸在左边又加了个 1+,再问一次小猿: 「现在呢?」(迅速地)「9 !」「为什么小猿这么快就知道了呢?」「因为你刚刚加了 1 啊~」「所以只要记得之前的结果,就不用再计一次数啦。」嗯,动态规划就是一种「先记住些事,方便后面节约时间」的...原创 2016-12-24 15:02:50 · 4579 阅读 · 2 评论 -
浅谈动态规划(二)
在算法竞赛中,动态规划的重要性不言而喻。它是所有算法中可以说是最难理解的,也是最难提高的。它范围甚广,变换万千。所有的关于动态规划的讲解都只是其中的冰山一角,当然,这篇以及后面我要更新的也是。不过在动态规划的世界里,很多人为此沉迷了很多时间,同时也得到了很多理解和感悟。除了最基础的数塔问题,我们进一步需要学习的分别是DAG、LIS、LCS、LCIS。下面分别进行讲解DAG 也叫有向无环图,原创 2017-03-05 20:22:19 · 609 阅读 · 0 评论 -
浅谈动态规划(三)
背包问题一、01背包问题描述: 给定n种物品和一个背包。物品i的价值是Wi,其体积为Vi,背包的容量为C。可以选择任意装入背包中的物品,求装入背包中物品的最大总价值。对于一种物品,要么装入背包,要么不装。所以对于一种物品的装入状态可以取0和1。我们设物品i的装入状态为xi,xi∈ (0,1),此问题称为0-1背包问题。设dp[i][j]表示把前i个物品装入容量为j的背包的最大总价值,则状态原创 2017-03-10 15:29:03 · 684 阅读 · 0 评论 -
浅谈动态规划(四)
这一次,我们来谈谈区间dp和概率dp。区间dp首先,状态表示很容易想到,就是[i,j]之间的达到题目条件的要求个数值。但是初学起来,区间dp需要理解一个问题:区间长度是从1慢慢循环到n-1的,一定是等到所有区间长度为1的值都赋好之后,才会开始区间长度为2的赋值。而赋值过程,实际上就是递推过程。每次的赋值,进行一次状态的决策。这就是区间dp不妨先来看看几个题目。题目描述: 现在有n堆石子,第i堆有原创 2017-03-17 18:43:17 · 680 阅读 · 0 评论 -
KMP算法
KMP算法关键字: 模式匹配 前缀 后缀 next数组 应用:查找串T是否为串S的子串时间复杂度:O(n+m) 主要内容:1、前缀和后缀;2、KMP模式匹配简单描述;3、递推求next数组;4、结合代码实现; 1、前缀和后缀 前缀:除了最后一个字符外,一个字符串的全部头部组合;后缀:除了第一个字符以外,一个字符串的全部尾部组合; 例如S串:ACADBDACA 所有前缀:{“A”、”AC”、...原创 2018-02-18 21:29:48 · 484 阅读 · 0 评论 -
二维字符串排序详解
如何处理二维字符串?第一种,使用qsort#include<stdio.h>#include<stdlib.h>#include<string.h>int cmp(const void* a, const void* b){ return (strcmp((char* )a,(char* )b));}int main(){ int n, m, i, count, num原创 2017-01-23 20:58:23 · 1141 阅读 · 0 评论 -
排序总结
排序的概念: 所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。当待排序记录的关键字都不相同时,排序结果是惟一的,否则排序结果不惟一。稳定性: 在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的。要注意的是,排序算法的稳定性是针原创 2016-11-09 00:32:03 · 931 阅读 · 0 评论