設揹包的最大承重是w,共有n件物品供選擇,每件物品的價值與重量分別是vi,wi(i=1,2,3...n)
step1:首先利用線性查詢演算法找出物品單位價值的中位數m;
step2:利用中位數m對所有物品進行劃分成三個集合 wg= we = wl = {vi/wiwg、we、wl集合中物品的總重量;
step3:若wg>w,則不往揹包中放任何物品,從step1開始繼續分解wg;
step4:若wg
step5:若
wg+we>=w,則把物品全部放入結束;
step6:若
wg+wewg+we的物品全部放入,從step1開始繼續分解wl。
分析演算法:
t(n) = t(n/2)+n 即t(n)每次縮小一半的計算量,由主方法可知t(n) = n.
java 計算制定時間內的月數
private int getmonths gregoriancalendar g1,gregoriancalendar g2 else gc1.clear calendar.millisecond gc1.clear calendar.second gc1.clear calendar.minut...
在O n 時間內找出最小的k個元素
思想 1.用大頭堆實現 2.類似快速排序實現 1.用大頭堆實現 程式設計師面試一百題 解法 2.類似快速排序實現 程式猴 include stdafx.h include include include include include using namespace std 每次將陣列劃分為兩部分,...
在O 1 時間內刪除鍊錶節點
題目 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 的時間刪除該節點。struct listnode void deletenode listnode plisthead,listnode ptobedeleted 演算法思路 一般我們是從頭節點開始遍歷,知道找到要刪除的節點的前面乙個節...