我有一个单词列表,想要使用这个单词列表在PHP中解密单词。
似乎PHP没有内置的函数可以实现这一点。所以,有人能否提供一个好的算法来完成这个任务,或者至少指点我正确的方向?
编辑:添加示例
基本上,我说的是我有一个单词列表:
apple
banana
orange
然后,我得到了一堆杂乱无序的字母。
pplea
nanaba
eroang
我有一个单词列表,想要使用这个单词列表在PHP中解密单词。
似乎PHP没有内置的函数可以实现这一点。所以,有人能否提供一个好的算法来完成这个任务,或者至少指点我正确的方向?
编辑:添加示例
基本上,我说的是我有一个单词列表:
apple
banana
orange
pplea
nanaba
eroang
foreach ($list as $word)
{
if (count_chars($scrambled_word,1) == count_chars($word,1))
echo "$word\n";
}
编辑:一个简单的优化是将count_chars($scrambled_word,1)
移出循环,因为它从不改变:
$letters = count_chars($scrambled_word,1)
foreach ($list as $word)
{
if ($letters == count_chars($word,1))
echo "$word\n";
}
strtolower()
。 - Xeoncross在IT技术中,有一种解密方式可以在O(log p + n)
的时间复杂度内完成。
p = size of dictionary
n = length of word to be unscrambled
O(p)
空间:
1.使用字典D
创建一个关联列表按字母排序的单词L
,它的大小最多为 p
,因为每个单词有一个排序版本。
2.将另一列与L
相关联,并用整数的数字哈希值进行关联。哈希值可以在区间[0,c^k-1]
内取值。
3.对于L
中的每个单词,使用以下函数生成其哈希值:hash(word) = 0 if word is empty or (c^i + hash(remaining substring of the word))
i
是第一个字母的零基础字母索引。O(n)
的时间复杂度下确定问题单词的按字母排序的版本的哈希值h
。
2.在O(log p)
的时间复杂度下,在L
中搜索哈希值。
3.在O(n)
的时间复杂度下,列出长度为n
的j
个相关单词。j
可能会以O(n!)
的速度增长,但我认为这并不适用于已知的口语语言。 - Timothy Swan慢速选项是生成一个乱序单词中所有字母的排列组合,然后通过pspell_check()进行探测。
如果您可以使用原始字典文本文件,则最佳选项是只需使用正则表达式进行扫描:
$dict = file_get_contents("words.txt"); // one word per line
$n = strlen($word);
if (preg_match('/^[$word]{$n}$/im', $dict, $match)) {
print $match[0];
}
我非常确定PCRE在搜索排列方面比PHP和猜测方法要快得多。
$words = array('hello', 'food', 'stuff', 'happy', 'fast');
$scrambled_word = 'oehll';
foreach ($words as $word)
{
// Same length?
if (strlen($scrambled_word) === strlen($word))
{
// Convert to an array and match
if( ! array_diff(str_split($word), str_split($scrambled_word)))
{
print "Your word is: $word";
}
}
}
function asciiSum($word) {
$characters = str_split(strtolower($word));
$sum = 0;
foreach($characters as $character) {
$sum += ord($character);
}
return $sum;
}
试试这些
http://www.php.net/manual/en/function.similar-text.php http://www.php.net/manual/en/function.soundex.php http://www.php.net/manual/en/function.levenshtein.php