两个组合优化问题及算法

最近看到两道编程题,有点意思,不过网上看了一下,虽然有一些人写出了算法,但是感觉算法思想表述的都不够清晰,特别是都是直接上结论,然后证明这么做是对的。

我不大喜欢这种表述方式,尝试着以更容易理解的"顺向思维",没错,不是什么"逆向思维",就是正常的思路来推导一下求解过程.

①把数组排成最小的数

输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。

http://blog.csdn.net/wuzhekai1985/article/details/6704902已经给出了算法过程,并且证明了算法是对的,这算法就是定义a与b的大小关系,若ab<ba,则a<b.然后按照这种定义的顺序把最小的排在最前边就行了.

那么,我们是如何想到这种算法的呢?

首先随便写出一个方案,我们考察这个方案是否能够优化,如果能应该怎么做?

比如给定一个方案bca,我们考虑这个数字能否通过优化变得更小呢?

考虑最简单易行的优化方式----相邻元素交换,如果bca的前两位交换顺序变为cba之后整个数字变小了,那么应该满足什么条件呢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值