並行算法庫清單: 附各算法代碼實例!

2020-11-23 IT168

  【IT168 資訊】並行算法採用並行程式語言NESL實現,該語言是卡內基梅隆大學Scandal項目中開發的一種程式語言。對於每個算法,團隊給出了一個簡短的描述以及複雜性評估(就工作和深度而言)。

  在很多情況下,NESL代碼已經設置完畢,可以使用FORMs基本接口來運行算法。隨意更改數據或算法,並提交修改後的版本。請注意,一些算法已經規定了對輸入的限制(例如必須是均勻的)。


  注意:本文涉及的一些功能描述和文檔非常簡潔,但都是可以正常工作的。(原文地址:https://www.cs.cmu.edu/~scandal/nesl/algorithms.html#scan,所有代碼示例均可點擊進入原文查看)

  並行算法序列和字符串:

  ·Scan (prefix sums)

  ·List ranking

  ·Sorting

  ·Merging

  ·Medians

  ·Searching

  ·String matching

  ·Other string operations

  並行算法的樹和圖:

  ·Trees

  ·Connected components

  ·Spanning trees

  ·Shortest paths

  ·Maximal independent set

  ·Graph separators

  計算幾何的並行算法:

  ·Convex hull

  ·Closest pairs

  ·Delaunay triangulation

  數值/科學計算的並行算法

  ·Fourier transform

  ·Dense matrix operations

  ·Sparse matrix operations

  ·N-body code

  ·Other

  Scan

  Scan操作(也稱為all-prefix-sum)採用二元聯合運算符作為標識函數和arry,並返回一個新數組,其中每個元素具有所有先前元素的總和(sum是相對於關聯運算符定義的)。例如

  scan(+, 0, [2, 8, 9, -4, 1, 3, -2, 7]);

  是

  [0, 2, 10, 19, 15, 16, 19, 17]

  算法

  ·Tree Scan

  List Ranking

  List ranking需要一個連結列表,並返回列表中每個元素的位置。位置給出了距列表尾部的距離。使用整數數組表示列表,其中每個整數表示列表中下一個元素的索引。我們用自指針終止列表。 例如,數組

  [2, 5, 1, 3, 7, 6, 6, 3]

  代表以下兩列:

  0 -> 2 -> 1 -> 5 -> 6

  4 -> 7 -> 3

  算法:

  ·Wyllie

  ·Random Mate

  ·Sorting

  有許多並行排序算法。這裡給出了一些示例。

  算法

  ·Quicksort

  ·Selection sort

  ·Insertion sort

  ·Counting sort

  ·Batcher's Bitonic Sort

  ·Radix Sort

  ·String Radix Sort

  Merging算法:

  ·Batcher's Odd-Even Merge

  ·Halving Merge

  Medians

  這裡考慮找到一個集合中第k個最小元素的問題。眾所周知,這個問題可以在O(n)時間序列內解決。在這裡考慮的兩個算法都需要O(n)的工作,雖然第一個是預期的情況,第二個是高概率。

  算法

  ·Quick Select

  ·Sample Select

  Searching算法:

  ·Hash Tables

  String Matching

  字符串匹配問題需要一個TEXT字符串和一個PATTERN字符串,並查找模式在文本中出現的所有位置。

  算法:

  ·Naive algorithm

  ·Vishkin algorithm

  其他字符串

  這裡考慮字符串的各種操作,比如按字母順序比較兩個字符串,將一串字符分解成幾行,然後再匹配括號。

  算法

  ·String comparison

  ·breaking a string into lines

  ·Matching Parentheses

  樹算法:

  ·Generate Euler tour from edgelist

  ·Rootfix (e.g. for level numbering)

  ·Leaffix (e.g. for subtree sizes)

  連接組件

  連接組件問題採用無向圖,並返回所有通過邊連接的組件。對於一個有n個頂點和m條邊的圖,這個問題可以用O(n + m)時間順序地使用深度優先搜索或寬度優先搜索來解決,並行算法是基於收縮圖的思想。

  算法

  ·Awerbuch Shiloach

  ·Random mate

  ·Hybrid

  生成樹

  生成樹算法與連接組件類似,但生成樹算法需要跟蹤哪些邊用於收縮,而不需要將圖擴展回去。

  算法

  ·Hybrid based Spanning Tree

  短路徑算法:

  ·Breadth First Search

  最大獨立集算法:

  ·Luby's Algorithm

  圖劃分算法:

  ·Spectral

  ·Recursive bisection

  ·Teng/Vavasis/Miller

  Convex Hull算法:

  ·Jarvis March

  ·Quickhull

  ·Kirkpatrick-Seidel

  ·Overmar's Mergehull

  ·Atallah's variant of Overmar's Mergehull (O(lg n) time)

  Closest Pairs算法:

  ·All closest pairs

  Delaunay Triangulation算法:

  ·Projection based

  ·Closest pair based

  Fourier Transform算法:

  ·Fast Fourier transform

  Dense Matrix Operations算法:

  ·Matrix multiply

  ·Matrix inverse

  ·Linear system solve

  ·Null space of matrix

  Sparse Matrix Operations算法:

  ·Matrix-vector multiply

  ·Jacobi

  ·Conjugate gradient

  N-body Code算法:

  ·All pairs

  ·Barnes-Hut

  ·Greengard's FMM

  ·PMTA (a hybrid)

  其他數值編碼算法:

  ·prime numbers

  ·adaptive integration

  ·line fitting

  ·order-m recurrences

  ·Tree based preconditioner

相關焦點

  • 並行算法計算微波電路的
    二、Diakoptics的概念Diakoptics定義為:將一個電路分解為若干個較為簡單的子電路,獨立計算子電路的特性,通過連接條件將子電路耦合連接.線性電路理論中子電路的特性用衝擊響應函數表示;子電路間的耦合通過串行和並行兩種算法完成.串行算法是從電路首尾中的任一端開始向另一端連接,依次將從參考面看入的子電路視為前一級子電路的負載,求出等效的子電路的輸入特性
  • 一種計算微波電路的並行算法
    FDTD-Diakoptics將複雜的微波電路分割為若干較為簡單的子電路,使用有限時域差分方法(FDTD)獨立求解每個子電路的時域特性,使用並行算法連接各子電路,最終得到整個電路的特性.本方法適用於結構複雜、規模較大的微波電路的分析設計,與整個電路使用FDTD進行設計研究的方法比較,本算法在保證相同數值精度的條件下可以提高計算效率五倍左右
  • MATLAB數學建模(十一) | 人工蜂群算法(附MATLAB代碼)
    新來的小夥伴可在公眾號後臺回復 代碼,即可提取一整套高質量智能優化算法的MATLAB代碼。https://www.bilibili.com/video/BV1Ka4y1H7r7後臺有很多小夥伴留言說想學習一下人工蜂群算法(artificial bee colony,ABC),所以今天我們為各位講解ABC,讓各位小夥伴能夠快速掌握這種算法。
  • 機器學習算法一覽(附python和R代碼)
    原標題:機器學習算法一覽(附python和R代碼) 寫這篇文章的目的,就是希望它可以讓有志於從事數據科學和機器學習的諸位在學習算法的路上少走些路。我會在文章中舉例一些機器學習的問題,你們也可以在思考解決這些問題的過程中得到啟發。我也會寫下對於各種機器學習算法的一些個人理解,並且提供R和Python的執行代碼。讀完這篇文章,讀者們至少可以行動起來親手試試寫一個機器學習的程序。
  • Python入門5大機器學習算法(附代碼),你知道哪幾個?
    Python也很受開發人員的歡迎,因為它允許開發人員創建交互式,可解釋式性,模塊化,動態,可移植和高級的代碼,這使得它比Java語言更獨特。下面我們看下Python的5個機器學習算法(附代碼)1、線性回歸線性回歸通常用於根據連續變量估計實際數值(房價、呼叫次數、總銷售額等)。
  • 港中文開源視頻動作分析庫MMAction,目標檢測庫算法大更新
    機器之心報導參與:李亞洲、杜偉昨日,香港中文大學多媒體實驗室(MMLab)OpenMMLab 發布動作識別和檢測庫 MMAction,同時也對去年發布的目標檢測工具箱 mmdetection 進行了升級,提供了一大批新的算法實現。
  • 人工蜂群算法詳解(附代碼下載)
    一個由蜂群行為啟發的算法!本文主要內容:1. 什麼是人工蜂群算法?人工蜂群算法是模仿蜜蜂行為提出的一種優化方法,是集群智能思想的一個具體應用,它的主要特點是不需要了解問題的特殊信息,只需要對問題進行優劣的比較,通過各人工蜂個體的局部尋優行為,最終在群體中使全局最優值突現出來,有著較快的收斂速度。
  • 機器學習算法基礎(使用Python代碼)
    我提供了對各種機器學習算法的高級理解以及運行它們的R&Python代碼。這些應該足以弄髒你的手。線性回歸主要有兩種類型:簡單線性回歸和多元線性回歸。簡單線性回歸的特徵在於一個自變量。而多元線性回歸(顧名思義)的特徵是多個(超過1個)的自變量。在找到最佳擬合線時,可以擬合多項式或曲線回歸。這些被稱為多項式或曲線回歸。
  • 神經網絡算法原理_神經網絡算法的應用_神經網絡算法實例說明
    神經網絡是一種模擬人腦結構的算法模型。其原理就在於將信息分布式存儲和並行協同處理。雖然每個單元的功能非常簡單,但大量單元構成的網絡系統就能實現非常複雜的數據計算,並且還是一個高度複雜的非線性動力學習系統。   神經網絡的結構更接近於人腦,具有大規模並行、分布式存儲和處理、自組織、自適應和自學能力。
  • 【算法系列】凸優化的應用——Python求解優化問題(附代碼)
    無約束優化問題含等式約束的優化問題含不等式約束的優化問題針對以上三種情形,各有不同的處理策略:無約束的優化問題:可直接對其求導,並使其為0,這樣便能得到最終的最優解;含等式約束的優化問題:主要通過拉格朗日乘數法將含等式約束的優化問題轉換成為無約束優化問題求解;含有不等式約束的優化問題:主要通過KKT條件(Karush-Kuhn-Tucker Condition
  • KNN分類算法的python實現
    前言 K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:在特徵空間中,如果一個樣本附近的k個最近(即特徵空間中最鄰近)樣本的大多數屬於某一個類別,則該樣本也屬於這個類別。。
  • 附代碼|OpenCV實現銀行卡號識別,字符識別算法你知多少?
    1、模板匹配字符識別算法。模板匹配字符識別算法是圖像識別中的經典算法之一,該算法的核心思想是:通過比較待識別字符圖像的字符特徵和標準模板的字符特徵,計算兩者之間的相似性,相似性最大的標準模板的字符即為待識別的字符。
  • 一文讀懂遺傳算法工作原理(附Python實現)
    原標題:一文讀懂遺傳算法工作原理(附Python實現) 選自AnalyticsVidhya 參與:晏奇、黃小天那麼首先我們來快速瀏覽一下 TPOT 庫(Tree-based Pipeline Optimisation Technique,樹形傳遞優化技術),該庫基於 scikit-learn 庫建立。下圖為一個基本的傳遞結構。
  • 性能提升30%以上,實時實例分割算法SOLOv2實現產業SOTA
    本文介紹了產業 SOTA 的實時實例分割算法 SOLOv2。目標檢測無法精細獲得目標邊界形狀和面積,語義分割無法區分不同目標個體,並分別獲得位置。小夥伴們可能會疑惑,以上動圖展示的實例分割效果顯然兼具了目標檢測和語義分割二者的能力,是通過什麼技術實現的呢?下面給大家介紹的這類相當牛氣的方法:實時實例分割算法 SOLOv2!
  • 【乾貨】機器學習最常用優化之一——梯度下降優化算法綜述
    【新智元導讀】梯度下降算法是機器學習中使用非常廣泛的優化算法,也是眾多機器學習算法中最常用的優化方法。幾乎當前每一個先進的(state-of-the-art)機器學習庫或者深度學習庫都會包括梯度下降算法的不同變種實現。
  • 28335DSP的FFT算法時間
    算法內需要4次計算FFT,而FFT時間是整個算法最耗時的部分。因此,需要對FFT的算法時間進行測試。 FFT算法實現有2種方案,一種是直接根據FFT原理編寫代碼實現,另一種是利用TI公司的FFT庫函數實現。 第1種方案直接利用例程中的FFT代碼,如下圖,它是根據FFT算法原理利用3重循環實現的:
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    為什麼算法會確定這些客戶屬於該組,而那些客戶屬於該組?這是需要我們非常豐富的經驗以及非常了解業務的人員的任務。他們將查看數據,嘗試分析每個類別中的一些項目並嘗試猜測一些條件。然後,將在找到有效模式後進行推斷。當我們獲得新客戶時會發生什麼?我們必須將該客戶放入我們已經擁有的一個集群中,因此我們可以通過算法來運行有關該客戶的數據,該算法將使我們的客戶放入一個集群。
  • 人工智慧算法:訓練神經網絡中的批量歸一化(附代碼)
    對於那些熟悉BN技術並且只想專注於實現的人,可以跳到下面的「代碼」部分。定義批處理規範化是一種技術,它通過引入一個附加層來減輕神經網絡中不穩定梯度的影響,該附加層對來自前一層的輸入執行操作。第一步是導入工具和庫,這些工具和庫將用於實現或支持神經網絡的實現。所使用的工具如下:TensorFlow:一個用於實施,培訓和部署機器學習模型的開源平臺。
  • 電子郵件分類的最佳機器學習算法
    我們將使用scikit學習庫中的Gaussian-naivebayes算法對兩位作者的郵件進行分類。下面是你可以在任何python的ide上實現的python代碼,確保你的系統上安裝了所需的庫。隨機森林隨機森林是一種基於決策樹的集成監督學習算法。隨機森林用於回歸和分類任務。該算法的名字來源於隨機選擇的特徵。我們可以在我們的數據集上使用sklearn庫中的隨機森林算法:RandomForestClassifier。
  • 醫學信號與圖像處理算法中的並行化
    第二節將分析並行化醫學信號和圖像處理的一些思路,在第三節中會給出一些應用實例。  二、 醫學信號與圖像處理的並行化設計思路  隨著帶有並行處理功能計算機的發展,大型科學與工程計算成為可能,使得科學技術作為科學研究的一種有效手段,已上升為與科學理論和科學實驗並重的三大科學方法之一。而且隨著計算機硬體、軟體及算法的進步,這種趨勢正在加強。