数据结构与算法
文章平均质量分 59
数据结构与算法的笔记
Sin_Geek
Lovelife
展开
-
算法学习笔记——分治法
一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)。二、基本思想及策略分治法设计思想:将一个难以直接解决的大问题,原创 2014-10-20 14:18:10 · 1440 阅读 · 0 评论 -
算法学习笔记——动态规划法
一、基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有原创 2014-10-20 15:03:09 · 1028 阅读 · 0 评论 -
算法学习笔记——贪心法
一、基本概念所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的贪心策略一定要仔细分原创 2014-10-20 16:22:45 · 1198 阅读 · 0 评论 -
算法学习笔记——回溯法
一、基本概念回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题原创 2014-10-20 17:44:32 · 1539 阅读 · 0 评论 -
算法学习笔记——分支限界法
一、基本概念类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相邻原创 2014-10-20 18:11:46 · 1426 阅读 · 0 评论 -
算法— —二叉树遍历
概念二叉树遍历是二叉树的最基本的操作,其实现方式主要有: 1. 递归遍历 2. 非递归遍历 3. Morris遍历(自己度娘去,这里不讲)原创 2016-09-29 09:48:31 · 2205 阅读 · 2 评论 -
数据结构复习笔记— —堆
堆的基本性质堆也可以说是一个完全二叉树,就是除了最底层的,其它层是满的,既然我们可以用完全二叉树来表示一个堆,那么我们这里就采用数组结构的二叉树来阐述堆的性质。 假设在这里我们用数组A表示堆,A[i]表示堆里面的第i个元素,于是我们通过二叉树的性质可知:Parent(i) = i/2 LeftChild(i) = 2*i RightChild(i) = 2*i+1 就如下图表现所示: 堆的原创 2016-09-09 14:13:48 · 582 阅读 · 0 评论 -
数据结构复习笔记— —栈
栈(stack),它是一种运算受限的线性表,先进后出。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。有进栈、出栈、栈满、栈空等几种状态。栈可以用来在函数调用和递归时会被用到。类似于有左右括号的这类操作也可以用栈。尾递归、常数递归可以不用栈。栈相当于具有记忆功能。栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。主要记录: 1函数的返回原创 2016-09-09 15:15:28 · 576 阅读 · 0 评论 -
数据结构复习笔记— —队列
基本概念队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。顺序队列建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素原创 2016-09-09 16:17:37 · 784 阅读 · 0 评论