- 浏览: 408946 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 神经网络 (1)
- javascript (11)
- 数据结构 (2)
- 计算机图形学 (11)
- 模式识别 (1)
- 前端开发 (14)
- 机器学习 (11)
- ios开发 (50)
- Python (9)
- HTML5 (4)
- 计算机视觉 (9)
- 数字图像处理 (7)
- 架构设计 (19)
- 数据库设计 (9)
- 算法设计 (59)
- Java (37)
- 其他 (3)
- 游戏开发 (5)
- c++ (17)
- Linux (3)
- TCP/IP (2)
- Flex (41)
- 健康 (6)
- AI (2)
- 工具 (1)
- 数据挖掘 (1)
- 性能优化 (6)
- 综合 (2)
- 网络通信 (12)
- Android (2)
- UML (3)
- 软件设计 (11)
- 编程经验 (7)
- J2EE (1)
- 多媒体技术 (3)
- 数学 (7)
- php (4)
- 设计 (1)
- CS (2)
- 计算机理论 (1)
- 信息安全 (1)
最新评论
-
ahead_zhan:
good good good
flex3控件_ModuleLoader -
lonerzf:
好样的。非常感谢楼主
OpenCV视频教程整理 -
lonerzf:
好样的。谢谢~
OpenCV视频教程整理 -
coding1688:
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
Javascript 瀑布流式布局及其动态效果的实现 -
snowolf:
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
macbook安装操作系统的机理分析
现在真的在自学算法,努力按照以下阶段复习中,争取做到倒背如流
首先,先介绍两本算法书:1.<Introduction to Algorithms>,这本是算法最 经典教材,几乎所有学习算法都用的这本书。2.<Mastering Algorithms with Perl>,因为本人极度喜欢Perl,所以推荐这本书,内容也不错。
以下归入正题:
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,
因为太常用,所以要练到写时不用想,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)
发表评论
-
【转】那些年使用过MapReduce的论文
2014-03-09 15:20 1050MapReduce is a programmi ... -
链表排序多种实现(C++ 实现)
2013-12-14 21:09 49链表排序,C++实现: /** * Defi ... -
4Sum (C++实现)
2013-12-12 19:07 1171Given an array S of n integer ... -
3Sum (C++)
2013-12-12 18:50 135Given ... -
【转】基数排序
2013-09-20 22:42 745转自:http://www.cppblog.com/shon ... -
算法练习题
2013-09-09 23:32 01. 给定一个包含1-n的数列,我们通过交换任意两个元素给数 ... -
字符串题目推荐及解题报告
2013-09-08 17:30 1134转自:http://hi.baidu.com/fpkele ... -
循环字符串最小表示
2013-09-07 20:29 1123题目 From POJ : http://poj.or ... -
Valid Palindrome
2013-07-29 10:34 793Given a string, determine if ... -
Surrounded Regions
2013-07-28 20:11 861Given a 2D board containing ' ... -
Construct Binary Tree from Inorder and Postorder Traversal
2013-07-27 21:11 668Given inorder and postorder t ... -
Construct Binary Tree from Preorder and Inorder Traversal
2013-07-27 13:58 721Given preorder and inorder tr ... -
Add Binary
2013-07-23 00:59 837Given two binary strings, ret ... -
Best Time to Buy and Sell Stock I II III(C++实现)
2013-07-20 20:10 766// Best Time to Buy and Sell ... -
Merge Sort (C++ 实现)
2013-07-14 16:01 869// Type your C++ code and cli ... -
Subsets II(C++实现)
2013-07-13 23:16 935Given a collection of inte ... -
subsets(C++实现)
2013-07-13 23:15 792Given a set of distinct integ ... -
Combinations(c++实现)
2013-07-10 16:52 666Given two integers n and k ... -
Combination Sum II(c++实现)
2013-07-10 16:32 705Given a collection of cand ... -
Combination Sum(c++实现)
2013-07-10 16:20 725Given a set of candidate numb ...
相关推荐
这份"编程算法新手自学手册源码"提供了丰富的学习资源,涵盖了众多经典的算法和问题实例,旨在帮助初学者逐步理解并应用算法。 首先,我们来看排序算法。排序是计算机程序设计中的基础操作,常见的排序算法包括冒泡...
【JAVA自学之路】这篇资料主要针对想要通过自学进入IT行业,特别是Java开发领域的初学者,提供了选择方向和学习路径的建议。以下是对标题和描述中所述知识点的详细说明: 一、选择学习方向: 1. 不要盲目跟风:强调...
例如,RPC框架的核心技术之一就是网络通信效率的优化,这涉及到数据的序列化、通信协议的选择等。对数据结构和算法的深入理解,能够帮助研发者写出性能更优、更稳定、更可扩展的框架,从而达到开源水平并被更广泛的...
自学数据结构与算法
《算法导论》是一本深度探讨算法理论与实践的经典教材,其完整的课件为自学提供了宝贵的资源。课程从基础知识开始,逐步深入到复杂的算法设计和分析。本文将围绕动态规划和贪心算法这两种常见的优化问题解决技巧进行...
本篇详细解读的压缩包标题为“自学遗传算法,matlab所有函数及脚本.zip”,这是一个专为学习和应用遗传算法设计的资源集合。该压缩包中的MATLAB程序和脚本经过了严格的测试,学习者可以直接运行它们,以加深对遗传...
数据结构与算法自学教材,轻松自学数据结构,精通编程技巧!
这份"数据结构自学PPT及算法演示系统"资源提供了一套完整的自学材料,旨在帮助学习者深入理解这两个关键领域。 1. 数据结构:数据结构是组织和管理数据的方式,它涉及到如何在计算机中存储和检索数据。常见的数据...
杭电水机算法岗自学资料
总的来说,《hello算法-文本》是一本全面而实用的算法学习资源,它不仅适合计算机科学专业的学生,也适用于想要提升编程技能的自学者。通过阅读这份资料,读者可以系统地学习算法,为今后的编程生涯打下坚实的基础。...
这些算法用于调整数据序列,使之按照某种规则(如升序或降序)排列。Flash演示可以帮助我们清晰地看到元素如何在排序过程中移动,从而理解每种排序算法的时间复杂度和空间效率。 2. **查找算法**:例如线性查找、二...
《算法与数据结构》是一份宝贵的自学资料,涵盖了计算机科学中的核心概念,是任何程序员或技术爱好者提升技能的必备资源。算法是解决问题的步骤和...现在就着手学习,打开这份资料,开启你的算法与数据结构探索之旅吧!
适合想自学MATLAB常用算法的以及想打数学建模比赛的同学 拥有电脑下载MATLAB以及数学建模常用软件即可,学完之后能够掌握MATLAB常用算法使用,数学建模拿到国奖不是问题 清华大学数学建模群内部资料,非常珍贵.亲身...
这本书旨在为学生和专业程序员提供算法设计和分析的基础,同时也适合自学者深入理解算法的核心概念。下面将根据标题、描述以及提供的压缩文件名,详细解读其中可能涉及的知识点。 1. **基础算法**:书中涵盖了排序...
本开源项目“Java自学编程之路”旨在为那些正在或准备踏上自学Java之路的人提供全面的学习资源和指导。这个项目不仅涵盖了基础理论,还包括实战经验和技术文章,帮助你更好地理解和掌握Java编程。 首先,学习Java...
自学算法导论中前几章,并自己写的排序算法源码包括gtest的测试用例。 详细介绍看我博客 http://blog.csdn.net/ceofit 一、选择法排序、冒泡排序、插入法排序 http://blog.csdn.net/ceofit/article/details/7397020 ...