什么是近似算法?它适用于哪些问题?这篇文章给你答案
程序员大白
共 3219字,需浏览 7分钟
·
2022-06-11 23:15
点击上方“程序员大白”,选择“星标”公众号
重磅干货,第一时间送达
点击上方“程序员大白”,选择“星标”公众号
重磅干货,第一时间送达
来自丨机器之心
罗素曾说:所有精确科学都被近似思想所主宰。本文介绍了近似算法及其对某些标准问题的适用性。
能够在多项式时间内高效运行;
能够给出最优解;
对于每个问题实例均有效。
子集和问题:子集 X 的元素之和等于数字 W。
多路数字分割:给定整数参数 W,确定如何将 X 分割成 W 个等额子集。
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 = 0
sum_Y = 0
for n in sorted(numbers, reverse=True):
if sum_X < sum_Y:
X.append(n)
sum_X = sum_X + n
else:
Y.append(n)
sum_Y = sum_Y + n
return (X, Y)
int karmarkarKarpPartition(int[] baseArr) {
// create max heap
PriorityQueue
heap = 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();
}
以降序方式排列数字;
用差值替换掉原来的数字,直到只有一个数字;
采用回溯算法,完成分区。
最先匹配递减法
最优匹配递减法
推荐阅读
关于程序员大白
程序员大白是一群哈工大,东北大学,西湖大学和上海交通大学的硕士博士运营维护的号,大家乐于分享高质量文章,喜欢总结知识,欢迎关注[程序员大白],大家一起学习进步!
评论