環境
ユーザーに画像のペアを提示し、どちらを好むかを示す心理テストを実装しています。A キーまたは L キーのいずれかを使用して、好みに応じて応答します。画像の数が非常に多い場合、考えられるすべてのペアを比較することは、個人 (O(n^2)) にとってかなり要求が厳しいものです。
質問
ここではマージソートアルゴリズムをハックして、比較の数を劇的に減らしました。結果は次のとおりです。
function mergeSort(arr)
{
if (arr.length < 2)
return arr;
var middle = parseInt(arr.length / 2);
var left = arr.slice(0, middle);
var right = arr.slice(middle, arr.length);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right)
{
var result = [];
while (left.length && right.length) {
if (getUserPreference(left[0],right[0])) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length)
result.push(left.shift());
while (right.length)
result.push(right.shift());
return result;
}
関数getUserPreference
がユーザーに委任する場所。私は複数のシミュレーションを実行しました(応答が偶然に「間違った」〜1/3の時間になる可能性があり、「間違った」とは、間違ったキーを押して真の好みを入力しないことを意味します)、ソートは次のようにうまく機能するようです次の基準:
- 出力結果は、ユーザーの好みに十分近い (シミュレートされた)。
- アルゴリズムは適切なタイミングで停止します。10項目のリストの場合、最大20ステップ。
私が知りたいのは、このアルゴリズムが入力ソリューションを停止または近似することに完全に失敗する可能性があるかどうか、そこにいるアルゴリズムの専門家が教えてくれるかどうかです。