将字母分配到 NxM 网格,以最小化在给定单词列表中频繁出现的字母对之间的距离

问题描述 投票:0回答:1

考虑到输入大量单词和 NxM 尺寸,我必须创建一种算法,为移动设备设计最佳(如果可能,或最好之一)单指 NxM 键盘布局。这意味着,例如,给定键盘上的一个字母,最好有更接近的字母,您知道接下来很可能会出现。另一种说法可能是键盘的中间部分最好从手指到达,因此它应该是最常见的字母,因此最重要的字母应该集中在中间,同时您考虑我之前所说的关于您有更接近的字母您知道接下来很有可能会出现,并且您还考虑了 NxM 键盘布局。通过读取输入单词并将其存储在数据结构中,可以很容易地获得每个字母的频率以及某个字母之后的下一个字母,但是一旦我有了这个,我不知道如何执行这个算法。

显然,您必须在键盘布局中找到最佳的字母组合,因此,如果您通过暴力来做到这一点,那么这是指数级的,并且不可能以有效的方式做到这一点。但即使我可以,我什至不知道如何判断每种组合并知道哪一个是最好的。我想把它做成一个图表并得到一些东西,甚至是谷歌的 pagerank 算法,它有相似之处,但我陷入了困境。我还考虑过遗传算法,它可以非常有效地找到最好的或最好的之一,这就足够了。我不知道我是否清楚地解释了自己,如果没有,我会尝试用不同的词语或其他方式来解释。谢谢。

algorithm graph genetic-algorithm greedy genetic-programming
1个回答
0
投票

假设:常用字母最好位于键盘中央

  • 将乐谱分配给键盘位置 ( p )

    Score(xp,yp) = abs(N/2 - xp) + abs(M/2 - yp )

  • 为常见字母评分

    • 忽略配对
    • 按照频率递增的顺序对字母进行排序
    • 排序字母中 l 的
    • score( l ) = index
  • 目标函数

    O = sum over all l ( score( l ) * score ( xl, yl )

  • 使用线性规划优化 O

© www.soinside.com 2019 - 2024. All rights reserved.