`
king_tt
  • 浏览: 2141761 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

学习算法之路(转)

 
阅读更多

路漫漫其修远兮,吾将上下而求索。。。

========================================================

转一个搞ACM需要的掌握的算法.
要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.
适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红,
发挥自己的长处,这才是重要的.

========================================================

第一阶段:练经典常用算法

下面的每个算法给我打上十到二十遍,同时自己精简代码,
因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打
出来.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写)
3.大数(高精度)加减乘除
4.二分查找. (代码可在五行以内)
5. 叉乘、判线段相交、然后写个凸包.
6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.
8. 调用系统的qsort, 技巧很多,慢慢掌握.
9. 任意进制间的转换

第二阶段:练习复杂一点

但也较常用的算法,如:
1. 二分图匹配(匈牙利),最小路径覆盖
2. 网络流,最小费用流。
3. 线段树.
4. 并查集。
5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp
6.博弈类算法。博弈树,二进制法等。
7.最大团,最大独立集。
8.判断点在多边形内。
9. 差分约束系统.
10. 双向广度搜索、A*算法,最小耗散优先.
========================================================
相关的知识

图论
路径问题
0/1边权最短路径
BFS
非负边权最短路径(Dijkstra)
可以用Dijkstra解决问题的特征
负边权最短路径
Bellman-Ford
Bellman-Ford的Yen-氏优化
差分约束系统
Floyd
广义路径问题
传递闭包
极小极大距离 / 极大极小距离
Euler Path / Tour
圈套圈算法
混合图的 Euler Path / Tour
Hamilton Path / Tour
特殊图的Hamilton Path / Tour 构造

生成树问题
最小生成树
第k小生成树
最优比率生成树
0/1分数规划
度限制生成树

连通性问题
强大的DFS算法
无向图连通性
割点
割边
二连通分支
有向图连通性
强连通分支
2-SAT
最小点基

有向无环图
拓扑排序
有向无环图与动态规划的关系

二分图匹配问题
一般图问题与二分图问题的转换思路
最大匹配
有向图的最小路径覆盖
0 / 1矩阵的最小覆盖
完备匹配
最优匹配
稳定婚姻

网络流问题
网络流模型的简单特征和与线性规划的关系
最大流最小割定理
最大流问题
有上下界的最大流问题
循环流
最小费用最大流 / 最大费用最大流

弦图的性质和判定


组合数学
解决组合数学问题时常用的思想
逼近
递推 / 动态规划
概率问题
Polya定理


计算几何 / 解析几何
计算几何的核心:叉积 / 面积
解析几何的主力:复数

基本形

直线,线段
多边形

凸多边形 / 凸包
凸包算法的引进,卷包裹法

Graham扫描法
水平序的引进,共线凸包的补丁

完美凸包算法

相关判定
两直线相交
两线段相交
点在任意多边形内的判定
点在凸多边形内的判定

经典问题
最小外接圆
近似O(n)的最小外接圆算法
点集直径
旋转卡壳,对踵点
多边形的三角剖分

数学 / 数论
最大公约数
Euclid算法
扩展的Euclid算法
同余方程 / 二元一次不定方程
同余方程组

线性方程组
高斯消元法
解mod 2域上的线性方程组
整系数方程组的精确解法

矩阵
行列式的计算
利用矩阵乘法快速计算递推关系

分数
分数树
连分数逼近

数论计算
求N的约数个数
求phi(N)
求约数和
快速数论变换
……

素数问题
概率判素算法
概率因子分解

数据结构
组织结构
二叉堆
左偏树
二项树
胜者树
跳跃表
样式图标
斜堆
reap

统计结构
树状数组
虚二叉树
线段树
矩形面积并
圆形面积并

关系结构
Hash表
并查集
路径压缩思想的应用

STL中的数据结构
vector
deque
set / map

动态规划 / 记忆化搜索
动态规划和记忆化搜索在思考方式上的区别

最长子序列系列问题
最长不下降子序列
最长公共子序列
最长公共不下降子序列

一类NP问题的动态规划解法

树型动态规划

背包问题

动态规划的优化
四边形不等式
函数的凸凹性
状态设计
规划方向


线性规划

常用思想
二分 最小表示法


KMP Trie结构
后缀树/后缀数组 LCA/RMQ
有限状态自动机理论

排序
选择/冒泡 快速排序 堆排序 归并排序
基数排序 拓扑排序 排序网络

中级:
一. 基本算法:
(1)C++的标准模版库的应用. (poj3096,poj3007)
(2)较为复杂的模拟题的训练(poj3393,poj1472,poj3371,poj1027,poj2706)
二. 图算法:
(1)差分约束系统的建立和求解. (poj1201,poj2983)
(2)最小费用最大流(poj2516,poj2516,poj2195)
(3)双连通分量(poj2942)
(4)强连通分支及其缩点.(poj2186)
(5)图的割边和割点(poj3352)
(6)最小割模型、网络流规约(poj3308, )
三. 数据结构.
(1)线段树. (poj2528,poj2828,poj2777,poj2886,poj2750)
(2)静态二叉检索树. (poj2482,poj2352)
(3)树状树组(poj1195,poj3321)
(4)RMQ. (poj3264,poj3368)
(5)并查集的高级应用. (poj1703,2492)
(6)KMP算法. (poj1961,poj2406)
四. 搜索
(1)最优化剪枝和可行性剪枝
(2)搜索的技巧和优化 (poj3411,poj1724)
(3)记忆化搜索(poj3373,poj1691)
五. 动态规划
(1)较为复杂的动态规划(如动态规划解特别的施行商问题等)
(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
(2)记录状态的动态规划. (POJ3254,poj2411,poj1185)
(3)树型动态规划(poj2057,poj1947,poj2486,poj3140)
六. 数学
(1)组合数学:
1.容斥原理.
2.抽屉原理.
3.置换群与Polya定理(poj1286,poj2409,poj3270,poj1026).
4.递推关系和母函数.

(2)数学.
1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
2.概率问题. (poj3071,poj3440)
3.GCD、扩展的欧几里德(中国剩余定理) (poj3101)
(3)计算方法.
1.0/1分数规划. (poj2976)
2.三分法求解单峰(单谷)的极值.
3.矩阵法(poj3150,poj3422,poj3070)
4.迭代逼近(poj3301)
(4)随机化算法(poj3318,poj2454)
(5)杂题.
(poj1870,poj3296,poj3286,poj1095)
七.计算几何学.
(1)坐标离散化.
(2)扫描线算法(例如求矩形的面积和周长并,常和线段树或堆一起使用).
(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
(3)多边形的内核(半平面交)(poj3130,poj3335)
(4)几何工具的综合应用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)

高级:
一. 基本算法要求:
(1)代码快速写成,精简但不失风格
(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
(2)保证正确性和高效性. poj3434
二. 图算法:
(1)度限制最小生成树和第K最短路. (poj1639)
(2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解)
(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
(3)最优比率生成树. (poj2728)
(4)最小树形图(poj3164)
(5)次小生成树.
(6)无向图、有向图的最小环
三. 数据结构.
(1)trie图的建立和应用. (poj2778)
(2)LCA和RMQ问题(LCA(最近公共祖先问题) 有离线算法(并查集+dfs) 和 在线算法
(RMQ+dfs)).(poj1330)
(3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的
目的). (poj2823)
(4)左偏树(可合并堆).
(5)后缀树(非常有用的数据结构,也是赛区考题的热点).
(poj3415,poj3294)
四. 搜索
(1)较麻烦的搜索题目训练(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
(2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储状态、双向广搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法. (poj3131,poj2870,poj2286)
五. 动态规划
(1)需要用数据结构优化的动态规划.
(poj2754,poj3378,poj3017)
(2)四边形不等式理论.
(3)较难的状态DP(poj3133)
六. 数学
(1)组合数学.
1.MoBius反演(poj2888,poj2154)
2.偏序关系理论.
(2)博奕论.
1.极大极小过程(poj3317,poj1085)
2.Nim问题.
七. 计算几何学.
(1)半平面求交(poj3384,poj2540)
(2)可视图的建立(poj2966)
(3)点集最小圆覆盖.
(4)对踵点(poj2079)
八.综合题.
(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)

初期:
一. 基本算法:
(1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586)
(3)递归和分治法. (4)递推.
(5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二. 图算法:
(1)图的深度优先遍历和广度优先遍历.
(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成树算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓扑排序 (poj1094)
(5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020)
(6)最大流的增广路算法(KM算法). (poj1459,poj3436)
三. 数据结构.
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299)
(3)简单并查集的应用.
(4)哈希表和二分查找等高效查找法(数的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼树(poj3253)
(6)堆
(7)trie树(静态建树、动态建树) (poj2513)
四. 简单搜索
(1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五. 动态规划
(1)背包问题. (poj1837,poj1276)
(2)型如下表的简单DP(可参考lrj的书 page149):
1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)
六. 数学
(1)组合数学:
1.加法原理和乘法原理.
2.排列组合.
3.递推关系.
(POJ3252,poj1850,poj1019,poj1942)
(2)数论.
1.素数与整除问题
2.进制位.
3.同余模运算.
(poj2635, poj3292,poj1845,poj2115)
(3)计算方法.
1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122)
七. 计算几何学.
(1)几何公式.
(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等). (poj2031,poj1039)
(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)

转载声明: 本文转自 http://blog.csdn.net/hahawowulei/archive/2009/08/15/4449285.aspx

======================================================================

参考推荐:

程序员面试、算法研究、编程艺术、红黑树4大系列集锦与总结

分享到:
评论

相关推荐

    基于机器学习算法的船舶结构强度分析.pdf

    "基于机器学习算法的船舶结构强度分析" 机器学习算法在船舶结构强度分析中的应用是近年来一个热门的研究方向。本文概述了基于机器学习算法的船舶结构强度分析方法,旨在解决传统有限元数值计算方法的缺陷,如耗时长...

    典型机器学习算法在脂肪肝分类预测研究中的实现与比较.pdf

    "机器学习算法在脂肪肝分类预测研究中的实现与比较" 机器学习是一种可以自动学习大量输入的数据样本内在结构和规则的方法,通过应用机器学习算法,可以对新样本进行智能的辨识,甚至实现对未来的预测。在医学领域,...

    深度学习算法在颈动脉超声图像斑块分割中的应用研究.pdf

    深度学习算法在颈动脉超声图像斑块分割中的应用研究 一、深度学习算法概述 深度学习算法是机器学习的一个分支,它通过模仿人脑的神经网络来学习和处理数据。深度学习算法有多种类型,如神经网络、卷积神经网络、...

    视频转换成图片的算法

    这种算法广泛应用于计算机视觉、图像处理和机器学习等领域。 从标题和描述中可以看出,这个算法的核心是将视频文件转换为图片文件,然后可以对图片文件进行处理和分析。这种算法可以应用于许多领域,例如视频监控、...

    论文研究-基于旋转学习策略的共生生物搜索算法.pdf

    为提高共生生物搜索算法(symbiotic organisms search,SOS)的性能,提出一种基于旋转学习策略的共生生物搜索算法(symbiotic organisms search using rotation-based learning,RSOS)。该算法将串行个体更新方式...

    深度学习与人脸识别算法研究.pdf

    随着人脸识别技术的发展,深度学习算法也逐渐成为人脸识别研究的热点。因此,本文对深度学习与人脸识别算法进行了研究和分析,以提高人脸识别的准确性和稳定性。 人脸识别技术已经在安检工作、金融工作、交通等领域...

    机器学习入门算法合集,手把手带你玩转机器学习,掌握数学建模要诀

    机器学习算法入门教程(一): 基于逻辑回归的分类预测 机器学习入门算法(二): 基于朴素贝叶斯(Naive Bayes)的分类预测 机器学习入门算法(三):基于鸢尾花和horse-colic数据集的KNN近邻(k-nearest neighbors)...

    基于深度学习的SIFT图像检索算法

    为了解决分布式的尺度不变特征转换(Scale-Invariant Feature Transform,SIFT)算法效率低和图像特征提取粗糙问题,提出一种基于深度学习的SIFT图像检索算法.算法思想:在Spark平台上,利用深度卷积神经网络...

    零基础学习算法

    零基础学习算法,pdf格式的,如要自取,本人资源还有pdf转其他格式的软件,方便好用

    基于深度学习地址模糊匹配算法

    一种将海量不规范不标准地址,匹配转换为标准地址的方法。

    基于灰狼算法优化深度学习网络的网络流量预测.pdf

    基于灰狼算法优化深度学习网络的网络流量预测 基于灰狼算法优化深度学习网络的网络流量预测是深度学习网络在网络流量预测建模过程中的参数优化难题的解决方案。该解决方案通过收集网络流量历史数据,进行相空间重构...

    基于MBP算法和深度学习的人脸识别.pdf

    "基于MBP算法和深度学习的人脸识别" 这篇论文提出了一个基于MBP算法和深度学习的人脸识别方法,以解决深度学习中的人脸图像特征提取时忽略局部结构特征和缺乏旋转不变性学习的问题。该方法首先使用多尺度单演滤波器...

    旋转人脸检测算法.pdf

    RIOU算法的提出是为了解决传统IOU算法在旋转预选框上的不足之处。RIOU算法可以较好地衡量两块矩形框的重合程度,并且可以适应旋转框的匹配。RIOU的定义为: RIOU(A,B) = Area(A^ ∩B) / Area(A^ ∪B) \* cos(θA - ...

    机器学习算法:从线性回归到神经网络

    大数据还无法装载进计算机内存的情况下,是无法进行诸多算法的处理的,因此应提出新的机器学习算法,以适应大数据处理的需要。大数据环境下的机器学习算法,依据一定的性能标准,对学习结果的重要程度可以予以忽视。...

    人工智能深度学习算法在虚拟现实交互产品的应用与设计实现.pdf

    人工智能深度学习算法在虚拟现实交互产品的应用与设计实现是虚拟现实技术发展的重要方向之一,可以满足用户在虚拟现实环境中的交互需求,并提高虚拟现实产品的性能和用户体验。 深度学习在虚拟现实交互产品中的应用...

    机器学习算法在糖尿病预测中的应用 (1).pdf

    机器学习算法在糖尿病预测中的应用是机器学习技术在医学领域的重要应用之一。糖尿病是多发病和严重的慢性病,患病率呈现逐步上升的趋势。机器学习算法可以对糖尿病进行预测,从而帮助医生更好地诊断和治疗糖尿病。 ...

    人工智能在移动通信网络中的应用:基于机器学习理论的信道估计与信号检测算法.pdf

    深度学习是机器学习的一个分支,它是一类机器学习算法的统称,可以使用级联的多层非线性处理单元进行特征提取和转型。深度学习的应用非常广泛,包括计算机视觉、自然语言处理、模式识别等领域。在移动通信网络中,...

    数据挖掘18大算法实现以及其他相关经典DM算法

    CBA算法是一种集成挖掘算法,因为他是建立在关联规则挖掘算法之上的,在已有的关联规则理论前提下,做分类判断,只是在算法的开始时对数据做处理,变成类似于事务的形式。详细介绍链接 RoughSets 粗糙集算法。粗糙...

Global site tag (gtag.js) - Google Analytics