MATLAB實現貪心演算法

2021-08-20 03:55:44 字數 1502 閱讀 2954

在這裡是為了實現:用貪心演算法模擬出隨機產生的20個點間的最短路徑。

蟻群演算法實現,有興趣可以對比一下:matlab實現蟻群演算法

**:

n = 20 ;                                   %用於記錄點數

x = zeros(1,n) ; %產生乙個與經過點數相同的行向量

y = zeros(1,n) ;

best = 1:1:n; %生成乙個用來儲存點順序的矩陣

handle = 1:1:n;

for i = 1 : (n) %生成n個隨機數

x(i) = rand * 20 ;

y(i) = rand * 20 ;

endd = zeros(n) ;

for i = 1 : n

for j = 1 : n

d(i,j) = sqrt( ( x(i) - x(j) ) ^ 2 + ( y(i) - y(j) ) ^ 2) ; %距離矩陣

endendbest(1) = 1; %預設起點

num = 1;

for a = 1:(n-2) %需要n-2次判斷

handle(:,1)=; %上一次最優點的資料裁掉

dis = zeros(1,(n-a)); %用來存剩下各個點的距離

for b = 1:(n-a) %用來獲取剩下各個點的距離

dis(b) = d (num , handle(b));

endnum1 = find( dis == min(dis) ); %得到最優點所在檢索

t = handle(1); %將最優點與最前面的點位置進行交換

handle(1) = handle(num1);

handle(num1) = t;

num = handle(1); %獲取下次進行操作的數

best(a+1) = handle(1); %將最優點存入best陣列

endbest(n) = handle(num1); %補上最後乙個點

plot(x(best),y(best),'-+') ; %用'+'標出點並用實線連線得到最優路徑

grid on

執行結果:

python實現貪心演算法

在對問題求解時,總是作出在當前看來是最好的選擇。也就是說,不從整體上加以考慮,它所作出的僅僅是在某種意義上的區域性最優解 是否是全域性最優,需要證明 問題 有一天海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件都價值連城,一旦打碎就是去了價值,海盜船載重量為c,每件固定的重量為wi,海盜們該如何盡可能...

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...