本文收集各种 C 和 C++ 优质的科学计算算法开源代码库。数值优化的世界,这些算法库功能强大、快速、高效、优雅,拿去比较普通人编写的算法代码,会发现自己的代码卑贱的如同草芥蝼蚁一般。
1. GSL
GNU Scientific Library (GSL) 是一个用于科学计算的C/C ++ 语言类库。有超过1000个函数,算是比较全面。不过在某些方面还有不足,比如优化没有遗传算法,粒子群算法等,积分性能不如cuba。
函数包括:
- 复数
- 多项式的根
- 特殊功能
- 向量和矩阵
- 排列
- 排序
- BLAS支持
- 线性代数
- 特征系统
- 快速傅立叶变换
- 正交
- 随机数
- 拟随机序列
- 随机分布
- 统计数据
- 直方图
- n元组
- 蒙特卡洛积分
- 模拟退火
- 微分方程
- 插补
- 数值微分
- 切比雪夫逼近
- 系列加速
- 离散汉克尔变换
- 寻根
- 最小化
- 最小二乘拟合
- 物理常数
- IEEE浮点数
- 离散小波变换
- 基础样条
- 运行统计
- 稀疏矩阵和线性代数
2. Cuba
Cuba提供四种积分方法库,包含三种蒙特卡洛积分和一种精确积分。这几个方法的性能要好于GSL中提供的蒙特卡洛积分。
3. Boost
Boost 是为 C++ 语言标准库提供扩展的一些 C++ 程序库的总称。其中也包含了和科学计算有关的库。
数学和数字库包括:
-
Accumulators库:用于增量计算的累加器的框架
-
Integer库:提供一组有关整数处理的类
-
Interval库:处理区间概念的数学问题
-
Math库:数学领域的模板类和算法
-
Math Common Factor库:用于支持最大公约数和最小公倍数
-
Math/Special Functions库:数学上一些常用的函数
-
Math/Statistical Distributions库:用于单变量统计分布操作
-
Multi-Array库:多维容器
-
Numeric Conversion库:用于安全数字转换的一组函数
-
Operators库:允许用户在自己的类里仅定义少量的操作符,就可方便地自动生成其他操作符重载,而且保证正确的语义实现
-
Random库:专注于伪随机数的实现,有多种算法可以产生高质量的伪随机数
-
Rational库:实现了没有精度损失的有理数
-
uBLAS库:用于线性代数领域的数学库
-
Geometry库:用于解决几何问题的概念、原语和算法
-
Ratio库:根据C++ 0x标准N2661号建议,实现编译期的分数操作
-
Multiprecision库:提供比C++内置的整数、分数和浮点数精度更高的多精度数值运算功能
-
Odeint库:用于求解常微分方程的初值问题
其中分布函数包括:
Cauchy-Lorentz Distribution柯西洛伦兹分布
Empirical Cumulative Distribution Function经验累积分布函数
Extreme Value Distribution极值分配
Gamma (and Erlang) Distribution伽玛(和Erlang)分布
Hyperexponential Distribution超指数分布
Hypergeometric Distribution超几何分布
Inverse Chi Squared Distribution逆卡平方分布
Inverse Gamma Distribution逆伽马分布
Inverse Gaussian (or Inverse Normal) Distribution高斯逆分布(或正态逆分布)
Kolmogorov-Smirnov Distribution柯尔莫哥罗夫-斯米诺夫分布系
Negative Binomial Distribution负二项分布
Noncentral Beta Distribution非中央Beta分布
Noncentral Chi-Squared Distribution非中心卡方分布
Noncentral F Distribution非中心F分布
Noncentral T Distribution非中心T分布
4. Eigen
Eigen 是一个线性算术的C++模板库,包括:线性代数、矩阵、矢量运算、数值分析以及相关算法。功能强大、快速、优雅以及支持多平台。
5. MTL
Matrix Template Library(MTL)专注于线性代数相关的计算任务,如各种形式矩阵的生成(对角,共轭,稀疏,对称等),相关的计算,变换,以及与一维向量的运算。
6. FFTW
FFTW 是一个C语言的快速傅立叶变换库。它包括复杂的,真实,对称的,多层面的,和并行转换,并且可以处理任意大小的efficiently.It阵列通常比其他免费提供的FFT实现更快,更与供应商的调整库(基准可在网页查阅)竞争。为了实现这一性能,它使用新的代码生成和运行时的自我优化技术(以及许多其他的技巧)。
7. GAlib
GAlib遗传算法库,包含四种遗传算法,GAListGenome 链表形、GATreeGenome 树形、GAArrayGenome 数组形、GABinaryString 二进制串形。
8. libGeneiAL
libGeneiAL可扩展遗传算法库。它提供了一个框架,可通过使用自定义适应度函数在生成过程中最大化种群中染色体的适应度值来解决优化问题。该库为用户提供了高度的灵活性和可扩展性,同时还为核心功能提供了良好的可扩展性。
9. libfgen
libfgen是一个实现高效且可自定义的遗传算法(GA)的库。它还提供了粒子群优化(PSO)功能和用于实值函数最小化或模型拟合的接口。它是用C编写的,但是也可以使用C ++编译器进行编译。
特征
- 人口数量固定,可快速高效地实施通用Analytics(分析)。
- 具有多种选择,变异和交叉类型的可定制GA。
- 应用程序可以提供自定义的种子,变异和交叉运算符。
- 线程安全的,可以将多个线程用于适应度计算或并发遗传算法的群岛。
- 具有类似于GA的API的粒子群优化算法。
- 使用GA或PSO的高级易用模型拟合和功能最小化界面。
- 在真实数据集上进行了测试(系外行星的轨道与恒星径向速度数据的拟合)。
- 使用提供的文档清除HTML(html)。
- 提供了命令行和图形示例程序。
- 例子包括旅行商问题,线性遗传规划和纹理压缩。
10. C++ Wavelet Libraries
C++ Wavelet Libraries是C ++小波变换算法库专注于速度和易用性。
可用功能包括
- 一维DWT和IDWT实现(两种模式)
- 2DWT和IDWT的实现(两种模式)
- 一维SWT和ISWT实现(固定小波变换)
- 2D SWT实施
- 使用FFTW3库实现
11. KFilter
KFilter卡尔曼滤波器的开源算法库。提供了可配置的模板类。子类允许为过滤器定义不同的矩阵内容。卡尔曼滤波器在航空,机器人视觉和机器人技术中已经使用了一段时间。估计状态向量并通过使用从传感器获取的度量来校正估计是有用的。它的主要用途是用于跟踪或数据融合。
12. Dlib
Dlib主要为深度学习服务的算法库,包含深度学习相关的优化算法,也包含一些图形图像处理,主要为深度学习的实现服务。被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。
13. MRPT
Mobile Robot Programming Toolkit (MRPT)机器人编程算法库,主要是机器人相关的定位,计算机视觉图像处理,运动规划相关的算法。
14. Algorithms - C++
Algorithms - C++算法涵盖了计算机科学,数学和统计学,数据科学,机器学习,工程等多个主题。
回溯
位操作
密码
数据结构
- AVL树
- 二进制搜索树
- 二进制搜索树2
- 二进制堆
- 使用链表的循环队列
- 循环链表
- 不相交集
- 双链表
- 链表
- 链表实现使用数组
- 列表数组
- 莫里森阶
- 队列
- 使用数组排队
- 使用Array2进行排队
- 使用链接列表排队
- 使用链表排队
- 使用两个堆栈进行排队
- 跳过清单
- 堆
- 使用数组堆叠
- 使用链表堆叠
- 测试队列
- 测试堆栈
- 考试堆栈学生
- 树
- 树234
- 特里现代
- 特里树
动态编程
- 0 1背包
- 阿姆斯特朗数
- 贝尔曼·福特(Bellman Ford)
- 加泰罗尼亚语数字
- 硬币找零
- 硬币找零自上而下
- 切杆
- 编辑距离
- 鸡蛋丢拼图
- 斐波那契自下而上
- 弗洛伊德·沃沙尔(Floyd Warshall)
- kadane
- kadane 2
- 最长的普通琴弦
- 最长公共子序列
- 最长递增子序列
- 最长递增子序列(Nlogn).cpp)
- 最长回文序列
- 矩阵链乘法
- 回文分区
- 动态数组中元素的搜索
- 最短的通用超序列
- 树高
- 断字
几何学
图形
- 双向最短路径算法
- 广度优先搜索
- 无向图所有割边的Tarjan算法
- 连接的组件
- 使用Dsu连接组件
- 循环检查有向图
- 深度优先搜索
- 深度优先搜索堆栈
- 迪克斯特拉
- 汉密尔顿周期
- 霍普克罗夫特·卡普(Hopcroft Karp)
- 图是二分图的吗
- Kosaraju
- 克鲁斯卡尔
- 最低共同祖先
- 福特·富尔克森和埃德蒙·卡普·阿尔戈
- 原始
- 拓扑排序
- 拓扑排序按Kahns Algo
图形学
贪婪算法
散列
线性代数
机器学习
数学
- 阿姆斯特朗数
- 二元指数
- 二项式计算
- 检查友好对
- 检查阶乘
- 检查Prime
- 复数
- 双阶乘
- 欧拉Totient功能
- 扩展欧几里得算法
- 阶乘
- 快速电源
- 斐波那契
- 斐波那契快速
- 斐波那契大
- 斐波那契矩阵求幂
- 斐波那契总和
- Gcd迭代欧几里得
- N个数字的Gcd
- Gcd递归欧几里得
- 大阶乘
- 大数字
- 最大功率
- Lcm总和
- 最小公倍数
- 幻数
- 米勒·拉宾(Miller Rabin)
- 模块化部门
- 模幂
- 模逆费马小定理
- N选择R
- Ncr模数P
- 正除数的数量
- 大量数字的力量
- 二的力量
- 素因数分解
- 质数
- 灌注至十亿
- 实时统计
- Eratosthenes筛
- 平方双
- 弦斐波那契
- 二项式系数之和
- 数字总和
- 矢量叉积
数值方法
- 二等分法
- 布伦特方法极值
- 杜兰德·克纳(Durand Kerner Roots)
- 错误的位置
- 高斯消除
- 黄金搜索极值
- 卢分解
- 卢分解
- 牛顿拉夫森法
- 颂歌前奏欧拉
- 颂德中点欧拉
- 颂德半隐式欧拉
- Qr分解
- Qr分解
- Qr本征值
- 龙格库塔
- 逐次逼近
数据结构操作
其他
- 蜂鸣号
- 十进制到二进制
- 十进制到十六进制
- 十进制到罗马数字
- 快速整数输入
- 快乐号码
- 矩阵求幂
- 数字回文
- 肢体匹配
- 帕斯卡三角形
- 后缀评估
- 原始性测试
- 最小圆
- 稀疏矩阵
- 螺旋印花
- 楼梯图案
- 河内塔
- 向量重要功能
可能性
范围查询
搜索
排序
- 珠子排序
- 双音排序
- 宝高排序
- 气泡排序
- 桶分类
- 鸡尾酒选择排序
- 梳状排序
- 计数反转
- 计数排序
- 计数排序字符串
- 循环排序
- 侏儒排序
- 堆排序
- 插入排序
- 图书馆排序
- 合并插入排序
- 合并排序
- 非递归合并排序
- 数字字符串排序
- 奇偶排序
- 薄煎饼排序
- 鸽眼排序
- 快速排序
- 快速排序3
- 基数排序
- 基数排序2
- 选择排序
- 贝壳排序
- 壳牌Sort2
- 慢排序
- 链排序
- 掉期排序
- 蒂姆·索特(Tim Sort)
- 摆动排序
字符串
参考链接:C/C++ 开源算法库