當前位置:首頁 » 操作系統 » 質散的演算法

質散的演算法

發布時間: 2024-02-04 09:11:31

『壹』 質因數分解演算法

數學中,整數分解(素因數分解)問題是指:給出一個正整數,將其寫成幾個約數的乘積。例如,給出45這個數,它可以分解成32 ×5。根據算術基本定理,這樣的分解結果應該是獨一無二的。這個問題在代數學、密碼學、計算復雜性理論和量子計算機等領域中有重要意義。
2005年,作為公共研究一部分的有663個二進制數位之長的RSA-200已經被一種一般用途的方法所分解。

如果一個大的,有n個二進制數位長度的數是兩個差不多大小相等的約數的乘積,現在還沒有很好的演算法來以多項式時間復雜度分解它。

這就意味著沒有已知演算法可以在O(nk)(k為常數)的時間內分解它。但是現在的演算法也是比Θ(en)快的。換句話說,現在我們已知最好的演算法比指數數量級時間要快,比多項式數量級時間要慢。已知最好的漸近線運行時間是普通數域篩選法(GNFS)。時間是:

對於平常的計算機,GNFS是我們已知最好的對付n個二進制數位大約數的方法。不過,對於量子計算機, 彼得·秀爾在1994年發現了一種可以用多項式時間來解決這個問題的演算法。如果大的量子計算機建立起來,這將對密碼學有很重要的意義。這個演算法在時間上只需要O(n3),空間只要O(n)就可以了。 構造出這樣一個演算法只需要2n量子位。2001年,第一個7量子位的量子計算機第一個運行這個演算法,它分解的數是15

如果想獲得最新消息,請你上wikipedia網路,英文版。

『貳』 10個常用演算法

原理:
二分法查找,也稱為折半法,是一種在有序數組中查找特定元素的搜索演算法。

一般步驟:
(1)確定該區間的中間位置K;
(2)將查找的值T與array[k]比較。
若相等,查找成功返回此位置;否則確定新的查找區域,繼續二分查找。每一次查找與中間值比較,可以確定是否查找成功,不成功當前查找區間將縮小一半,遞歸查找即可。

原理:
一種通過重復將問題分解為同類的子問題而解決問題的方法

典型例子:
斐波那契數列
描述: 斐波那契數列 指的是這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368.....自然中的斐波那契數列") 自然中的斐波那契數列,這個數列從第3項開始,每一項都等於前兩項之和。

解決方式:

原理:
在搜索嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就「回溯」返回,嘗試別的路徑。
回溯法是一種選優搜索法,按選優條件向前搜索,以達到目標。
但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為「回溯點」。

解決問題一般步驟:
1、 針對所給問題,定義問題的解空間,它至少包含問題的一個(最優)解。

2 、確定易於搜索的解空間結構,使得能用回溯法方便地搜索整個解空間 。

3 、以深度優先的方式搜索解空間,並且在搜索過程中用剪枝函數避免無效搜索。

典型例子:
八皇後問題
描述:在8×8格的國際象棋上擺放八個皇後,使其不能互相攻擊,即任意兩個皇後都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

解決方式: https://blog.csdn.net/weixin_41865447/article/details/80034433

概念:
將雜亂無章的數據元素,通過一定的方法按關鍵字順序排列的過程叫做排序。

分類:
非穩定排序演算法:快速排序、希爾排序、堆排序、直接選擇排序
穩定的排序演算法:基數排序、冒泡排序、直接插入排序、折半插入排序、歸並排序

十個常用排序演算法

利用計算機的高性能來有目的的窮舉一個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。

分類:
枚舉演算法、深度優先搜索、廣度優先搜索、A*演算法、回溯演算法、蒙特卡洛樹搜索、散列函數等演算法。

將一個數據轉換為一個標志,這個標志和源數據的每一個位元組都有十分緊密的關系。

很難找到逆向規律

只要符合散列思想的演算法都可以被稱為是Hash演算法

對不同的關鍵字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),這種現象稱為 碰撞

原理
在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在 某種意義上的局部最優解
從問題的某一個初始解出發一步一步地進行,根據某個優化測度,每一步都要確保能獲得局部最優解。每一步只考慮一個數據,他的選取應該滿足局部優化的條件。若下一個數據和部分最優解連在一起不再是可行解時,就不把該數據添加到部分解中,直到把所有數據枚舉完,或者不能再添加演算法停止。

一種近似演算法

一般步驟:
1、建立數學模型來描述問題;
2、把求解的問題分成若干個子問題;
3、對每一子問題求解,得到子問題的局部最優解;
4、把子問題的解局部最優解合成原來解問題的一個解。

典型例子:
0/1背包問題
馬踏棋盤
均分紙牌

例題: https://www.cnblogs.com/hust-chen/p/8646009.html

概念:
分治演算法的基本思想是將一個規模為N的問題分解為K個規模較小的子問題,這些子問題相互獨立且與原問題性質相同。求出子問題的解,就可得到原問題的解。即一種分目標完成程序演算法,簡單問題可用二分法完成。

一般步驟:
(1)分解,將要解決的問題劃分成若干規模較小的同類問題;
(2)求解,當子問題劃分得足夠小時,用較簡單的方法解決;
(3)合並,按原問題的要求,將子問題的解逐層合並構成原問題的解。

典型例子:
排序中:歸並排序、堆排序、快速排序;
實例:找偽幣、求最值、棋盤覆蓋

https://ke..com/item/%E5%88%86%E6%B2%BB%E7%AE%97%E6%B3%95/3263297

概念:
用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。

動態規劃一般可分為線性動規,區域動規,樹形動規,背包動規四類。

舉例:
線性動規:攔截導彈,合唱隊形,挖地雷,建學校,劍客決斗等;
區域動規:石子合並, 加分二叉樹,統計單詞個數,炮兵布陣等;
樹形動規:貪吃的九頭龍,二分查找樹,聚會的歡樂,數字三角形等;
背包問題:01背包問題,完全背包問題,分組背包問題,二維背包,裝箱問題,擠牛奶(同濟)等;

應用實例:
最短路徑問題 ,項目管理,網路流優化等;

https://ke..com/item/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/529408?fromtitle=%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%AE%97%E6%B3%95&fromid=15742703&fr=aladdin

概念:
在一個給定的字元文本內搜尋出自己想要找的一個字元串,平常所用的各種文本編輯器里的ctrl+F大多就是使用的這些字元匹配演算法。

分類:
KMP、BM、Sunday、Horspool、RK

參考:
https://cloud.tencent.com/developer/news/282694
https://blog.csdn.net/paincupid/article/details/81159320

『叄』 數據挖掘的十大經典演算法,總算是講清楚了,想提升自己的趕快收藏

一個優秀的數據分析師,除了要掌握基本的統計學、數據分析思維、數據分析工具之外,還需要掌握基本的數據挖掘思想,幫助我們挖掘出有價值的數據,這也是數據分析專家和一般數據分析師的差距所在。

國際權威的學術組織the IEEE International Conference on Data Mining (ICDM) 評選出了數據挖掘領域的十大經典演算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.

不僅僅是選中的十大演算法,其實參加評選的18種演算法,實際上隨便拿出一種來都可以稱得上是經典演算法,它們在數據挖掘領域都產生了極為深遠的影響。今天主要分享其中10種經典演算法,內容較干,建議收藏備用學習。

1. C4.5

C4.5演算法是機器學習演算法中的一種分類決策樹演算法,其核心演算法是ID3演算法. C4.5演算法繼承了ID3演算法的優點,並在以下幾方面對ID3演算法進行了改進:

1) 用信息增益率來選擇屬性,克服了用信息增益選擇屬性時偏向選擇取值多的屬性的不足;

2) 在樹構造過程中進行剪枝;

3) 能夠完成對連續屬性的離散化處理;

4) 能夠對不完整數據進行處理。

C4.5演算法有如下優點:產生的分類規則易於理解,准確率較高。其缺點是:在構造樹的過程中,需要對數據集進行多次的順序掃描和排序,因而導致演算法的低效(相對的CART演算法只需要掃描兩次數據集,以下僅為決策樹優缺點)。

2. The k-means algorithm 即K-Means演算法

k-means algorithm演算法是一個聚類演算法,把n的對象根據他們的屬性分為k個分割,k < n。它與處理混合正態分布的最大期望演算法很相似,因為他們都試圖找到數據中自然聚類的中心。它假設對象屬性來自於空間向量,並且目標是使各個群組內部的均 方誤差總和最小。

3. Support vector machines

支持向量機,英文為Support Vector Machine,簡稱SV機(論文中一般簡稱SVM)。它是一種監督式學習的方法,它廣泛的應用於統計分類以及回歸分析中。支持向量機將向量映射到一個更 高維的空間里,在這個空間里建立有一個最大間隔超平面。在分開數據的超平面的兩邊建有兩個互相平行的超平面。分隔超平面使兩個平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。一個極好的指南是C.J.C Burges的《模式識別支持向量機指南》。van der Walt 和 Barnard 將支持向量機和其他分類器進行了比較。

4. The Apriori algorithm

Apriori演算法是一種最有影響的挖掘布爾關聯規則頻繁項集的演算法。其核心是基於兩階段頻集思想的遞推演算法。該關聯規則在分類上屬於單維、單層、布爾關聯規則。在這里,所有支持度大於最小支持度的項集稱為頻繁項集,簡稱頻集。

5. 最大期望(EM)演算法

在統計計算中,最大期望(EM,Expectation–Maximization)演算法是在概率(probabilistic)模型中尋找參數最大似然 估計的演算法,其中概率模型依賴於無法觀測的隱藏變數(Latent Variabl)。最大期望經常用在機器學習和計算機視覺的數據集聚(Data Clustering)領域。

6. PageRank

PageRank是Google演算法的重要內容。2001年9月被授予美國專利,專利人是Google創始人之一拉里·佩奇(Larry Page)。因此,PageRank里的page不是指網頁,而是指佩奇,即這個等級方法是以佩奇來命名的。

PageRank根據網站的外部鏈接和內部鏈接的數量和質量倆衡量網站的價值。PageRank背後的概念是,每個到頁面的鏈接都是對該頁面的一次投票, 被鏈接的越多,就意味著被其他網站投票越多。這個就是所謂的「鏈接流行度」——衡量多少人願意將他們的網站和你的網站掛鉤。PageRank這個概念引自 學術中一篇論文的被引述的頻度——即被別人引述的次數越多,一般判斷這篇論文的權威性就越高。

7. AdaBoost

Adaboost是一種迭代演算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器 (強分類器)。其演算法本身是通過改變數據分布來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的准確率,來確定每個樣本的權 值。將修改過權值的新數據集送給下層分類器進行訓練,最後將每次訓練得到的分類器最後融合起來,作為最後的決策分類器。

8. kNN: k-nearest neighbor classification

K最近鄰(k-Nearest Neighbor,KNN)分類演算法,是一個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。

9. Naive Bayes

在眾多的分類模型中,應用最為廣泛的兩種分類模型是決策樹模型(Decision Tree Model)和樸素貝葉斯模型(Naive Bayesian Model,NBC)。 樸素貝葉斯模型發源於古典數學理論,有著堅實的數學基礎,以及穩定的分類效率。

同時,NBC模型所需估計的參數很少,對缺失數據不太敏感,演算法也比較簡單。理論上,NBC模型與其他分類方法相比具有最小的誤差率。 但是實際上並非總是如此,這是因為NBC模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,這給NBC模型的正確分類帶來了一定影響。在屬 性個數比較多或者屬性之間相關性較大時,NBC模型的分類效率比不上決策樹模型。而在屬性相關性較小時,NBC模型的性能最為良好。

10. CART: 分類與回歸樹

CART, Classification and Regression Trees。 在分類樹下面有兩個關鍵的思想。第一個是關於遞歸地劃分自變數空間的想法(二元切分法);第二個想法是用驗證數據進行剪枝(預剪枝、後剪枝)。在回歸樹的基礎上的模型樹構建難度可能增加了,但同時其分類效果也有提升。

參考書籍:《機器學習實戰》

『肆』 干貨 | 基礎機器學習演算法

本篇內容主要是面向機器學習初學者,介紹常見的機器學習演算法,當然,歡迎同行交流。

哲學要回答的基本問題是從哪裡來、我是誰、到哪裡去,尋找答案的過程或許可以借鑒機器學習的套路:組織數據->挖掘知識->預測未來。組織數據即為設計特徵,生成滿足特定格式要求的樣本,挖掘知識即建模,而預測未來就是對模型的應用。

特徵設計依賴於對業務場景的理解,可分為連續特徵、離散特徵和組合高階特徵。本篇重點是機器學習演算法的介紹,可以分為監督學習和無監督學習兩大類。

無監督學習演算法很多,最近幾年業界比較關注主題模型,LSA->PLSA->LDA 為主題模型三個發展階段的典型演算法,它們主要是建模假設條件上存在差異。LSA假設文檔只有一個主題,PLSA 假設各個主題的概率分布不變(theta 都是固定的),LDA 假設每個文檔和詞的主題概率是可變的。

LDA 演算法本質可以藉助上帝擲骰子幫助理解,詳細內容可參加 Rickjin 寫的《 LDA 數據八卦》文章,淺顯易懂,順便也科普了很多數學知識,非常推薦。

監督學習可分為分類和回歸,感知器是最簡單的線性分類器,現在實際應用比較少,但它是神經網路、深度學習的基本單元。

線性函數擬合數據並基於閾值分類時,很容易受雜訊樣本的干擾,影響分類的准確性。邏輯回歸(Logistic Regression)利用 sigmoid 函數將模型輸出約束在 0 到 1 之間,能夠有效弱化雜訊數據的負面影響,被廣泛應用於互聯網廣告點擊率預估。

邏輯回歸模型參數可以通過最大似然求解,首先定義目標函數 L ( theta ),然後 log 處理將目標函數的乘法邏輯轉化為求和邏輯(最大化似然概率 -> 最小化損失函數),最後採用梯度下降求解。

相比於線性分類去,決策樹等非線性分類器具有更強的分類能力,ID3 和 C4.5 是典型的決策樹演算法,建模流程基本相似,兩者主要在增益函數(目標函數)的定義不同。

線性回歸和線性分類在表達形式上是類似的,本質區別是分類的目標函數是離散值,而回歸的目標函數是連續值。目標函數的不同導致回歸通常基於最小二乘定義目標函數,當然,在觀測誤差滿足高斯分布的假設情況下,最小二乘和最大似然可以等價。

當梯度下降求解模型參數時,可以採用 Batch 模式或者 Stochastic 模式,通常而言,Batch 模式准確性更高,Stochastic 模式復雜度更低。

上文已經提到,感知器雖然是最簡單的線性分類器,但是可以視為深度學習的基本單元,模型參數可以由自動編碼( Auto Encoder )等方法求解。

深度學習的優勢之一可以理解為特徵抽象,從底層特徵學習獲得高階特徵,描述更為復雜的信息結構。例如,從像素層特徵學習抽象出描述紋理結構的邊緣輪廓特徵,更進一步學習獲得表徵物體局部的更高階特徵。

俗話說三個臭皮匠賽過諸葛亮,無論是線性分類還是深度學習,都是單個模型演算法單打獨斗,有沒有一種集百家之長的方法,將模型處理數據的精度更進一步提升呢?當然,Model Ensembe l就是解決這個問題。Bagging 為方法之一,對於給定數據處理任務,採用不同模型/參數/特徵訓練多組模型參數,最後採用投票或者加權平均的方式輸出最終結果。

Boosting為Model Ensemble 的另外一種方法,其思想為模型每次迭代時通過調整錯誤樣本的損失權重提升對數據樣本整體的處理精度,典型演算法包括 AdaBoost 、GBDT 等。

不同的數據任務場景,可以選擇不同的 Model Ensemble 方法,對於深度學習,可以對隱層節點採用 DropOut 的方法實現類似的效果。

介紹了這么多機器學習基礎演算法,說一說評價模型優劣的基本准則。欠擬合和過擬合是經常出現的兩種情況,簡單的判定方法是比較訓練誤差和測試誤差的關系,當欠擬合時,可以設計更多特徵來提升模型訓練精度,當過擬合時,可以優化特徵量降低模型復雜度來提升模型測試精度。

特徵量是模型復雜度的直觀反映,模型訓練之前設定輸入的特徵量是一種方法,另外一種比較常用的方法是在模型訓練過程中,將特徵參數的正則約束項引入目標函數/損失函數,基於訓練過程篩選優質特徵。

模型調優是一個細致活,最終還是需要能夠對實際場景給出可靠的預測結果,解決實際問題。期待學以致用! 作者 曉惑 本文轉自阿里技術,轉載需授權

熱點內容
腳本六要素 發布:2024-11-28 19:41:07 瀏覽:985
linuxoralce 發布:2024-11-28 19:39:51 瀏覽:607
4k存儲量 發布:2024-11-28 19:39:36 瀏覽:824
php動態鏈接 發布:2024-11-28 19:34:16 瀏覽:150
手機上的安卓系統在哪裡看 發布:2024-11-28 19:29:06 瀏覽:788
空調外機壓縮機聲音大 發布:2024-11-28 19:27:28 瀏覽:312
中國密碼箱哪裡的好 發布:2024-11-28 19:23:01 瀏覽:309
低配伺服器如何搭建網站 發布:2024-11-28 19:08:46 瀏覽:923
zenly為什麼不能下載安卓機 發布:2024-11-28 18:59:05 瀏覽:295
怎麼把輔助放入伺服器 發布:2024-11-28 18:53:06 瀏覽:598