如何解决最小化排列总和的贪心算法
我有一个数组 {a1,a2,....,an}
(自然数),我需要构建一个贪心算法来找到一个 1....n 的排列 (i1,...in) 来最小化总和:{ {1}}。
当然我可以尝试所有这些并选择总和最小的那个(这将在 O(n!) 中给出正确的结果)。
我虽然贪婪的选择是按降序选择数字,但我不知道如何证明这是有效的。
P.S:这只是为了学习和训练,我不能“贪婪”地思考
解决方法
按降序选择数字是最佳的。
证明是通过对 n 进行归纳:假设有一个最优排列,并且最小的数不在最后一位。然后,交换位于最后位置的元素和最小的元素会减少总和。这与最优性假设相矛盾,因此我们必须将最小元素放在最后。由归纳假设,其他元素在前(n-1)位按降序排列。
n=1 的基本情况是微不足道的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。