什么是近似算法?它適用于哪些問(wèn)題?這篇文章給你答案
點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號(hào)
重磅干貨,第一時(shí)間送達(dá)

點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號(hào)
重磅干貨,第一時(shí)間送達(dá)

來(lái)自丨機(jī)器之心
羅素曾說(shuō):所有精確科學(xué)都被近似思想所主宰。本文介紹了近似算法及其對(duì)某些標(biāo)準(zhǔn)問(wèn)題的適用性。

能夠在多項(xiàng)式時(shí)間內(nèi)高效運(yùn)行;
能夠給出最優(yōu)解;
對(duì)于每個(gè)問(wèn)題實(shí)例均有效。


子集和問(wèn)題:子集 X 的元素之和等于數(shù)字 W。
多路數(shù)字分割:給定整數(shù)參數(shù) W,確定如何將 X 分割成 W 個(gè)等額子集。
def find_partition(numbers):"""Separate the available numbers into two eqal sum series.Args:numbers: collection of numbers, for example list of integers.Returns:Two lists of numbers."""X = []Y = []sum_X = 0sum_Y = 0for n in sorted(numbers, reverse=True):if sum_X < sum_Y:X.append(n)sum_X = sum_X + nelse:Y.append(n)sum_Y = sum_Y + nreturn (X, Y)

int karmarkarKarpPartition(int[] baseArr) {// create max heapPriorityQueueheap = new PriorityQueue (baseArr.length, REVERSE_INT_CMP); for (int value : baseArr) {heap.add(value);}while (heap.size() > 1) {int val1 = heap.poll();int val2 = heap.poll();heap.add(val1 - val2);}return heap.poll();}
以降序方式排列數(shù)字;
用差值替換掉原來(lái)的數(shù)字,直到只有一個(gè)數(shù)字;
采用回溯算法,完成分區(qū)。




最先匹配遞減法
最優(yōu)匹配遞減法

推薦閱讀
關(guān)于程序員大白
程序員大白是一群哈工大,東北大學(xué),西湖大學(xué)和上海交通大學(xué)的碩士博士運(yùn)營(yíng)維護(hù)的號(hào),大家樂(lè)于分享高質(zhì)量文章,喜歡總結(jié)知識(shí),歡迎關(guān)注[程序員大白],大家一起學(xué)習(xí)進(jìn)步!
評(píng)論
圖片
表情
