微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用质量度量实现回溯 n 路分区算法

如何解决使用质量度量实现回溯 n 路分区算法

我在过去的考试中遇到过类似这样的问题:

设 X 是一个有序(递增)整数数组。我们想将这些整数分组为 k 个连续的子序列,即 k 路分区。我们希望每个组都最小化一个质量函数,定义为每个组元素与该组平均值之间差异的总和。这定义了,我们需要一个回溯算法,修剪非最优解分支并返回最小化总成本的 k 路分区。

但是,这就是我所困惑的:

也就是说,我对 Antti ideia 的 Python 实现是这样的:

def get_best_partition(k_partition_index: int,k: int,values,partitions,best_partition,partitions_errors):
    if (k == len(partitions)):
        error = get_total_heterogeneity(values,partitions)
        partitions_errors.append(error)
        if error <= min(partitions_errors):
            partition_index = 0
            for partition in partitions:
                best_partition[partition_index] = partition
                partition_index += 1
        return
    
    for i in range(k_partition_index,len(values)):
        partitions[k] = i
        get_best_partition(i + 1,k + 1,partitions_errors)

它确实有效(至少它甚至对某些边界条件也有效),但我不确定为什么这是回溯,对我来说它看起来确实是详尽的搜索。我想就是这样。

非常感谢,社区。​​p>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。