本文收集各种 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库:用于求解常微分方程的初值问题
其中分布函数包括:
Arcsine Distribution反正弦分布
Bernoulli Distribution伯努利分布
Beta Distribution Beta分布
Binomial Distribution二项分布
Cauchy-Lorentz Distribution柯西洛伦兹分布
Chi Squared Distribution卡方分布
Empirical Cumulative Distribution Function经验累积分布函数
Exponential Distribution指数分布
Extreme Value Distribution极值分配
F DistributionF分布
Gamma (and Erlang) Distribution伽玛(和Erlang)分布
Geometric Distribution几何分布
Hyperexponential Distribution超指数分布
Hypergeometric Distribution超几何分布
Inverse Chi Squared Distribution逆卡平方分布
Inverse Gamma Distribution逆伽马分布
Inverse Gaussian (or Inverse Normal) Distribution高斯逆分布(或正态逆分布)
Kolmogorov-Smirnov Distribution柯尔莫哥罗夫-斯米诺夫分布系
Laplace Distribution拉普拉斯分布
Logistic Distribution增长分布
Log Normal Distribution对数正态分布
Negative Binomial Distribution负二项分布
Noncentral Beta Distribution非中央Beta分布
Noncentral Chi-Squared Distribution非中心卡方分布
Noncentral F Distribution非中心F分布
Noncentral T Distribution非中心T分布
Normal (Gaussian) Distribution正态(高斯)分布
Pareto Distribution帕累托分布
Poisson Distribution泊松分布
Rayleigh Distribution瑞利分布
Skew Normal Distribution偏正态分布
Students t Distribution学生t-分布
Triangular Distribution三角分布
Uniform Distribution均匀分布
Weibull Distribution威布尔分布
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++算法涵盖了计算机科学,数学和统计学,数据科学,机器学习,工程等多个主题。
回溯
图形着色
骑士之旅
极小值
N皇后区
N Queens所有解决方案均已优化
Nqueen打印所有解决方案
老鼠迷宫
数独解决
位操作
汉明距离
密码
凯撒密码
希尔密码
摩尔斯电码
Vigenere密码
Xor密码
数据结构
AVL树
二进制搜索树
二进制搜索树2
二进制堆
使用链表的循环队列
循环链表
循环链表
循环链表
main cll
不相交集
双链表
链表
链表实现使用数组
列表数组
莫里森阶
队列
使用数组排队
使用Array2进行排队
使用链接列表排队
使用链表排队
使用两个堆栈进行排队
跳过清单
堆
使用数组堆叠
使用链表堆叠
测试队列
测试堆栈
考试堆栈学生
树
树234
特里现代
特里树
动态编程
0 1背包
阿姆斯特朗数
贝尔曼·福特(Bellman Ford)
加泰罗尼亚语数字
硬币找零
硬币找零自上而下
切杆
编辑距离
鸡蛋丢拼图
斐波那契自下而上
弗洛伊德·沃沙尔(Floyd Warshall)
kadane
kadane 2
最长的普通琴弦
最长公共子序列
最长递增子序列
最长递增子序列(Nlogn).cpp)
最长回文序列
矩阵链乘法
回文分区
动态数组中元素的搜索
最短的通用超序列
树高
断字
几何学
Jarvis算法
线段相交
图形
双向最短路径算法
广度优先搜索
无向图所有割边的Tarjan算法
连接的组件
使用Dsu连接组件
循环检查有向图
深度优先搜索
深度优先搜索堆栈
迪克斯特拉
汉密尔顿周期
霍普克罗夫特·卡普(Hopcroft Karp)
图是二分图的吗
Kosaraju
克鲁斯卡尔
最低共同祖先
福特·富尔克森和埃德蒙·卡普·阿尔戈
原始
拓扑排序
拓扑排序按Kahns Algo
图形学
旋描仪
贪婪算法
迪克斯特拉
霍夫曼
跳跃游戏
背包
Kruskals最小生成树
Prims最小生成树
散列
链式
双哈希哈希表
线性探测哈希表
二次探测哈希表
线性代数
克·施密特(Gram Schmidt)
机器学习
Adaline学习
Kohonen Som拓扑
Kohonen Som Trace
神经网络
普通最小二乘回归器
矢量操作
数学
阿姆斯特朗数
二元指数
二项式计算
检查友好对
检查阶乘
检查Prime
复数
双阶乘
欧拉Totient功能
扩展欧几里得算法
阶乘
快速电源
斐波那契
斐波那契快速
斐波那契大
斐波那契矩阵求幂
斐波那契总和
Gcd迭代欧几里得
N个数字的Gcd
Gcd递归欧几里得
大阶乘
大数字
最大功率
Lcm总和
最小公倍数
幻数
米勒·拉宾(Miller Rabin)
模块化部门
模幂
模逆费马小定理
N选择R
Ncr模数P
正除数的数量
大量数字的力量
二的力量
素因数分解
质数
灌注至十亿
实时统计
Eratosthenes筛
平方双
弦斐波那契
二项式系数之和
数字总和
矢量叉积
数值方法
二等分法
布伦特方法极值
杜兰德·克纳(Durand Kerner Roots)
错误的位置
高斯消除
黄金搜索极值
卢分解
卢分解
牛顿拉夫森法
颂歌前奏欧拉
颂德中点欧拉
颂德半隐式欧拉
Qr分解
Qr分解
Qr本征值
龙格库塔
逐次逼近
数据结构操作
阵列左旋转
阵列向右旋转
通报链表
使用数组的循环队列
获取链接列表的大小
2个数组的交集
使用撤消反向链接列表
选择排序链表
尝试多重搜索
2个数组的并集
其他
蜂鸣号
十进制到二进制
十进制到十六进制
十进制到罗马数字
快速整数输入
快乐号码
矩阵求幂
数字回文
肢体匹配
帕斯卡三角形
后缀评估
原始性测试
最小圆
稀疏矩阵
螺旋印花
楼梯图案
河内塔
向量重要功能
可能性
加法规则
贝叶斯定理
二项式距离
泊松区
范围查询
芬威克树
重光分解
莫
持久的Seg树懒惰支柱
赛格特里
稀疏表
搜索
二元搜寻
指数搜索
斐波那契搜索
哈希搜索
插值搜索
插值搜索2
跳转搜索
线性搜寻
中位数搜索
鞍背搜索
三元搜索
文字搜寻
排序
珠子排序
双音排序
宝高排序
气泡排序
桶分类
鸡尾酒选择排序
梳状排序
计数反转
计数排序
计数排序字符串
循环排序
侏儒排序
堆排序
插入排序
图书馆排序
合并插入排序
合并排序
非递归合并排序
数字字符串排序
奇偶排序
薄煎饼排序
鸽眼排序
快速排序
快速排序3
基数排序
基数排序2
选择排序
贝壳排序
壳牌Sort2
慢排序
链排序
掉期排序
蒂姆·索特(Tim Sort)
摆动排序
字符串
蛮力字符串搜索
霍斯浦
克努斯·莫里斯·普拉特(Knuth Morris Pratt)
拉宾·卡普(Rabin Karp)
参考链接:C/C++ 开源算法库