共计 3463 个字符,预计需要花费 9 分钟才能阅读完成。
概述
该存储库是用 C++ 实现并根据 MIT License 获得许可的各种算法的开源实现的集合。
算法下载:
http://www.gitpp.com/peedan/cpp-dpqq
这些算法涵盖计算机科学、数学和统计学、数据科学、机器学习、工程等各种主题。其实现和相关文档旨在为教育工作者和学生提供学习资源。因此,人们可能会发现针对同一目标的不止一种实现,但使用不同的算法策略和优化。
特征
-
该存储库以最基本的通用语言之一 -C++ 提供了各种算法的实现。
-
详细记录的源代码和详细的解释为教育工作者和学生提供了宝贵的资源。
-
每个源代码都是使用 STL 类的原子代码,编译和执行不需要 外部库。因此,可以更深入地研究算法的基础知识。
-
分别使用 MSVC 19 2022、AppleClang 14.0.0 和 GNU 11.3.0 在三个主要操作系统(即 Windows、MacOS 和 Ubuntu (Linux))的最新版本上编译和测试源代码。
-
严格遵守 C ++11 标准可确保代码无需任何更改即可移植到嵌入式系统以及 ESP32、ARM Cortex 等。
-
程序内的自检可确保正确实施并充满信心。
-
模块化实现和开源许可使这些功能可以在其他应用程序中方便地使用。
回溯
-
生成括号
-
图形着色
-
骑士之旅
-
魔法序列
-
极小极大
-
北皇后区
-
N Queens 所有解决方案优化
-
Nqueen 打印所有解决方案
-
老鼠迷宫
-
子数组和
-
子集和
-
数独求解器
-
通配符匹配
位操作
-
计数翻转位
-
设置位数
-
阶乘 N 中的尾随密码计数
-
查找不重复的号码
-
汉明距离
-
具有相同设置位数的下一个更高的数字
-
2 的幂
-
设置第 K 位
-
使用位操作的旅行商
密码
-
A1Z26 密码
-
阿特巴什密码
-
Base64 编码
-
凯撒密码
-
椭圆曲线密钥交换
-
希尔密码
-
摩尔斯电码
-
Uint128 T
-
Uint256 T
-
维吉尼亚密码
-
异或密码
CPU 调度算法
-
Fcfs 调度
数据结构
-
阿维特里
-
二叉搜索树
-
二叉搜索树 2
-
二叉堆
-
布隆过滤器
-
使用链表的循环队列
-
氯
-
氯
-
氯
-
主室
-
不相交集
-
双向链表
-
Dsu 路径压缩
-
DSU 联盟排名
-
链表
-
使用数组实现链表
-
列表数组
-
莫里森顺序
-
节点
-
队列
-
使用数组进行队列
-
使用 Array2 进行队列
-
使用链表进行队列
-
使用链表进行队列
-
使用两个堆栈的队列
-
铷树
-
反转链表
-
线段树
-
跳过列表
-
稀疏表
-
堆
-
使用数组的堆栈
-
使用链表进行堆栈
-
使用队列的堆栈
-
测试队列
-
测试堆栈
-
测试堆栈学生
-
特雷普
-
树
-
树 234
-
现代特里
-
特里树
-
使用 Hashmap 的 Trie
分而治之
-
快速乘法的 Karatsuba 算法
-
施特拉森矩阵乘法
动态规划
-
0 1 背包
-
缩写
-
阿姆斯特朗数
-
贝尔曼·福特
-
加泰罗尼亚语号码
-
硬币找零
-
硬币找零自上而下
-
切棒
-
编辑距离
-
鸡蛋掉落拼图
-
斐波那契自下而上
-
弗洛伊德·沃歇尔
-
入室抢劫者
-
卡丹
-
卡丹 2
-
最长公共字符串
-
最长公共子序列
-
最长递增子序列
-
最长递增子序列 (Nlogn)
-
最长回文子序列
-
矩阵链乘法
-
最大循环子数组
-
最小编辑距离
-
回文分区
-
分区问题
-
动态数组中元素的搜索
-
最短公共超序列
-
子集和
-
树高
-
断词
游戏
-
记忆游戏
几何学
-
格雷厄姆扫描算法
-
格雷厄姆扫描函数
-
贾维斯算法
-
线段交点
图形
-
双向迪杰斯特拉
-
广度优先搜索
-
使用 Tarjan 算法寻找桥梁
-
连接组件
-
使用 Dsu 连接组件
-
循环检查有向图
-
深度优先搜索
-
使用堆栈进行深度优先搜索
-
迪克斯特拉
-
汉密尔顿循环
-
霍普克罗夫特·卡普
-
图是二分图吗
-
图是二分图吗 2
-
科萨拉茹
-
克鲁斯卡尔
-
最低共同祖先
-
Max Flow 与 Ford Fulkerson 和 Edmond Karp Algo
-
普里姆
-
拓扑排序
-
Kahns 算法的拓扑排序
-
旅行商问题
图形
-
螺旋描记器
贪心算法
-
Boruvkas 最小生成树
-
迪克斯特拉
-
霍夫曼
-
跳跃游戏
-
背包
-
Kruskals 最小生成树
-
Prims 最小生成树
散列
-
链接
-
双哈希哈希表
-
线性探测哈希表
-
MD5
-
二次探测哈希表
-
沙 1
-
沙 256
机器学习
-
明星搜索
-
阿达琳学习
-
K 最近邻
-
Kohonen Som 拓扑
-
科霍宁·索姆·跟踪
-
神经网络
-
普通最小二乘回归器
-
矢量行动
数学
-
等分总和
-
近似圆周率
-
区域
-
阿姆斯特朗数
-
二进制指数
-
二项式计算
-
检查友好配对
-
检查阶乘
-
检查总理
-
复数
-
双阶乘
-
埃拉托色尼
-
欧拉函数
-
扩展欧几里得算法
-
阶乘
-
快速供电
-
斐波那契
-
斐波那契快速
-
斐波那契大数
-
斐波那契矩阵求幂
-
斐波那契和
-
查找数字中的位数
-
Gcd 迭代欧几里得
-
N 个数字的 Gcd
-
Gcd 递归欧几里得
-
积分近似
-
积分近似 2
-
倒数平方
-
迭代阶乘
-
大阶乘
-
大数字
-
最大功率
-
总和
-
最小公倍数
-
线性递归矩阵
-
神奇数字
-
米勒·拉宾
-
模块化事业部
-
模幂
-
模逆费马小定理
-
模块化逆简单
-
N 博纳奇
-
N 选择 R
-
Ncr 模 P
-
正除数的数量
-
周长
-
为大数据提供动力
-
二的幂
-
质因数分解
-
质数
-
质数高达十亿
-
二次方程复数
-
实时统计
-
埃拉托斯特尼筛法
-
平方双
-
斐波那契字符串
-
二项式系数之和
-
数字总和
-
向量叉积
-
体积
数值方法
-
巴比伦方法
-
二分法
-
布伦特法极值
-
复合辛普森规则
-
杜兰德·克纳·鲁茨
-
错误位置
-
快速傅立叶变换
-
高斯消去法
-
黄金搜索极值
-
格拉姆·施密特
-
快速傅里叶逆变换
-
鲁分解
-
卢分解
-
中点积分法
-
牛顿拉夫逊法
-
欧拉前瞻颂
-
欧拉中点颂
-
颂半隐式欧拉
-
Qr 分解
-
Qr 分解
-
Qr 特征值
-
龙格库塔
-
逐次逼近
数据结构操作
-
数组左旋转
-
数组右旋转
-
循环链表
-
使用数组的循环队列
-
获取链接列表的大小
-
Bst 的有序后继者
-
两个数组的交集
-
使用递归反转链表
-
反向二叉树
-
选择排序链表
-
尝试多重搜索
-
两个数组的并集
其他的
-
嗡嗡声号码
-
十进制转二进制
-
十进制到十六进制
-
十进制转罗马数字
-
复活节
-
快速整数输入
-
快乐数
-
迭代树遍历
-
卡达内斯 3
-
开尔文 到 摄氏度
-
LRU 缓存
-
矩阵求幂
-
回文数
-
括号匹配
-
帕斯卡三角
-
后缀评估
-
素性测试
-
递归树遍历
-
最小圆
-
稀疏矩阵
-
螺旋印花
-
楼梯图案
-
河内塔
-
矢量重要函数
物理
-
地对地抛射运动
可能性
-
加法规则
-
贝叶斯定理
-
二项分布
-
几何距离
-
泊松区
-
窗口中位数
范围查询
-
芬威克树
-
重光分解
-
莫
-
持久 Seg Tree Lazy Prop
-
前缀和数组
-
塞格特里
-
稀疏表
搜索
-
二分查找
-
指数搜索
-
斐波那契搜索
-
Floyd 循环检测算法
-
哈希搜索
-
插值搜索
-
插值搜索 2
-
跳转搜索
-
线性搜索
-
中值搜索
-
中值搜索 2
-
马鞍峰搜索
-
子列表搜索
-
三元搜索
-
文本搜索
排序
-
珠子排序
-
二元插入排序
-
双调排序
-
波戈排序
-
冒泡排序
-
桶排序
-
鸡尾酒选择排序
-
梳排序
-
计数反转
-
计数排序
-
计算排序字符串
-
循环排序
-
dnf 排序
-
侏儒分类
-
堆排序
-
插入排序
-
图书馆排序
-
合并插入排序
-
归并排序
-
非递归归并排序
-
数字字符串排序
-
奇偶排序
-
煎饼排序
-
鸽巢排序
-
快速排序
-
快速排序 3
-
基数排序
-
基数排序 2
-
随机枢轴快速排序
-
递归冒泡排序
-
选择排序迭代
-
选择排序递归
-
希尔排序
-
希尔排序 2
-
慢排序
-
傀儡排序
-
链排序
-
交换排序
-
蒂姆·索特
-
波浪排序
-
摆动排序
弦乐
-
博耶·摩尔
-
暴力字符串搜索
-
霍斯普尔
-
高德纳·莫里斯·普拉特
-
马纳赫算法
-
拉宾·卡普
-
Z 功能
中国的互联网大厂赚的是广告的钱。
和其他软件公司不一样,软件公司赚的是技术钱,凭本事吃饭(很艰难)。
互联网大厂赚的是广告的钱还有游戏的钱,头条、腾讯、百度什么的。所以只有互联网大厂才能给员工百万年薪(因为赚钱容易),学计算机一定要去互联网大厂。算法是最核心的要求。为什么说算法能力是进入互联网大厂的核心能力?
提高算法能力是一个需要长期积累和不断实践的过程。以下是一些建议,可以帮助你提升算法能力:
-
刷题:解决算法问题最直接有效的方式就是刷题。可以选择在线刷题平台,如 LeetCode、LintCode、HackerRank 等,这些平台上有大量的算法题目,可以按照难度和主题进行筛选和练习。通过刷题,可以加深对各种算法和数据结构的理解,提高解决问题的能力和速度。
-
系统学习:掌握算法和数据结构的基本概念和原理是非常重要的。可以选择阅读经典的算法和数据结构教材,如《算法导论》、《数据结构与算法分析》等。同时,也可以参加相关的在线课程或培训,系统地学习算法的设计和分析方法。
-
参与竞赛:参加算法竞赛是锻炼算法能力的好方法。通过竞赛,可以接触到更高难度和更实际的算法问题,与其他优秀的算法爱好者交流和切磋。一些知名的算法竞赛包括 ACM/ICPC、Google Code Jam、Facebook Hacker Cup 等。
-
实际项目应用:将算法应用到实际项目中也是提高算法能力的有效途径。可以选择参与开源项目或自己动手做一些小项目,将所学的算法应用到实际问题中。通过实践,可以更好地理解算法的应用场景和限制,以及如何进行性能优化和调整。
-
阅读优秀代码:阅读优秀的算法代码可以学习到很多高级的算法思想和实现技巧。可以选择阅读一些开源项目或优秀算法库的源代码,理解其中的算法设计和实现方式。同时,也可以关注一些算法领域的博客或专栏,阅读专家们的算法分析和心得。
-
持续学习和总结:算法领域是一个不断发展和更新的领域,新的算法和技术不断涌现。因此,要保持持续学习的态度,关注最新的算法动态和发展趋势。同时,也要及时总结和反思自己的学习和实践经验,不断调整和改进自己的算法能力提升路径。
该存储库是用 C++ 实现并根据 MIT License 获得许可的各种算法的开源实现的集合。
算法下载:
http://www.gitpp.com/peedan/cpp-dpqq