算法之路
算法,程序之灵魂
Apro1066
其他我都不想聆听 唯有我的声响除外
展开
-
A.pro读算法の9:“树”世界巡行
本文章不算难,不写引言和目录了。(~ .~)本文章由啊哈算法改编而成。这是啥?是我们在算法8里面了解的图(Gragh)吗?不对,它应该是一棵树(Tree)。你可能会说,哪里像树了?我来把它变换一下。 是不是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的。你可能要问了,这玩意和图有什么区别吗,不就是无向图吗。其实不然,还是有差异的。树,就是不含回路的连通无向图。例如:...原创 2018-10-08 22:59:58 · 198 阅读 · 0 评论 -
图论
图(graph)是数据结构和算法学中最强大的框架之一(或许没有之一)。图几乎可以用来表现所有类型的结构或系统,从交通网络到通信网络,从下棋游戏到最优流程,从任务分配到人际交互网络,图都有广阔的用武之地。而要进入图论的世界,清晰、准确的基本概念是必须的前提和基础。下面对其最核心和最重要的概念作出说明。关于图论的概念异乎寻常的多,先掌握下面最核心最重要的,足够开展一些工作了,其它的再到实践中不断去...转载 2018-09-22 22:44:56 · 1062 阅读 · 0 评论 -
A.pro读算法の8:快速搞定图的遍历
与其他数据结构一样,图也需要进行遍历操作,来访问各个数据点,以及后续对顶点和边进行操作。相对于树来说,图的结构更为复杂。目录1.1 概述1.2 图的存储结构1.3 深度优先遍历[2018.10.01完工]1.4 广度优先遍历[2018.10.11完工]大部分灵感来与《啊哈算法》1.1 概述先介绍一下图。图(graph)是数据结构和算法学中最强大的框架之一(或许没...原创 2018-09-23 00:15:11 · 673 阅读 · 2 评论 -
迷宫问题
迷宫问题给出一个N*M的迷宫图和一个入口、一个出口。 编一个程序,打印一条从迷宫入口到出口的路径。这里黑色方块的单元表示走不通(用-1表示),白色方块的单元表示可以走(用0表示)。只能往上、下、左、右四个方向走。//迷宫问题 dfs+回溯 #include <stdio.h>#include <iostream>using namespace...原创 2018-08-05 23:31:29 · 1368 阅读 · 1 评论 -
连通块问题
判断一个二位数组有几个连通块,八领域都表示连通。用@表示连通块。输入n,m,表示地图大小,接下来输入地图,问这个由@组成的连通块有多少个。样例输入:10 12@........@...@@@.....@@@....@@...@@..........@@..........@....@......@...@.@.....@@.@.@.@.....@..@.@........原创 2018-08-17 14:00:28 · 3529 阅读 · 0 评论 -
A.pro读算法の7:快速搞定bfs算法
bfs算法,即广度优先算法(Breadth First Search)。和dfs类似的,同样可以遍历一张图。它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。和dfs一样,这是一种蛮力的解决方案。比如,你的眼镜掉了,你趴在地上找。你会先伸手找离你最近的地方,如果没有,再向远处寻找...和深搜的区别是:同样是对四周进行扩展,只是bfs是所有能扩展的点进入队列,不像深搜,不到最...原创 2018-08-17 18:27:25 · 617 阅读 · 6 评论 -
A.pro读算法の6:快速搞定dfs算法
A.pro不喜欢说那么长的概念和定义,因为那实在是太烧脑了,像我这种蒟蒻看个5分钟就该滚回去睡觉了。那么,我们需要在最短的时间内搞定这个女装山脉(雾)dfs。dfs算法,即深度优先算法(Depth First Search)。理解深搜的重要关键点是在于解决“现在该怎么做”。至于“接下来该怎么做”和“现在该怎么做”是一样的。先举个例子。全排列问题题目描述输出自然数1到n所有不重复...原创 2018-08-08 21:58:49 · 2488 阅读 · 6 评论 -
A.pro读算法の5:模拟算法
描述所谓模拟,即使程序完整的按题目所叙述的方式运行,最终得出答案。思维难度简单。模拟算法也就是将整个过程完完整整的走一遍。题目怎么叙述的,程序就怎么运行。也就是说,题目让程序怎么走,就怎么走。你可以选择任何一个数据结构来完成它。实现步骤1.首先,读懂题意,要知道题目想让你干什么,你的程序要做什么。2.根据题意列出程序模型。3.写出代码框架。实战演练T1.[洛谷]...原创 2018-08-05 12:28:30 · 560 阅读 · 0 评论 -
A.pro读算法の4:搜索算法
概述搜索:利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。 特点:相比于单纯的枚举算法有了一定的方向性和目标性。 算法:在解的空间里,从一个状态转移到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案。 状态:是对问题在某一时刻进展情况的数学描述,或者是数学抽象。 状态转移:问题从一个状态转移到另一状态,这样进行一步步延伸,最后得...原创 2018-08-01 22:08:16 · 249 阅读 · 0 评论 -
全排列问题
题目描述输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。这就是全排列问题。解决方案1:dfs#include <stdio.h>#include <iostream>using namespace std;int a[101],b[101],n;void print(){ int i; for(...原创 2018-08-01 22:27:02 · 1521 阅读 · 0 评论 -
贪心导论
一、什么是贪心在算法与思想不断多样化的 OI 世界里,有一样东西。它既是一种思想,一种普及大众、简单快捷的思想;又是一种算法,一种几乎无所不能、高效率、经济实用的算法。它是 OI 新手们忠实崇拜的偶像,又是 OI 大牛们理想的最高境界。没错,这个东西,就是————贪心。常言道:“贪得无厌。”然而,面临多元化的 OI,我们不得不选择贪心。为什么?因为贪心是紧随时代潮流的。曾经有一位 OI 贪心大牛说...转载 2018-05-12 21:49:00 · 1912 阅读 · 0 评论 -
A.pro读算法の1:贪心算法
1.1描述贪心算法:在对问题求解时,总是做出在当前看来是最好的选择,也就是说,不从整体最优上加以考虑,所作出的仅是某种意义上的局部最优解。 贪心策略:在每个阶段,都作出一个按照某个评价函数最优的决策,这个评价函数最优称为贪心准则(类似于动态规划的状态转移方程)。 基本过程:在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出...原创 2018-05-29 23:02:24 · 299 阅读 · 0 评论 -
A.pro读算法の2:高精度算法
1.1 描述高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字...原创 2018-06-16 00:13:58 · 838 阅读 · 0 评论 -
快速幂操作
1.1 概论快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(log₂N),与朴素的O(N)和一般求法的O(N*N)相比效率有了极大的提高。1.2 原理以下以求a的b次方来介绍 [1] 把b转换成二进制数。该二进制数第i位的权为 例如11的二进制是101111 = 2³×1 + 2²×0 + 2¹×1 + 2º×1因此,我们将a¹¹转化为算 ...原创 2018-07-17 12:28:57 · 459 阅读 · 0 评论 -
A.pro读算法の3:二分查找及模板
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。【算法原理】 用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。...原创 2018-07-24 15:13:48 · 270 阅读 · 0 评论