【问题标题】:PHP T9 Dictionary Implementation using Trie [closed]使用 Trie 的 PHP T9 字典实现 [关闭]
【发布时间】:2014-08-19 06:37:38
【问题描述】:

我希望在 PHP 中简化 T9 移动输入法的实现,即使用 Trie 或任何其他简单且最佳的解决方案。

我们将不胜感激。

【问题讨论】:

  • 很高兴你想要它。你的问题是什么?你试过什么?
  • 我想要使用 PHP 的简单且最好的解决方案。我用过特里。所以我想知道是否有任何其他解决方案或优化的 Trie 实现。希望你明白我的问题...谢谢
  • 我在 PHP 中有一个 Trie implementation,但是虽然 Tries 搜索速度很快,但加载速度很慢,所以它可能不是您正在寻找的解决方案
  • @MarkBaker 感谢您的建议。是的,我知道尝试加载速度很慢,如果我可以优化尝试或使用其他一些有效的解决方案,我想克服什么。

标签: php trie t9


【解决方案1】:

它可能效率不高,并且可能有一些更好的解决方案来解决您的问题,并且它也有一些限制,例如如果您输入的数字超过 15 位,它可能无法正常工作。但我只是试图在不使用 Tries 的情况下分享我的想法,它可能会给你一些想法。请尝试分享您的经验。

<?php

$T9Array = array(
    2 => array('a', 'b', 'c'),
    3 => array('d', 'e', 'f'),
    4 => array('g', 'h', 'i'),
    5 => array('j', 'k', 'l'),
    6 => array('m', 'n', 'o'),
    7 => array('p', 'q', 'r', 's'),
    8 => array('t', 'u', 'v'),
    9 => array('w', 'x', 'y', 'z')
);

function search_combination($input)
{
    global $T9Array;
    if (! is_numeric($input))
        return false;
    $arr = str_split($input);
    $total = 1;
    for($a = count($arr) - 1; $a >= 0; $a--)
    {
        $total *= count($T9Array[$arr[$a]]);
        $t[$a] = $total;
    }
    sort($t);
    for ($b = 0; $b < count($arr); $b++)
    {
        $k = $l = 0;
        $j = count($arr) - ($b + 2);
        for ($c = 0; $c < $total; $c++)
        {
            $ret[$c] .= $T9Array[$arr[$b]][$l];
            if ($j >= 0 && $c == ($t[$j] * ($k+1)) - 1 || $j < 0)
            {
                $k++;
                if ($l < count($T9Array[$arr[$b]]) - 1)
                    $l++;
                else
                    $l = 0;
            }
        }
    }
    return $ret;
}

function search_combination_str($string)
{
    global $T9Array;
    if (empty($string))
        return false;
    $arr = str_split(strtolower($string));
    foreach ($arr as $a)
    {
        foreach ($T9Array as $key => $val)
        {
            $tmp = array_keys($val, $a);
            if ($tmp)
                $conv .= $key;
        }
    }
    return search_combination($conv);
}

?>

【讨论】:

  • 谢谢你说可能有更好的解决方案,但它至少提供了一些想法。将在这里分享我的经验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
相关资源
最近更新 更多