计算机算法设计与分析(算法实现题4)
4-2 最优合并问题
问题描述: 给定k个排好序的序列s1,s2,s3,…,sk,用2路合并算法将这k个序列合并成一个序列。假设采用的2路合并算法合并2个长度分别为 m 和 n 的序列需要m+n-1次比较。试设定一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并序列,使所需的总比较次数最多。
算法设计: 对于给定的k个待合序列,计算最多比较次数和最少比较次数合并方案。
具体代码实现:分为一个主方法,一个随机数产生方法,两个排序方法,两个合并序列方法
import java. util. Random;
import java. util. Scanner;
public class Realize4_2 {
public static void main ( String[ ] args) {
Integer[ ] produceNum = produceNum ( ) ;
Integer[ ] sortMaxToMinArr = sortMaxToMinArr ( produceNum) ;
designFormulasMax ( sortMaxToMinArr) ;
Integer[ ] sortMinToMaxArr = sortMinToMaxArr ( produceNum) ;
designFormulasMin ( sortMinToMaxArr) ;
}
public static Integer[ ] produceNum ( ) {
System. out. println ( "请输入需要合并序列的个数 k:" ) ;
Scanner scanner = new Scanner ( System. in) ;
Integer num = Integer. valueOf ( scanner. next ( ) ) ;
Integer[ ] arr = new Integer [ num] ;
for ( int i = 0 ; i < num; i++ ) {
Random random