本文收集各種 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++ 開源算法庫
