Алгоритм взвешивания загрузчика изображений - PullRequest
1 голос
/ 20 февраля 2012

Я создаю предварительный загрузчик изображений и пытаюсь создать весовую функцию, чтобы определить, какое изображение загрузить следующим.

Вот краткое описание моих потребностей:

У меня есть массив изображений в последовательном порядке. У меня есть переменные веса, которые должны иметь значение от -1 до 1.

  • Весовое значение -1 означает загрузку только тех изображений, индекс которых ниже, чем у ранее загруженного изображения.

  • Взвешивание 1 означает загрузку только тех изображений, индекс которых больше, чем у ранее загруженного изображения.

  • Вес 0 означает равномерное распределение загрузки изображений.

  • Десятичное взвешивание, например (0,6), означает загрузку изображений с индексом, превышающим предыдущее изображение, в 60% случаев, а те, которые ниже, в 40% случаев.

Взвешивание всегда начинается с 0. Взвешивание при каждом обновлении обеспечивается индексом нового изображения для просмотра и индексом последнего просмотренного изображения.

Я хочу изменить вес при каждом просмотре изображения с учетом:

  • , больше ли новый индекс, чем старый индекс (пользователь имеет пошел вперед)

  • количество изображений под указанным индексом в сравнении с числом выше.

  • предыдущее взвешивание (чем больше распределение склоняется к одному концу шкалы, тем медленнее увеличивается взвешивание к этому концу и тем больше оно увеличивается к другому).

Надеюсь, я прояснил проблему достаточно. Кто-нибудь знает алгоритм или формулу, которая может помочь обеспечить эту функцию?

Спасибо.

1 Ответ

0 голосов
/ 22 февраля 2012

я начал думать так:

function weighting(not_yet_preloaded_indices_array, 
                   current_index,
                   previous_index,
                   previous_weighting) {
    count_of_all = not_yet_preloaded_indices_array.length()
    count_of_next = count_bigger(not_yet_preloaded_indices_array, current_index)
    count_of_previous = count_of_all - count_of_next

     if (count_of_previous = 0) {
        return 1
    } else if (count_of_next = 0) {
        return -1
    }

    if (current_index >= previous_index) {
        direction = 1
        modifier = count_of_next / count_of_all
    } else {
        direction = -1
        modifier = count_of_previous / count_of_all
    }

    return (previous_weighting + direction * modifier) / 2
}

но я сомневаюсь, что взвешивание принесет пользу пользователям больше, чем простая предварительная загрузка, например ::10000

1. preload 1 next image  (if not already preloaded)
2. preload 1 previous image  (if not already preloaded)
3. preload 5 or 10 next images  (only the ones not already preloaded)

где next - выбранное направление (большие или меньшие индексы)

...