當前位置:首頁 » 操作系統 » 演算法規約

演算法規約

發布時間: 2023-01-24 16:07:48

A. 簡述算符優先歸約和規范規約的區別

算符優先歸約(又叫做算符優先分析法)和規范規約(又叫做最左推導)之間有3點不同,具體介紹如下:

一、兩者的適用范圍不同:

1、算符優先歸約(又叫做算符優先分析法)的適用范圍:適用於計算機領域。

2、規范規約(又叫做最左推導)的適用范圍:數學、物理、計算機等學術領域。

二、兩者的含義不同:

1、算符優先歸約(又叫做算符優先分析法)的含義:如果G是一個不含空字元的演算法文法,那麼只要它的任一對終結符都至多隻滿足>,=,<的關系的其中一種,則稱g是一個算符優先文法。< p=""><!--的關系的一種,則稱g是一個算符優先文法。

2、規范規約(又叫做最左推導)的含義:若x和y是符號串α中有兩個以上的非終結符號時,對推導的每一步堅持把α中的最左非終結符號進行替換,稱為最左推導。

三、兩者的使用不同:

1、算符優先歸約(又叫做算符優先分析法)的使用:只考慮算符(終結符)之間的優先關系,分析掃描每個規約式的算符間優先關系。

2、規范規約(又叫做最左推導)的使用:x和y是符號串,若使用若干次產生式可以從x變換出y,則稱x推導出y(或者說y是x的推導),記為xy。

B. 什麼是歸約演算法

歸約不是一種具體演算法,是一種思想、一種方法。通過對原問題的抽象和建模生成一個等價的另一問題,然後通過解決這個新問題來達到解決原問題的目的。

C. 演算法中Karp規約與Karp歸約有什麼關系(請教異同)

Karp規約
Karp歸約

D. 大數據常用的各種演算法

我們經常談到的所謂的​​ 數據挖掘 是通過大量的數據集進行排序,自動化識別趨勢和模式並且建立相關性的過程。那現在市面的數據公司都是通過各種各樣的途徑來收集海量的信息,這些信息來自於網站、公司應用、社交媒體、移動設備和不斷增長的物聯網。

比如我們現在每天都在使用的搜索引擎。在自然語言處理領域,有一種非常流行的演算法模型,叫做詞袋模型,即把一段文字看成一袋水果,這個模型就是要算出這袋水果里,有幾個蘋果、幾個香蕉和幾個梨。搜索引擎會把這些數字記下來,如果你想要蘋果,它就會把有蘋果的這些袋子給你。

當我們在網上買東西或是看電影時,網站會推薦一些可能符合我們偏好的商品或是電影,這個推薦有時候還挺准。事實上,這背後的演算法,是在數你喜歡的電影和其他人喜歡的電影有多少個是一樣的,如果你們同時喜歡的電影超過一定個數,就把其他人喜歡、但你還沒看過的電影推薦給你。 搜索引擎和推薦系統 在實際生產環境中還要做很多額外的工作,但是從本質上來說,它們都是在數數。

當數據量比較小的時候,可以通過人工查閱數據。而到了大數據時代,幾百TB甚至上PB的數據在分析師或者老闆的報告中,就只是幾個數字結論而已。 在數數的過程中,數據中存在的信息也隨之被丟棄,留下的那幾個數字所能代表的信息價值,不抵其真實價值之萬一。 過去十年,許多公司花了大價錢,用上了物聯網和雲計算,收集了大量的數據,但是到頭來卻發現得到的收益並沒有想像中那麼多。

所以說我們現在正處於「 數字化一切 」的時代。人們的所有行為,都將以某種數字化手段轉換成數據並保存下來。每到新年,各大網站、App就會給用戶推送上一年的回顧報告,比如支付寶會告訴用戶在過去一年裡花了多少錢、在淘寶上買了多少東西、去什麼地方吃過飯、花費金額超過了百分之多少的小夥伴;航旅縱橫會告訴用戶去年做了多少次飛機、總飛行里程是多少、去的最多的城市是哪裡;同樣的,最後讓用戶知道他的行程超過了多少小夥伴。 這些報告看起來非常酷炫,又冠以「大數據」之名,讓用戶以為是多麼了不起的技術。

實際上,企業對於數據的使用和分析,並不比我們每年收到的年度報告更復雜。已經有30多年歷史的商業智能,看起來非常酷炫,其本質依然是數數,並把數出來的結果畫成圖給管理者看。只是在不同的行業、場景下,同樣的數字和圖表會有不同的名字。即使是最近幾年炙手可熱的大數據處理技術,也不過是可以數更多的數,並且數的更快一些而已。

在大數據處理過程中會用到那些演算法呢?

1、A* 搜索演算法——圖形搜索演算法,從給定起點到給定終點計算出路徑。其中使用了一種啟發式的估算,為每個節點估算通過該節點的較佳路徑,並以之為各個地點排定次序。演算法以得到的次序訪問這些節點。因此,A*搜索演算法是較佳優先搜索的範例。

2、集束搜索(又名定向搜索,Beam Search)——較佳優先搜索演算法的優化。使用啟發式函數評估它檢查的每個節點的能力。不過,集束搜索只能在每個深度中發現最前面的m個最符合條件的節點,m是固定數字——集束的寬度。

3、二分查找(Binary Search)——在線性數組中找特定值的演算法,每個步驟去掉一半不符合要求的數據。

4、分支界定演算法(Branch and Bound)——在多種最優化問題中尋找特定最優化解決方案的演算法,特別是針對離散、組合的最優化。

5、Buchberger演算法——一種數學演算法,可將其視為針對單變數較大公約數求解的歐幾里得演算法和線性系統中高斯消元法的泛化。

6、數據壓縮——採取特定編碼方案,使用更少的位元組數(或是其他信息承載單元)對信息編碼的過程,又叫來源編碼。

7、Diffie-Hellman密鑰交換演算法——一種加密協議,允許雙方在事先不了解對方的情況下,在不安全的通信信道中,共同建立共享密鑰。該密鑰以後可與一個對稱密碼一起,加密後續通訊。

8、Dijkstra演算法——針對沒有負值權重邊的有向圖,計算其中的單一起點最短演算法。

9、離散微分演算法(Discrete differentiation)。

10、動態規劃演算法(Dynamic Programming)——展示互相覆蓋的子問題和最優子架構演算法

11、歐幾里得演算法(Euclidean algorithm)——計算兩個整數的較大公約數。最古老的演算法之一,出現在公元前300前歐幾里得的《幾何原本》。

12、期望-較大演算法(Expectation-maximization algorithm,又名EM-Training)——在統計計算中,期望-較大演算法在概率模型中尋找可能性較大的參數估算值,其中模型依賴於未發現的潛在變數。EM在兩個步驟中交替計算,第一步是計算期望,利用對隱藏變數的現有估計值,計算其較大可能估計值;第二步是較大化,較大化在第一步上求得的較大可能值來計算參數的值。

13、快速傅里葉變換(Fast Fourier transform,FFT)——計算離散的傅里葉變換(DFT)及其反轉。該演算法應用范圍很廣,從數字信號處理到解決偏微分方程,到快速計算大整數乘積。

14、梯度下降(Gradient descent)——一種數學上的最優化演算法。

15、哈希演算法(Hashing)。

16、堆排序(Heaps)。

17、Karatsuba乘法——需要完成上千位整數的乘法的系統中使用,比如計算機代數系統和大數程序庫,如果使用長乘法,速度太慢。該演算法發現於1962年。

18、LLL演算法(Lenstra-Lenstra-Lovasz lattice rection)——以格規約(lattice)基數為輸入,輸出短正交向量基數。LLL演算法在以下公共密鑰加密方法中有大量使用:背包加密系統(knapsack)、有特定設置的RSA加密等等。

19、較大流量演算法(Maximum flow)——該演算法試圖從一個流量網路中找到較大的流。它優勢被定義為找到這樣一個流的值。較大流問題可以看作更復雜的網路流問題的特定情況。較大流與網路中的界面有關,這就是較大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一個流網路中的較大流。

20、合並排序(Merge Sort)。

21、牛頓法(Newton's method)——求非線性方程(組)零點的一種重要的迭代法。

22、Q-learning學習演算法——這是一種通過學習動作值函數(action-value function)完成的強化學習演算法,函數採取在給定狀態的給定動作,並計算出期望的效用價值,在此後遵循固定的策略。Q-leanring的優勢是,在不需要環境模型的情況下,可以對比可採納行動的期望效用。

23、兩次篩法(Quadratic Sieve)——現代整數因子分解演算法,在實踐中,是目前已知第二快的此類演算法(僅次於數域篩法Number Field Sieve)。對於110位以下的十位整數,它仍是最快的,而且都認為它比數域篩法更簡單。

24、RANSAC——是「RANdom SAmple Consensus」的縮寫。該演算法根據一系列觀察得到的數據,數據中包含異常值,估算一個數學模型的參數值。其基本假設是:數據包含非異化值,也就是能夠通過某些模型參數解釋的值,異化值就是那些不符合模型的數據點。

25、RSA——公鑰加密演算法。較早的適用於以簽名作為加密的演算法。RSA在電商行業中仍大規模使用,大家也相信它有足夠安全長度的公鑰。

26、Schönhage-Strassen演算法——在數學中,Schönhage-Strassen演算法是用來完成大整數的乘法的快速漸近演算法。其演算法復雜度為:O(N log(N) log(log(N))),該演算法使用了傅里葉變換。

27、單純型演算法(Simplex Algorithm)——在數學的優化理論中,單純型演算法是常用的技術,用來找到線性規劃問題的數值解。線性規劃問題包括在一組實變數上的一系列線性不等式組,以及一個等待較大化(或最小化)的固定線性函數。

28、奇異值分解(Singular value decomposition,簡稱SVD)——在線性代數中,SVD是重要的實數或復數矩陣的分解方法,在信號處理和統計中有多種應用,比如計算矩陣的偽逆矩陣(以求解最小二乘法問題)、解決超定線性系統(overdetermined linear systems)、矩陣逼近、數值天氣預報等等。

29、求解線性方程組(Solving a system of linear equations)——線性方程組是數學中最古老的問題,它們有很多應用,比如在數字信號處理、線性規劃中的估算和預測、數值分析中的非線性問題逼近等等。求解線性方程組,可以使用高斯—約當消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。

30、Strukturtensor演算法——應用於模式識別領域,為所有像素找出一種計算方法,看看該像素是否處於同質區域( homogenous region),看看它是否屬於邊緣,還是是一個頂點。

31、合並查找演算法(Union-find)——給定一組元素,該演算法常常用來把這些元素分為多個分離的、彼此不重合的組。不相交集(disjoint-set)的數據結構可以跟蹤這樣的切分方法。合並查找演算法可以在此種數據結構上完成兩個有用的操作:

查找:判斷某特定元素屬於哪個組。

合並:聯合或合並兩個組為一個組。

32、維特比演算法(Viterbi algorithm)——尋找隱藏狀態最有可能序列的動態規劃演算法,這種序列被稱為維特比路徑,其結果是一系列可以觀察到的事件,特別是在隱藏的Markov模型中。

E. 指派問題-匈牙利演算法

原址: https://blog.csdn.net/siss0siss/article/details/51325656
資料寫的不完善,本篇文章較詳細友善。
匈牙利解法:

過程
一、做減法(歸約):

行歸約:每行元素減去該行最小元素。

列歸約:每行元素減去該行最小元素。

歸約順序無所謂,目的就是把所有的數盡可能化的很小,但最小的數不能為負數

二、圈零劃零

找到含零元素最少的行,對零元素打圈,劃去打圈零元素所在行和列存在的零元素,重復這個步驟,直到矩陣中所有的零元素都被處理完。

三、打勾劃線

四、調整量的加減

F. 演算法基礎

謹以此文,感謝我在這個學校最喜歡的兩個老師之一——肖my老師。本文基本為老師上課說講授內容加上一部分自己的感悟拼湊而來,寫作文本的目的是為自己的演算法課程留下一點點東西,站在老師肩膀上形成粗糙的框架,方便以後的復習以及深入。文筆有限,其中包含的錯誤還請多多包容,不吝賜教。

to do list:

時間復雜度中遞歸樹法;動規,分治新的感悟;

點覆蓋:一組點的集合,使得圖中所有邊都至少與該集合中一個點相連。

支配集:一組點的集合,使得圖中所有的點要麼屬於該集合,要麼與該集合相連。

最大團:在一個無向圖中找出點數最多的完全圖。

獨立集:一組點的集合,集合中的頂點兩兩不相鄰。(團轉過來)

SAT問題:也稱布爾可滿足性問題。給一組變

其中Ci被稱為句子。

點覆蓋<->獨立集<->最大團

最小割:割是一組邊集。如s-t割就是如果去掉這些邊,將把原圖劃分為兩個點集,其中一個點集包含s,一個點集包含t。(兩個是指不相連,而不是代表不存在邊相連,如反向邊)

decision problem: 是否存在。

search problem:找到一個解。

(這個還能擴展,比如decision problem在多項式時間內解決,所以他是P問題嗎)

漸進符號:

注意以上三種都是緊的,對應的兩個小寫的符號是不緊的,即如下圖所示:

概念:演算法的時間復雜度是一個函數,用於定性描述演算法的運行時間。注意,這個一個代表演算法輸入字元串長度的函數。

[注]輸入字元串長度是一個比較關鍵的理解,比如在背包問題中,其時間復雜度為O(nW),因為W不定,所以只能是一個偽多項式時間。

比較:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n! < n^n

大致:常數<對數<冪函數<指數函數<階乘

對於指數是n相關的進行比較,優先比較指數,再比較底數。

記住一個特例:n (logn)<n!<n n

計算:

一般來說,計算採用主方法和遞歸樹法,其中遞歸樹技巧性比較強,主方法其實也是遞歸樹推導歸納而來,且主方法能得到一個比較緊的結果。

主方法:

f(n) = af(n-b)+g(n) =>O( a^(n/b) *g(n) )

P:decision problems有一個多項式演算法。

NP(nondeterministic polynomial-time):decision problems能夠在多項式時間內驗證。

NPC:NP完全問題,首先這個問題是NP的,其次,其他所有問題都可以多項式時間內歸約到它。

NPH:如果所有NP問題都可以多項式時間歸約到某個問題,則稱該問題為NP困難。

因為NP困難問題未必可以在多項式時間內驗證一個解的正確性(即不一定是NP問題),因此即使NP完全問題有多項式時間的解(P=NP),NP困難問題依然可能沒有多項式時間的解。因此NP困難問題「至少與NP完全問題一樣難」。

一些NP問題能在多項式時間內解決,因為 P∈NP

NP難類型問題的證明:

先選好一個已知NP難的問題,然後將已知NP難問題多項式歸約到要證明的問題上。先給出這個歸約,然後再證明這個歸約的正確性。

NPC類型問題的證明:

證明一個問題Y是NPC問題,先說明Y是NP的,然後找到一個NPC問題X,將這個問題X歸約到問題Y上,即證明完成。

常見的NPC問題(重要,規約的時候有用!):

packing problems: set-packing,獨立集

覆蓋問題:集合覆蓋問題,頂點覆蓋問題

嚴格滿足問題(constraint satisfaction problems):SAT,3SAT

序列問題:哈密爾頓迴路,旅行商問題

劃分問題:3D-matching, 3著色問題

數字問題:子集合問題(子集元素之和為t),背包問題

其他:分團問題(是否存在一個規模為k的團)

規約的概念與理解

規約:意味著對問題進行轉換,例如將一個未知的問題轉換成我們能夠解決的問題,轉換的過程可能涉及到對問題的輸入輸出的轉換。

自歸約:search problem <=p decision problem

歸約:A歸約到B,也就是說,我們對A套一個函數f,在f函數的作用下形成一個新的問題,對這個問題運用B的黑盒解法,能夠解決問題A。

(B <=p A)一般說來,B問題如果可以歸約到A問題,也就是說,一個解決A問題的演算法可以被用做子函數(子程序)來解決B問題,也就是說,求解B問題不會比求解A問題更困難。因此,如果B問題是困難的,那麼A問題也就是困難的,因為不存在求解A問題的高效演算法。(最後一句不懂)

我簡單說一下我理解的規約,以X規約到Y為准,大概分成兩個方面:

註:在 的一些實例中細品。

概念:在對問題求解時,總是做出在當前看來是最好的選擇。

貪心的證明:先假設貪心演算法得到的解不是最優解,假設S1是貪心演算法得到的解,而S2是所有最優解中和S1具有最多相同元素的解,然後比較S1和S2,觀察S1和S2中第一個(最前面一個)不一樣的元素,然後在貪心解S2中將不一樣的元素換成S1中的那個元素得到另一個最優解S3,這樣S3和S1比S2和S1有更多相同元素,和假設S2是與S1有最多相同元素的最優解矛盾,這樣來推導S1是最優解。

我的理解:假設這個不是最優的,但是一定存在一個最優的解在某一個位置之前和我當前解結構是一樣的,那麼在這個位置,選最優解也可以選當前解,不影響最終答案。

[注]概念很簡單,但是實際操作的時候,貪心的角度很重要,同樣的貪心,方向對了,演算法就是對的。

例子:

給你一系列活動,每個活動有一個起始時間和一個結束時間,要求在活動不沖突的情況下找到一種有最多活動的安排。

對於這個問題,我們有一下幾種貪心的角度:

①將任務按照 開始時間 升序排列。

②將任務按照 結束時間 升序排列。

③將任務按照 任務時長 升序排列。

④對於每一個任務,都記錄與其他任務沖突的數量,按照 沖突數量 的升序排列。

其中1,3,4都是不可以的。

任務結束時間的貪心證明(反證法):

假設貪心不是最最優的,那我們在最優解中找一個與當前解有最相似的解。

由圖可以知道,貪心貪的就是最早結束,所以如果不是最優,那麼最優的結束時間一定晚於貪心的結束時間。

由上圖就可以證明。

最大流通常與最小割相聯系。

f 為任意一個流,cap為容量,對於任意的s-t割出來的點集(A,B),v( f ) <= cap(A, B)。

當流增加到與割的容量相等時候,就不可能再有增長空間了,稱為最大流。

對於割的容量來說,不同的割法會有不同流量,有些割法永遠不會有流達到,比如部分A = {s}, B = {V - s},這種把源點割出來的割法。

綜上,通過這種感性的認識,如果能找到一個最小的割,那麼這個割就一定是最大能跑到的流(如果流能更高的話在這個割上就會超過容量,反證。)

上圖為一條增廣路,一條增廣路即為一條s-t的路徑,在路徑上仍有流可以跑,其曾廣的流就是該條路徑上最小的剩餘容量。(相當於每找一條增廣路,就至少有一條邊達到滿流。)

直到在圖中找不到增廣路,此時已經達到了最大流。

找ST集合:把滿流的邊去掉,從S出發走到能到的點,遍歷的點就是S集合;剩下的點就屬於T集合。注意,如果找到了在找S集合的時候找到了T點,說明還可以繼續找增廣路。

[補]有一個很有趣的延伸,如多源點多終點問題。問:如果我有兩個源點s1,s2,兩個終點t1,t2,我想求一組流,使得s1-t1,s2-t2的流達到最大,是否可以加一個源點S,S與s1,s2相連,邊流無限大;加一個終點T,T與t1,t2相連,邊流無限大,然後這組ST的最大流即可。——答案是No,無法保證是s1-t1,s2-t2,有可能交錯。

例子講的感覺不是特別好,對理解感覺起不到很大作用,希望以後有新的想法後進行補充。

規約是一個重要的概念和思想。

一個圖的 最大獨立集 與 最小點覆蓋 是不相交的兩個點集,它們的並就是整個點集。

個人理解:獨立集和點覆蓋都是從點的角度進行劃分的,如果我們從邊的角度來看,①一個最小的點覆蓋即為我集合中的每一個點都盡可能與更多的邊相連,②同時,一條邊的兩個端點中,只能有一個端點在最小點覆蓋中[下注]

[注]我們假設有一條邊兩個端點(u,v)都在點覆蓋之中,首先顯然u,v都不是端點,因為假設u是端點的話只需要選擇v即可;

給一個集合S和一堆S的子集S1,S2,...,Sm,問是否存在存在k個子集,使它們的並集為S。

構造:

集合為點,集合中的元素為邊,有相同元素的邊相連。(注意如果某一元素只在一個子集中出現,應該怎麼處理呢!)

規約:在構造的圖中找最小的點覆蓋,選中的點能覆蓋所有的邊即為對應集合的並集能包含所有的元素。所以就完成了集合覆蓋到點覆蓋的規約。

構造:每個句子構造一個三角形,把對應變數但是相反取值的點相連。

規約:3SAT的有一個特點就是,每一個句子中至少有一個為真即可,每個句子都必須是真。將相同變數相反取值相連的目的就是,在最大獨立集中,比如選擇x為真,則剩下所有句子中x-ba一定不會被選中,同時由獨立集和構造出來三角形的性質可以知道,每一個句子,有且僅有一個會被選中(為真)。如上圖,x1-ba為真,x2-ba和x3任選一個為真即可滿足。

search problem <=p decision version

比如:如果能在多項式時間內找到一個哈密爾頓圈,那麼就能在多項式時間內找到一個哈密爾頓圈(刪邊)

在此再談P和NP:

我們知道有些問題是可以從搜索問題規約到判斷問題的,也就是所該問題如果能在多項式內判斷,那麼久能在多項式中搜索到,那麼我們只需要說,這個判斷問題能在多項式時間內求解,就叫做P問題,也就是上圖紅字的意思;那NP問題呢,必須要給出一個解的實例,判斷的是這個實例是否滿足求解問題,這個才是上圖中的紅字。比如,我如果能在多項式時間內判斷哈密爾頓圈是否(Yes/No)存在,那這個就是ploy-time algorithm,如果我給出了一系列點,能過多項式時間內判斷這些點能否構成哈密爾頓圈,那這個就是poly-time certifier。

構造:把一個點拆分成三個點。

構造:(下面兩個圖要連在一起看)

從行的角度看,一行代表一個變數;從列的角度來看,每三列代表一個句子。兩邊中一邊是兩個點,一邊是一個點,所以有k個句子的話,每一行有3k+3個節點。從哈密爾頓圈的答案轉到3SAT的答案看這個圈在每一行是從左到右還是從右到左。

子集和問題:給一個集合S,問是否能在集合中選取元素,使得總和為W。

構造:如下圖,按照前六行和前三列進行分割,可以分成4部分,其中1,3,4部分是固定的,即在第一部分,變數v列和 變數為v(包括變數及取反)的行對應的格子為0,其餘為0;第三部分全為0;第四部分按照12依次寫下來。第二部分,如果Ci句子中有變數v,則記為1,因為一個句子只有三個變數,可以簡單通過第二部分每一列和為3進行判定。此時集合已經構造出來,W為111444,與上面的規約相似,可以通過3SAT的簡單性質進行感性的認知。

近似的想法很簡單,要解決一個問題,我們希望能夠做到①求解結果是最優的 ②在多項式時間內解決 ③對於任意的實例都能夠通過該演算法解決。現在對於部分問題,無法完全滿足以上要求,所以就犧牲了①,但是我們希望結果不是盲目的,所以就引入了近似的概念。

近似演算法。比如2-近似,認為W為近似解,W 為最優解,在求最小值的情況下W<=2W ;在求最大值的情況下,W>=1/2W*

給m個機器和n個任務,每個任務有一個ti的執行時間,我們認為完成最後一個任務所需的時間為負載時間,希望能夠讓這個負載時間最短。

第一種:將任務依次放在機器上,當某個機器空閑時立即放入新任務。此時是2近似的。

證明:

引理1.最短時間安排是大於等於任務中時間最長的任務,L* >= max tj

我們在考慮放入最後一個任務前,根據我們放置的規則,該機器是耗時最短,也就是說,該機器此時的用時是低於除掉最後一個任務後的平均時長,更低於所有任務的平均時長(引理2);再根據引理1,最後一個任務應該是小於最優解的。

補充:

在這里,我還想討論一下這個近似演算法的中等於符號,先上結論:等號不一定能夠找到一個實例,但是可以構造出一種結構,通過取極限求得,我們認為這樣 也算是緊的。

構造實例:有m個機器,其中m(m-1)個任務的用時為1,1個任務的用時為m。肯定有一種任務集合,可以按照以下方式進行安排,此時的貪心解為19。

此時最佳的解為10,如下圖:

通過推廣可以知道此時的比為(2m-1)/m,當m取極限,能夠達到2倍。

第二種:將任務從大到小排序,然後依次放在機器上,當某個機器空閑時立即放入新任務。此時是2近似的。

引理3:如果有大於m個任務,那麼L*>=2t(m-1)。證明:t(m+1)是目前最短的任務,且目前所有機器上都有任務了,所以該任務加入時最優的情況不過是加入設備的原有任務剛好和t(m+1)相等,即等號。

(2近似)在n個點中,選取k個中心點,使得這些中心點能夠以半徑R的圓包含所有的點,讓其中最大的半徑最小,如下圖所示:

基礎:距離需要滿足的三個定理①(同一性)dist(x, x) = 0 ②(自反)dist(x, y) = dist(y, x) ③(三角不等式)dist(x, y) <=dist(x, z)+dist(z, y)

r(C)為C集合中所有點的最大覆蓋半徑。(需要求min r(C))

演算法:在點集中任選一個作為中心點,然後重復以下步驟k-1次:選取距離已選點集中最遠的點,加入點集。

證明:先假設r(C )< 1/2 * r(C)以選好的點畫半徑為1/2 * r(C)的圓,顯然可知[注],這個圓里有且僅有一個r(C )中的點。那麼根據在下圖中,根據三角不等式可以得出:

[注]在每個點上r(c )一定會包含到c點,而r(C )<1/2 * r(C),相當於大圓套小圓,所以c*一定在c的圓中。

(2近似)問題還是很好理解的,在點上加權值,要找一個點覆蓋,使得權值最小。如下圖左邊就是一個帶權的最小點覆蓋。

演算法: 任選一條邊(i, j)加上代價,這個代價從零開始,且這個代價的最大值低於i和j節點的權值。顯然,這個邊權值的最大值取決於兩個端點權值的最小值,我們認為當邊權值與點權值相等時,對應的那個點是緊的。把所有緊的點找出來即為點覆蓋。

流程:

證明:

引理:邊權之和小於等於點覆蓋的點權之和。這主要是由於涉及到一條邊上兩個點都被選(緊的)的情況,感性認知可以看上圖,縮放證明如下:

w(S)是等於所選的節點的權值之和的,等於所選節點節點所對應的邊權之和,可以把它放大到所有節點對應邊權之和,這樣因為一條邊(u, v)在u上算過一次後還要在v上算一次,所以等於邊權和的兩倍。再由上面引理可得。

主要為了線性規劃和整數規劃。

(2近似)沒啥好說的,只需要把方程構造出來就行了。

由於求解出來結果不一定是整數,所以我們認為某一點的值大於1/2,就選入點集。

證明:

因為xi+xj >=1,且都是正數,那必至少一個點是大於1/2的(反證,兩個都小於1/2則和小於1)。

給你n個物品和一個背包,每個物品有一個價值v和一個大小w,背包的容量是W,要求讓背包裝下盡可能大價值。

背包的時間復雜度:O(nW)

注意其中n表示物品的個數,無論是1個還是999個,他都是多項式的,這個很好理解。但是W就不一樣了,這是一個數字。我理解的是這個數字會很奇特,比如1.00001,比如99999,這些有可能看起來不大但是實際在處理的時候很難處理的數字,統一的來說,如果我們把這些數字放在電腦上,都會以二進制的方式存儲起來,有些數字用十進製表示很小,但是放在二進制上面就會很大,由W導致不能在多項式時間內解決(找不到一個范圍/上界來框它)。

演算法: 為了處理這個問題,我們改動了dp的狀態轉移方程,要讓這個轉移方程和W無關[注]。

此時還不是多項式的,然後我們再對value進行約。[注]

[注]這兩步中,我們把w改成v,並對v進行近似處理。OPT的含義變成了,在面對是否選擇第i個物品時,要想讓價值達到當前值,最少的weight。理由是更改後的誤差是可以忍受的:對v進行近似,結果只會出現最大價值的上下誤差,如果對w進行近似,則有可能出現該物品不能放入背包中,導致整個物品直接放棄的情況。

G. 數據規約方法有哪些

一、數據歸約基本知識:

對於小型或中型數據集,一般的數據預處理步驟已經足夠。但對真正大型數據集來講,在應用數據挖掘技術以前,更可能採取一個中間的、額外的步驟-數據歸約。本步驟中簡化數據的主題是維歸約,主要問題是是否可在沒有犧牲成果質量的前提下,丟棄這些已准備和預處理的數據,能否在適量的時間和空間里檢查已准備的數據和已建立的子集。

對數據的描述,特徵的挑選,歸約或轉換是決定數據挖掘方案質量的最重要問題。在實踐中,特徵的數量可達到數百,如果我們只需要上百條樣本用於分析,就需要進行維歸約,以挖掘出可靠的模型;另一方面,高維度引起的數據超負,會使一些數據挖掘演算法不實用,唯一的方法也就是進行維歸約。預處理數據集的3個主要維度通常以平面文件的形式出現:列(特徵),行(樣本)和特徵的值,數據歸約過程也就是三個基本操作:刪除列,刪除行,減少列中的值。

在進行數據挖掘准備時進行標准數據歸約操作,我們需要知道從這些操作中我們會得到和失去什麼,全面的比較和分析涉及到如下幾個方面的參數:

(1)計算時間:較簡單的數據,即經過數據歸約後的結果,可減少數據挖掘消耗的時間。

(2)預測/描述精度:估量了數據歸納和概括為模型的好壞。

(3)數據挖掘模型的描述:簡單的描述通常來自數據歸約,這樣模型能得到更好理解。

數據歸約演算法特徵:

(1)可測性

(2)可識別性

(3)單調性

(4)一致性

(5)收益增減

(6)中斷性

(7)優先權

二、數據歸約方法:

1、特徵歸約:

用相應特徵檢索數據通常不只為數據挖掘目的而收集,單獨處理相關特徵可以更有效,我們希望選擇與數據挖掘應用相關的數據,以達到用最小的測量和處理量獲得最好的性能。特徵歸約處理的效果:

(1)更少的數據,提高挖掘效率

(2)更高的數據挖掘處理精度

(3)簡單的數據挖掘處理結果

(4)更少的特徵。

和生成歸約後的特徵集有關的標准任務有兩個:

(1)特徵選擇:基於應用領域的知識和挖掘目標,分析者可以選擇初始數據集中的一個特徵子集。特徵排列演算法,最小子集演算法

(2)特徵構成:特徵構成依賴於應用知識。

特徵選擇的目標是要找出特徵的一個子集,此子集在數據挖掘的性能上比得上整個特徵集。特徵選擇的一種可行技術是基於平均值和方差的比較,此方法的主要缺點是特徵的分布未知。最優方法的近似:

(1)只對有前景的特徵子集進行檢查

(2)用計算簡單的距離度量替換誤差度量

(3)只根據大量數據的子集選擇特徵。

H. 請教:什麼叫規約,規約是怎麼轉換的

規約

就是族人必須遵守的規則, 如: 家法。

程序設計中的規約: ∏和∏'是兩個判定性問題,如果存在一個確定性演算法A使得對於一個∏的實例I,A可以將I在多項式時間里轉換成∏'的實例P,使得I得到肯定的回答,當且僅當I'得到肯定回答,則稱∏在多項式時間里規約到∏',記為∏∝poly∏'.

I. 移進規約演算法是什麼

編譯程序語法分析中的方法。找本《編譯原理》翻一下吧。

熱點內容
給定一個演算法 發布:2024-05-19 17:50:08 瀏覽:863
戀愛生物種離線緩存 發布:2024-05-19 17:49:15 瀏覽:578
卡巴斯基伺服器如何連接外網更新 發布:2024-05-19 17:42:06 瀏覽:559
手機虛榮怎麼連接伺服器 發布:2024-05-19 17:41:47 瀏覽:729
linux修改保存文件 發布:2024-05-19 17:30:38 瀏覽:665
網路有你腳本 發布:2024-05-19 17:29:55 瀏覽:769
黎明我的世界伺服器 發布:2024-05-19 17:17:34 瀏覽:538
雷神g50如何設置安卓原生模式 發布:2024-05-19 16:50:04 瀏覽:120
c語言小數四捨五入 發布:2024-05-19 16:23:28 瀏覽:525
資料庫被注入攻擊 發布:2024-05-19 16:21:31 瀏覽:835