排列数字以形成最大数字-算法证明

犀利的人

在这种情况下,存在已知的算法问题,给定数字数组,例如[1, 20, 3, 14]以最大可能的方式排列数字320141

使用以下算法,SO和其他站点上有很多解决方案:

String[] strs = new String[nums.length];
for(int i=0; i<nums.length; i++){
    strs[i] = String.valueOf(nums[i]);
}

Arrays.sort(strs, new Comparator<String>(){
    public int compare(String s1, String s2){
        String leftRight = s1+s2;
        String rightLeft = s2+s1;
        return -leftRight.compareTo(rightLeft);

    }
});

StringBuilder sb = new StringBuilder();
for(String s: strs){
    sb.append(s);
}

return sb.toString();

当然可以,但是我找不到该算法的正式证明。关于quora有一个答案,但我不会称其为正式证明。

谁能给我一个草图或参考一些书或文章?如何从原始问题中获得这一解决方案?

PS我试图解决原始问题,但是我的解决方案是错误的,我无法正确解决,现在我无法完全理解解决方案。

lex82

关于表示法:我将使用管道将数字分开,以便更容易同时查看数字序列和所得数字:3 | 20 | 14 | 1

现在,让我们假设由compare函数定义的关系(运算符表示的R)<=是一个总阶。由表达式确定

-(a+b).compareTo(b+a)

直观地说,如果我们有两个数字ab,b | a大于a | b,则b的等级应高于a,即它应出现在解决方案a的左侧如果a | b大于b | a,则相反。如果a | b = b | a,则顺序无关紧要。

需要注意的重要一件事是,这种关系不仅影响孤立考虑的两个数字ab,而且还告诉我们有关两个数字所嵌入的结果数字的一些信息:

如果a <= b,则x | a | b | y <= x | b | a | y

其中xy是任意长度的数字。换句话说:如果我们有一个数字序列,并且将两个相邻的数字ab交换a <= b,那么之后的结果数将更大或相等。

示例:3 | 14 | 20 | 1 <= 3 | 20 | 14 | 1,因为14 <= 20

现在,我们可以得出这样的假设:解不是关系R所暗示的解:一个矛盾:让我们假定解是不符合R的特定序列由于- [R是一个总的次序,我们可以重新排列数字来匹配ř通过交换相邻的元件,直至该命令符合ř可以将这种重新排序与冒泡排序进行比较。但是,在每次导致我们获得新订单的交换操作中,结果数都会增加!这显然是矛盾的,因此原始顺序不能成为解决方案。

剩下要说明的是R是一个总阶,即它是传递的,反对称的和总的。由于您要求提供证明的草图,因此我将省略此部分。基本部分是证明可传递性,即

a <= bb <= c表示a <= c

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何证明“将给定数组成最大数”算法的正确性?

来自分类Dev

给定数字可以形成的最大数字

来自分类Dev

用归纳证明线性最大子阵列算法

来自分类Dev

形成被5和6整除的最大数字

来自分类Dev

形成被5和6整除的最大数字

来自分类Dev

使用“基于元素的K个数组的排列数”算法,数组中第K个最大数

来自分类Dev

返回数组中的最大数字

来自分类Dev

使用最大数量分割数字?

来自分类Dev

查找最大数字并加1

来自分类Dev

显示最大数量的数字

来自分类Dev

算法:我可以达到的最大数量

来自分类Dev

从MathRandom生成的数字中打印最大数字

来自分类Dev

如何从数字输入文件中找到最大数字

来自分类Dev

算法分析-匿名函数证明

来自分类Dev

证明算法的上限和下限

来自分类Dev

哪种算法返回的形式证明

来自分类Dev

如何获得文件中的最大数字?

来自分类Dev

Decimal类可以处理的最大数字是多少?

来自分类Dev

通过缩进使选择中的最大数字居中对齐

来自分类Dev

根据所有最大数字排序

来自分类Dev

动态求和每行5个最大数字

来自分类Dev

如何从数字字符中选择最大数值?

来自分类Dev

如何开始.div从div id到最大数字?

来自分类Dev

Javascript-使用循环的数组中的最大数字

来自分类Dev

如何获得文件中的最大数字?

来自分类Dev

如何从用户输入中打印最大数字

来自分类Dev

找到Bash算术可以处理的最大数字?

来自分类Dev

给定范围内的最大数字因子总和

来自分类Dev

在javascript中使用数组查找最大数字