Нечеткий алгоритм сортировки устойчивость слияния
Контекст
Я использую психологический тест, в котором пользователю предъявляются пары изображений, которые он должен указать, какие они предпочитают. Они отвечают на свои предпочтения с помощью клавиши 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 времени, и под "неправильным" я имею в виду не вводить свои истинные предпочтения, нажимая неправильную клавишу), и сортировка, кажется, работает хорошо в соответствии со следующими критериями:
- выходные результаты достаточно близки к пользовательским предпочтениям (моделируются).
- алгоритм останавливается вовремя. ~20 шагов для списка из 10 предметы.
Что я хотел бы знать, может ли алгоритм whizzkids там сказать мне, есть ли какой-либо шанс, что этот алгоритм полностью не остановит или не приблизит входные решения.
1 ответ:
Есть ли шанс, что этот алгоритм полностью не остановится?Нет. Алгоритм всегда останавливается, независимо от того, насколько плохи/неправильны/неудачны сравнения.
Алгоритм останавливается вовремя. ~20 шагов для списка из 10 пунктов.
Для 10 пунктов наилучший вариант-15 сравнений, худший-25 сравнений. В общем случае сортировка слиянием занимает в среднем
O(n log n)
шагов.Есть ли шанс, что это алгоритм полностью не сможет аппроксимировать входные решения
Это во многом зависит от вашего определения "достаточно близко к пользовательским предпочтениям". И, вероятно, важной ошибкой было бы предположить, что предпочтения пользователей вообще являются транзитивными отношениями.