問題描述:
解決思路:
**實現思路:
**實現:
public
class
main2
else
system.out.
println
(activity
(n, programs));
}}}public
static
intactivity
(int n,program[
] programs)
}swap
(programs,i,index);}
// 以第1個節目開始,sum為計算,最多可以看幾個節目
int sum =1;
//下標:第1個節目開始,下標為0 ,記錄安排進來的節目下標
int m =0;
for(
int i =
1; i < n; i++)}
return sum;
}/**
* 交換
* @param programs
* @param i,j
*/public
static
void
swap
(program[
] programs,
int i,
int j)
}class
program
問題描述
貪心策略:採用重量最輕者先裝的貪心選擇策略,可產生最優裝載問題的最優解。
**實現:
public
class
main
list
load =
load
(c, maps)
;//輸出船的裝載數量
system.out.
println
(load.
size()
);//輸出貨櫃裝載的順序
for(string integer : load)
system.out.
println()
;}}/**
* * @param c 船裝載的重量
* @param maps 每個貨櫃對應的編號及其重量
* @return list集合,船最多裝載的貨櫃編號
*/public
static list
load
(int c, map
maps)})
; arraylist
arraylist =
newarraylist
<
>()
;//遍歷排好序的map集合
iterator
> iterator = list.
iterator()
;while
(iterator.
hasnext()
)else
}return arraylist;
}}
除了用map集合,還可以定義乙個貨櫃的類,儲存編號和重量兩個屬性。
prim演算法是用來解決最小生成樹minimal spanning trees (mst)問題
任何只由圖g的邊構成,幷包含g的所有頂點的樹稱為g的生成樹
加權無向圖g的生成樹的權重是該生成樹的所有邊的權重之和
最小生成樹是其所有生成樹中權重最小的生成樹
n個頂點,選取n-1條邊,構建乙個連通圖,且這n-1條邊的權重之和最小
例項演示prim演算法構造最小生成樹:
實現思路:
(1) 任意選定一點s,設集合s=
(2) 從不在集合s的點中選出乙個點j使得其與s內的某點i的距離最短,則(i,j)就是生成樹上的一條邊,同時將j點加入s
(3) 轉到(2)繼續進行,直至所有點都己加入s集合
**實現:
public
class
prim
}while
(scanner.
hasnextint()
)prim
(n,g);}
/** *
* @param n 點數
* @param g 儲存圖
*/public
static
void
prim
(int n,
int[
] g)
//訪問第1個點(0),將第1個點加到s中
used[0]
=1;//每一次迴圈找出乙個到s距離最近的頂點
for(
int i =
1; i < n; i++)}
//輸出s中與j最近鄰點,j,以及它們之間的距離
system.out.
println
(closeset[j]
+" "
+j+" "
+lowcost[j]);
//將j增加到s中
used[j]=1
;for
(int k =
0; k < n; k++)}}}}
# 輸入
0 1 28
0 5 10
5 4 25
4 3 22
3 2 12
2 1 16
1 6 14
6 4 24
6 3 18
aa #結束輸入
#輸出0 5 10
5 4 25
4 3 22
3 2 12
2 1 16
1 6 14
演算法 貪心演算法
把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...
演算法 貪心演算法
集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...
演算法 貪心演算法
貪心演算法,又稱貪婪演算法 greedy algorithm 是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優解出發來考慮,它所做出的僅是在某種意義上的區域性最優解。貪婪演算法是一種分階段的工作,在每乙個階段,可以認為所做決定是最好的,而不考慮將來的後果。這種 眼下能夠拿到...