算法与数据结构
算法是程序的灵魂,一个优秀的程序可以在海量数据依然保持高速计算依赖优秀的算法,一般我们使用内存计算框架比如(Spark),再或者使用缓存技术比如Redis来优化我们的程序,那么他们的核心到底是什么呢?
毫无疑问那就是算法,那么算法与数据结构又是什么关系呢?
1.数据结构是一门研究组织数据方式的学科,有了编程语言也就有了数据结构,数据结构可以让我们的代码更加高效。
2.数据结构是算法的基础,学好算法的前提是掌握数据结构。
友情提示:所以同学们在学习算法之前最好先把数据结构看一下
项目概述:
该存储库是在 C++ 中实现的各种算法的开源实现的集合,并在MIT 许可证下获得许可。这些算法涵盖了计算机科学、数学和统计学、数据科学、机器学习等各种主题。
算法举例:
回溯算法:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。
密码:包括Base64编码,希尔密码,摩尔斯电码,异或密码等。
分治算法:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。如用于快速乘法的 Karatsuba 算法。
动态规划:动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)如弗洛伊德算法,矩阵等。
几何学:几何算法常常出现在计算机图形学,大规模集成电路设计等方面,常常需要分析平面内点、线段、直线的关系,而其算法呢大多用到了归纳,分治等算法的思想。
图形:包括广度优先搜索,迪杰斯特拉算法,拓扑排序,旅行商问题等。
贪心算法:(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。如霍夫曼,迪杰斯特拉,背包问题等。
搜索算法:如二分查找,哈希搜索,线性搜索,三元搜索等。
排序算法:如冒泡排序,桶排序,堆排序,归并排序,快速排序,摆动排序等。
特征:
- 该存储库以最基本的通用语言之一 – C++提供各种算法的实现。
- 带有详细解释的详细记录的源代码为教育工作者和学生提供了宝贵的资源。
- 每个源代码是利用原子STL类和无外部库所需要的它们的编译和执行。因此,可以深入研究算法的基础知识。
- 严格遵守C++11标准确保代码可移植到嵌入式系统以及 ESP32、ARM Cortex 等,几乎没有变化。
- 模块化实施和开源许可使这些功能可以在其他应用程序中方便地使用。
文档:点击下载
文档中详细描述了各种算法的源代码,包括源码片段,程序执行流程,指向外部资源链接等,该文档还介绍了交互式源代码,包含指向C++STL库函数文档的链接。