日期:2014-05-19  浏览次数:20649 次

求一个算法的最优写法
默认java实现吧,要求如下:
现有N条数据(为实现方便,N设为1000吧,并且数据无重复),共分为M个类型(M设为100吧)
现在我要输出这N条数据,一条一条的输出,要求任意相临的两条数据类型都不一样,并且,任意同类型的两条数据间隔要尽可能的离得最远,并且同类型的数据不考虑先后顺序(这个可能不好理解,下面我用实例说明)
为举例说明方便,我N为5吧,M为3,类型用数据类型,数字、字母、中文表示,数据如下:
1.123
2.abc
3.中文1
4.中文2
5.456
我按上面的要求排完序后,输出如下:
1.123
2.中文1
3.abc
4.中文2
5.456

1.中文1
2.123
3.abc
4.456
5.中文2
下面输出不要求:
1.中文1
2.123
3.abc
4.中文2
5.456
为何不合要求呢?因为,没有做到“最远距离”原则,此时,最远的距离只隔2条数据,而上面符合要求的“最远距离”隔了3条数据,所以正确。
当然了,这只是5数据,写起来不难,当N条数据时,就没那么简单了吧?
大虾們可以发挥了,再提醒下,注意红色字体的理解,任意同类型,不是说把其中的一个类型两条数据隔得最远就好了,还有兼顾别的类型。
还不大理解本算法的,可以跟贴发问。
本人将选出最佳的那种算法100分奖励(或公认最佳的那种算法),其实优秀的看情况奖励了,呵。
分不是目的,主要还是看下练下身手吧(话说如果我是面试官就最爱考这样的题,呵,离题了,可以发挥了)
------解决方案--------------------
这个命题矛盾的,建议你收回。
------解决方案--------------------
现有N条数据(为实现方便,N设为1000吧,并且数据无重复),共分为M个类型(M设为100吧)

比较奇怪的是怎么去评价最终结果是否正确,尤其是M有100个的情况下。

比如原始数据是:
1.1111
2.2222
3.AA
4.BB

结果一:
1.1111
3.AA
2.2222
4.BB

结果二:
1.1111
3.AA
4.BB
2.2222


如何判定哪种更好?是否按照所有类型中最短间隔来评价?也就是结果一是1;而结果二是0?
------解决方案--------------------
路过,打下酱油,这个貌似没有一个最大间隔吧!