今天我开始看了第四卷的组合问题的开始,组合问题一般是分为五种:
1,存在问题:符合问题的模式一共有多少种。
2,构造问题:如果存在排列X,你怎么快速的找到。
3,枚举问题:多少种不同的排列X。
4,生成问题:如何系统的生成所有的X1,X2,...,Xn。
5,优化问题:给定目标函数f,何种排列可以使f(X)的值最大或者最小。
组合问题涉及很大的数据量,举个例子:
对象为2n个数,{1,1,2,2,...,n,n},我们想要把这些数排成一排,使数字k的两次出现恰好相隔k个数。
这个问题成为郎福德对问题,读者可以自己试试有多少对,我列出来:
当n=3 有1。
当n=7有26。
当n=11有17792.
当n=15有39809640.
当n=19有256814891280.
当n=23有3799455942515488.
其中,当最后一种情况,如果有一台每秒处理一百万条指令的计算机,需要连续不停的运行1500年。
另外当n=100时,虽然计算机发展的速度很猛,也可能永远不被人知道了。这就是问什么我们得学习组合算法,用来解决大规模问题!