![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
2.12 数据结构与算法
关于数据结构和算法的学习记录,刷题记录
哲学的天空
这个作者很懒,什么都没留下…
展开
-
数据结构与算法学习笔记六: 算法设计 - 动态规划
Dynamic programming (DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 由上可知: 动态规划算法的核心就是记住已经解决过的子问题的解;而记住求解的方式有两种: 自顶向下的备忘录法。 自低向上。 自顶向下的备忘录法:斐波那契数列求解中运用动态规划 ...原创 2020-06-21 20:34:20 · 188 阅读 · 0 评论 -
数据结构与算法学习笔记五:算法设计 - 回溯
回溯算法实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标,但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 图的广度优先搜索DFS的实现就是借助了回溯算法的思想,除此之外很多经典的数学问题都可以运用回溯算法来解决比如数独、八皇后、0-1背包等等。 ...原创 2020-06-21 20:16:13 · 134 阅读 · 0 评论 -
数据结构与算法学习笔记四:算法设计 - 分治
分治,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 分治和递归的区别: 分治算法是一种处理问题的思想,递归是一种编程技巧。在实际情况中,分治算法大都采用递归来实现,并且用递归实现的分治算法的基本步骤为: 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题; 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题; 合原创 2020-06-21 20:01:06 · 221 阅读 · 0 评论 -
数据结构与算法学习笔记三:算法设计 - 贪心
贪心算法(greedy algorithm),又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。贪心算法在有最优子结构的问题中尤为有效。 看这个算法的名字:贪心,贪婪,两个字的含义最关键,好像一个贪婪的人所有事情都只想到眼前,看不到长远,也不为最终的结果和将来着想,贪图眼前局部的利益最大化,接下来我们看几个关于贪心算法的案例情形。 从这里我们能简单总结出贪心原创 2020-06-21 19:31:24 · 206 阅读 · 0 评论 -
数据结构与算法学习笔记二: 排序算法
最经典最常用的排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、计数排序、桶排序、基数排序。 在这些排序算法中如果按照时间复杂度来分类大致可分为三类: O(n^2): 冒泡排序、选择排序、插入排序。 O(n*logn): 归并排序、快速排序、希尔排序。 O(n): 计数排序、基数排序、桶排序。 学习这么多的排序算法,除了了解其原理、实现其代码外还要评判出各种排序算法之间性能、效率。 评判排序算法好坏的标准 对于众多的排序算法我们要将它们做一个对比需要从如下三个方面着手:时间复原创 2020-06-21 18:08:20 · 271 阅读 · 0 评论 -
数据结构与算法学习笔记一: 时间复杂度空间复杂度
这篇主要讲解时间复杂度、空间复杂度概念。 复杂度分析 数据结构和算法解决的是“快”和“省”的问题。即如何让代码运行的更快,如何让代码更省存储空间。因此代码的执行效率是一个非常重要的考量指标,那如何来衡量代码的执行效率呢?我们可以用时间复杂度、空间复杂度来对代码的执行效率、性能进行评估,也就是算法的复杂度分析。 算法的复杂度分析主要包含两个方面: 时间复杂度分析 空间复杂度分析 为什么要进行复杂度分析? 1.和性能测试相比,复杂度分析不依赖执行环境、成本低、效率高、易操作、指导性强的特点。 2原创 2020-06-21 10:09:56 · 292 阅读 · 0 评论 -
数据结构与算法学习笔记:前言
记录数据结构与算法学习原创 2020-06-21 09:55:38 · 123 阅读 · 0 评论