一連の長い数値 (等しい長さ) の配列 - 0101101111、0111101111、0101101101 など。
0101101001 に最も近い一致を検索
OK、それは短いバージョンです。長いバージョンは、11 のはい (1) といいえ (0) の質問 (製品検索) を含むフォームです。データベースには n^r の解 = 2048 と完全に一致するものがない可能性があることがわかっているため、最も近い一致を見つけるか、場合によっては最も近い 2 つまたは 3 つの一致を見つける必要があります。
各位置の各数値を比較して結果をランク付けする必要があると思いますが、正しい方向に進んでいる場合でも、解決策に行き詰まっています.
ありがとう!!
以下のポップヌードルの回答に対して簡単なチェックを行いました... using $lookslike=11100110011; foreachを実行し、SQLを生成し、phpMyAdminで6つの「回答」のテーブルに対して実行しました。
回答は次のようにランク付けされました。
答え -- ランク
11100110011 -- 11
11100110010 -- 10
11100110000 -- 9
00000111010 -- 6
00000111111 -- 6
01101100110 -- 6
*ランキングの説明のために編集 - 11 試合中 11 試合、11 試合中 10 試合、11 試合中 9 試合、11 試合中 6 試合...
非常に素晴らしい。
複数選択回答の変更された PHP マニュアルの例を追加しました。
<?php
// Client Answers
$input = 'abcdbcdabcd';
// array of answers to check against
$answers = array('abcdbddabcd', 'abcbbcdabcd', 'abcdbcccccd');
// no shortest distance found, yet
$shortest = -1;
// loop through words to find the closest
foreach ($answers as $answer) {
// calculate the distance between the input word,
// and the current word
$lev = levenshtein($input, $answer);
// check for an exact match
if ($lev == 0) {
// closest word is this one (exact match)
$closest = $answer;
$shortest = 0;
// break out of the loop; we've found an exact match
break;
}
// if this distance is less than the next found shortest
// distance, OR if a next shortest word has not yet been found
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $answer;
$shortest = $lev;
}
}
echo "Input answer: $input\n" . "<br />";
if ($shortest == 0) {
echo "Exact match found: $closest\n" . "<br />";
} else {
echo "Possible Alternative: $closest?\n" . "<br />";
echo "Levenshtein Distance: $lev\n";
}
?>
戻り値:
入力回答: abcdbcdabcd
考えられる代替案: abcbbcdabcd?
レーベンシュタイン距離: 3