[原创]【动态规划求解“键盘上字母分配”问题】

来源:互联网 发布:电话数据采集器 编辑:程序博客网 时间:2024/05/19 16:22
动态规划求解“键盘上字母分配”问题
一、问题背景
    随着手机的普及,手机短信的交流方式也越来越流行(注:此处的短信主要指的是英文短信)。如下图1,就是标准手机键盘上用来打出26个字母(a~z)的按键布局。由于每个键上有多个字母,我们打字时常会遇到的情况是,某些常用字母可能需要按几下键才能打出来。比如字母“s”,需要按四次键才能选中。如果我们把字母按照图2的方式分配到各个按键上,那么打字就会方便一些,因为只要按两次键就可以选中“s”,虽然打出p、q需要的按键次数增加了,但是在英文中p、q的出现的频率比“s”小的多,于是这样做总的来说是值得的。
 
1
 
2
abc
3
def
4
ghi
5
jkl
6
mno
7
pqrs
8
tuv
9
wxyz
*
 
0
space
#
 
                
 
 
 
 
  
1
 
2
abcd
3
efg
4
hijk
5
lm
6
nopq
7
rs
8
tuv
9
wxyz
*
 
0
space
#
 
                 图1                              图2
 
二、问题描述
    类似地,现有L个按序排列的字母(广义,可包含其它字符,且第i个字母具有下标i,1 <= i <= L),K个按序排列的按键,(1 <= K <= L),以及每个字母使用的频率Fi 。将这L个字母依次分配到这K个键上,字母顺序固定不变,且每个键上至少分配一个字母,问怎样分配能使得在通常情况下打字的总代价最小?设Pi表示第i个字母在其所在按键上处于第Pi个位置(P>= 1,比如图1中“s”在按键7上的位置为4),则可以定义第i个字母的代价为:
PriceiFi * Pi
 
三、问题分析与算法设计
详见以下word文档:
http://download1.csdn.net/down3/20070519/19140346679.doc