“合并”算法名称/实现

时间:2011-12-07 21:39:09

标签: string algorithm

不太清楚如何描述这个,但我有一个我想玩的文字游戏,我想将其作为一个计算机程序来实现。

基本要点是你要看字母的值(A = 1..Z = 26),并将字母合并到尽可能少的字母,并且这些字母最接近彼此。

举个例子:

s t a c k

求和值

19 + 20 + 1 + 3 + 11 = 54

找到最少的字母数:

ceil(54/26) = 3

选择彼此最接近的字母

54/3 = 18

要显示的字母应为rrr

这恰好是一个简单的例子。例如,当您需要rrs时(如果您的初始字符串是'堆栈'),它会是什么样子?

这是否已经有了我可以查找和实现的名称?

1 个答案:

答案 0 :(得分:3)

我认为您的问题归结为:给定nk,找到数字r1r2,...,rk,以便sum(r1 + r2 + ... + rk) = nmax(r1, r2, ..., rk) - min(r1, r2, ..., rk)尽可能小。

选择解决方案r = floor(n / k),并将数字n mod k设为r + 1,其余为r

例如,如果n = 55k = 3(您的示例),我们floor(55/3) = 1855 mod 31,因此解决方案是{{1 }}

剩下的就是在数字和字母之间进行转换。