精確演算法、啟發式演算法、元啟發式演算法及增長方式淺析
組合優化問題是通過用數學方法的研究去尋找離散事件的最優編排、分組、次序或篩選等,其變數是離散分佈的。對於結構化的組合優化問題,其解空間的規模能夠得到控制,對於這樣的問題,使用精確演算法就可以求得最優解。而當問題的規模逐漸增大時,求解這些問題最優解需要的計算量與儲存空間的增長速度非常快,會帶來所謂的“組合爆炸”,使得在現有的計算能力下,通過各種列舉方法、精確演算法尋找並獲得最優解幾乎變得不可能。這時候,啟發式演算法應運而生。下面詳細介紹這些演算法。
一、精確演算法(Exact Algorithm)
精確演算法是指能夠求出問題最優解的演算法。對於難解的組合優化問題,當問題的規模較小時,精確演算法能夠在可接受的時間內找到最優解;當問題的規模較大時,精確演算法一方面可以提供問題的可行解,另一方面可以為啟發式方法提供初始解,以便能搜尋到更好的解。
精確演算法主要包括分支定界法、割平面法、動態規劃法等。
二、啟發式演算法(Heuristic Algorithm)
啟發式演算法是指通過對過去經驗的歸納推理以及實驗分析來解決問題的方法,即藉助於某種直觀判斷或試探的方法,以求得問題的次優解或以一定的概率求其最優解。通用性、穩定性以及較快的收斂性是衡量啟發式演算法效能的主要標準。
啟發式演算法可分為傳統啟發式演算法和元啟發式演算法。傳統啟發式演算法包括構造型方法、區域性搜尋演算法、鬆弛方法、解空間縮減演算法等。
三、元啟發式演算法(Meta-heuristic Algorithm)
元啟發式演算法是啟發式演算法的改進,是隨機演算法與區域性搜尋演算法相結合的產物。元啟發式是一個迭代生成過程,通過對不同概念的智慧組合,該過程以啟發式演算法實現對搜尋空間的探索和開發。在這個過程中,學習策略被用來獲取和掌握資訊,以有效地發現近似最優解。
元啟發式演算法包括禁忌搜尋演算法、模擬退火演算法、遺傳演算法、蟻群優化演算法、粒子群優化演算法、人工魚群演算法、人工蜂群演算法、人工神經網路演算法等。
四、近似演算法(Approximate Algorithm)
近似演算法沒有嚴格的定義,一般來說能求出可行解的演算法都能歸為近似演算法。常見的近似演算法有貪婪演算法、區域性搜尋演算法、鬆弛演算法、動態規劃法等。
五、群智慧演算法
……以後再補
六、增長方式
目前能常見到的增長方式有:
線性增長:2n;
多項式增長:2n^3+3n^2+5n+1;
指數增長:2^n;
階乘增長:n!;
冪函式增長:n^3;
特殊:
-n^(-1),當n→0時,無限增長趨向於∞;
超級冪:E(n,a)=n^n^n^n……(a個n);
備註:本文部分內容來自《基於單點搜尋的元啟發式演算法》
相關推薦
精確演算法、啟發式演算法、元啟發式演算法及增長方式淺析
組合優化問題是通過用數學方法的研究去尋找離散事件的最優編排、分組、次序或篩選等,其變數是離散分佈的。對於結構化的組合優化問題,其解空間的規模能夠得到控制,對於這樣的問題,使用精確演算法就可以求得最優解。而當問題的規模逐漸增大時,求解這些問題最優解需要的計算量與儲存空
mysql批量查詢表、某個欄位註釋缺少問題及解決方式
在開發專案過程中,發現某些表或某個欄位沒有註釋,這樣造成以後維護性差,如何優雅的解決呢 1)table:批量拼接新增表註釋指令碼 SELECT CONCAT('ALTER TABLE ', table_name, ' comment ;') FROM information_schema
機器學習實踐(十五)—sklearn之分類演算法-邏輯迴歸、精確率、召回率、ROC、AUC
邏輯迴歸雖然名字中帶有迴歸兩字,但它實際是一個分類演算法。 一、邏輯迴歸的應用場景 廣告點選率 是否為垃圾郵件 是否患病 金融詐騙 虛假賬號 看到上面的例子,我們可以發現其中的特點,那就是都屬於兩個類別之間的判斷。 邏輯迴歸就是
【未完成】除法取模、逆元、擴充套件歐幾里得演算法
1.+,-,*都可以直接取模,但是除法不可以(模素數相當於換了數域,因為數域變成了有限域,有限域上沒有除法,要換成乘以逆元)。 2.除法取模要變成乘它的逆元。 a * x MOD m == 1則稱X為A關於模m的乘法逆元,其中a和m必須互素。 3.當m為素數時可以使用
乘法逆元、擴充套件歐幾里得演算法、二元一次方程、a的n次方取餘
知識點:乘法逆元,逆元的求法,二元一次方程求通解,a的n次方求餘數 一,乘法逆元 乘法逆元的概念類似於倒數(ax=1,a−1=x),不過是在取餘數的情況下的倒數。 如果(a×x)%p=1,則稱x是a模p的逆元。另一種記法:ax=1(modp),即等
從1元、2元和5元的鈔票和等於100元的演算法問題談到遞迴
引入 一直以來,遞迴思想成為不少新手的攔路虎。同樣作為一個新手,我希望這篇文章可以從新手 的角度出發,走入遞迴。 如本文標題,相信不少人碰到過這個問題:“現有面值為1元、2元和5元的鈔票(假設每種鈔票都足夠多),從這些鈔票中取出任意張數使 其總面值為100元,問
#數論# 歐幾里德演算法 、擴充套件歐幾里德演算法 、費馬小、逆元求解(ing)
歐幾里德求gcd(輾轉相除法): 定理: gcd(a, b) = gcd(b, a % b) 兩個正整數a和b(a>b),它們的最大公約數等於a除以b的餘數c和b之間的最大公約數 證明: a可以表示成a = kb + r,則r = a %
歐幾里德演算法、擴充套件歐幾里德演算法、乘法逆元
最近看了一本書《程式設計師》裡面說的一個面試題: 求兩個數的最大公約數: SoEasy的題目看過C 的人都知道怎麼寫這個程式 1.傳統方法:窮舉 #include <math.h>int main(){int m=1970,n=1066,p=0;p=m<n?m:n;for(;p>=1
國內作戰指揮學院畢業的程式設計師解析:美國國防、銀行和支付的加密演算法
WebSocket協議是基於TCP的一種新的網路協議。它實現了瀏覽器與伺服器全雙工(full-duplex)通訊——可以通俗的解釋為伺服器主動傳送資訊給客戶端。 區別於MQTT、XMPP等聊天的應用層協議,它是一個傳輸通訊協議。它有著自己一套連線握手,以及資料傳輸的規範。 而本文要講到的SRWebSock
改善深層神經網路_優化演算法_mini-batch梯度下降、指數加權平均、動量梯度下降、RMSprop、Adam優化、學習率衰減
1.mini-batch梯度下降 在前面學習向量化時,知道了可以將訓練樣本橫向堆疊,形成一個輸入矩陣和對應的輸出矩陣: 當資料量不是太大時,這樣做當然會充分利用向量化的優點,一次訓練中就可以將所有訓練樣本涵蓋,速度也會較快。但當資料量急劇增大,達到百萬甚至更大的數量級時,組成的矩陣將極其龐大,直接對這麼大
pandas中一列含有多種資料型別的轉換:科學計演算法轉浮點數、字元對映
import pandas as pd import re def getNum(x): """ 科學計數法和字元轉浮點數 """ if re.findall(r'\d+\.\d+E\+',x): return "%.f" % float(x)
資料結構和演算法之陣列奇數、偶數分離
今日,博主在面試一家外企的時候,要求白板寫程式。其中就有一道演算法設計題目,下面就來分享一下這道題的演算法思路和相關示例程式碼。 題目:要求將一個整形陣列中的奇數和偶數進行分離,偶數在
Java常用的八種排序演算法與程式碼實現(三):桶排序、計數排序、基數排序
三種線性排序演算法:桶排序、計數排序、基數排序 線性排序演算法(Linear Sort):這些排序演算法的時間複雜度是線性的O(n),是非比較的排序演算法 桶排序(Bucket Sort) 將要排序的資料分到幾個有序的桶裡,每個桶裡的資料再單獨進行排序,桶內排完序之後,再把桶裡的
演算法初級01——認識時間複雜度、對數器、 master公式計算時間複雜度、小和問題和逆序對問題
雖然以前學過,再次回顧還是有別樣的收穫~ 認識時間複雜度 常數時間的操作:一個操作如果和資料量沒有關係,每次都是固定時間內完成的操作,叫做常數操作。 時間複雜度為一個演算法流程中,常數運算元量的指標。常用O(讀作big O)來表示。具體來說,在常數運算元量的表示式中,
資料結構與演算法-------斐波那契數列、位運算、素數、最大公約數、最小公倍數
1、斐波那契數列 function fabeliq(n){ var arr=[]; if(n==1){ return arr=[0]; } if(n==2){ return arr=[0,1];
排序演算法(直接插入、氣泡排序、選擇排序、快速排序、希爾排序、堆排序、歸併排序)
main函式 int main() { int data[] = {1,2,6,3,4,7,7,9,8,5}; //bubble_sort(data,10); //select_sort(data,10); Insert_Sort(data,10); fo
雙目立體視覺匹配演算法之視差圖disparity計算——SAD演算法、SGBM演算法
一、SAD演算法 1.演算法原理 SAD(Sum of absolute differences)是一種影象匹配演算法。基本思想:差的絕對值之和。此演算法常用於影象塊匹配,將每個畫素對應數值之差的絕對值求和,據此評估兩個影象塊的相似度。該演
【演算法】二叉樹前序、中序、後序遍歷相互求法(轉)
二叉樹前序、中序、後序遍歷相互求法 原文地址 今天來總結下二叉樹前序、中序、後序遍歷相互求法,即如果知道兩個的遍歷,如何求第三種遍歷方法,比較笨的方法是畫出來二叉樹,然後根據各種遍歷不同的特性來求,也可以程式設計求出,下面我們分別說明。  
Python-資料結構與演算法(十一、字典(對映)——基於兩種不同的底層實現)
保證一週更兩篇吧,以此來督促自己好好的學習!程式碼的很多地方我都給予了詳細的解釋,幫助理解。好了,幹就完了~加油! 宣告:本python資料結構與演算法是imooc上liuyubobobo老師java資料結構的python改寫,並添加了一些自己的理解和新的東西,liuyubobobo
排序演算法下——桶排序、計數排序和基數排序
桶排序、計數排序和基數排序這三種演算法的時間複雜度都為 $O(n)$,因此,它們也被叫作線性排序(Linear Sort)。之所以能做到線性,是因為這三個演算法是非基於比較的排序演算法,都不涉及元素之間的比較操作。 1. 桶排序(Bucket Sort)? 1.1. 桶排序原理 桶排序,