2012-02-20 3 views
1

Я создаю предварительный загрузчик изображений и пытаюсь создать функцию взвешивания, чтобы определить, какое изображение загрузить дальше.Image loader weighting algorithm

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо.

ответ

0

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

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 
} 

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

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 является выбранным направлением (либо больше или меньшие индексы)

+0

Спасибо за ваш ввод, проблема, с которой я сталкиваюсь в этом алгоритме, заключается в том, что весовое значение достигает 0,9 после того, как пользователь повторно просматривает изображения с помощью более высокий индекс, как только пользователь переходит к изображению с более низким индексом, взвешивание неожиданно способствует предварительной загрузке изображений с более низкими индексами. Я бы хотел, чтобы он по-прежнему поддерживал изображения с более высокими показателями (на основе шаблонов пользователей, которые все еще чаще возникают), тем более. –

+0

Только что я осознал, что это неправильно, и предыдущий вес должен остановить взвешивающие знаки переворота ...Прибыль приходит, я получаю более 90 изображений, и пользователь может пройти любой путь через них, которые они хотят (может прыгать до 20 из 3), я загружаю сразу несколько изображений, и это помогает мне разобраться, как распределить загружая их, поэтому пользователь с меньшей вероятностью увидит панель загрузки. –

+0

просто убедитесь, что пользователи мобильных телефонов, которые платят за каждый МБ, не загружают много невидимых изображений, а затем ненавидят вас :) – Aprillion

Смежные вопросы