設計演算法,在O n 時間內求解分數揹包問題

2021-07-09 16:04:45 字數 409 閱讀 2960

設揹包的最大承重是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 演算法思路 一般我們是從頭節點開始遍歷,知道找到要刪除的節點的前面乙個節...