Рассматривая элементы вместе, которые приблизительно равны

У нас есть некоторые элементы, характеризующиеся некоторым ключевым значением.

Мы рассматриваем элементы в порядке убывания значения ключа. Итак, если у нас есть десять элементов с ключевыми значениями, 4, 5, 7, 10, 2, 8, 9, 10, 8,5, 9, мы сортируем элементы по их ключевым значениям и рассматриваем элементы с одинаковыми ключевыми значениями вместе.

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

Теперь мы немного ослабим ограничение, заключающееся в том, что одинаковые значения ключей должны рассматриваться вместе, и будем рассматривать элементы с примерно одинаковыми значениями ключей вместе. Итак, когда мы говорим, что в отсортированном порядке второй элемент находится в пределах 10% от первого, их следует рассматривать вместе.

Итак, теперь элементы со значениями ключа 10, 10, 9, 9 нужно рассматривать вместе. И при условии, что здесь не удален один элемент со значением ключа 9, его придется считать снова с 8.5.

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

  1. Отсортируйте элементы в порядке убывания ключевых значений.
  2. Для первого элемента в заказе найдите допустимое отклонение 10%. Найдите элементы, попадающие в это окно отклонения. Итак, здесь мы считаем, 10, 10, 9, 9, в этом окне.
  3. Если какой-либо из элементов проходит фитнес-функцию, удалите его из списка.
  4. Сформируйте следующее окно и повторите цикл.

Вот тут моя идея затуманивается. Как сформировать начало следующего окна? Если отсортированные значения 10, 10, 9, 9, 8,5, 8 ..., и в первом окне учтены 10, 10, 9, 9, то следующее окно должно начинаться с 9 и состоять из 9, 8 ,5.

Всегда ли достаточно запускать следующее окно последним значением предыдущего окна? Я привел несколько контрпримеров, и ни один из них не опроверг мою гипотезу. Но что, если обе девятки передают фитнес-функцию и удаляются из списка, какое значение открывает следующее окно? Следующий доступный в отсортированном списке?

Итак, мои вопросы,

  1. Верна ли гипотеза о запуске следующего окна с последним значением (и следующим, доступным в случае его удаления) предыдущего окна?
  2. Есть ли лучший алгоритм для всего процесса?

person Masroor    schedule 04.05.2013    source источник
comment
Почему следующее окно начинается с 9? Почему не вторые 10?   -  person Vaughn Cato    schedule 04.05.2013
comment
Это зависит от вашей РЕАЛЬНОЙ проблемы. Теперь это выглядит как проблема XY perlmonks.org/?node_id=542341   -  person MBo    schedule 04.05.2013
comment
Вы пытаетесь написать алгоритм кластеризации? например en.wikipedia.org/wiki/K-means_clustering   -  person Ian Mercer    schedule 04.05.2013
comment
@IanMercer Нет, я не пытаюсь написать алгоритм кластеризации. Спасибо.   -  person Masroor    schedule 04.05.2013


Ответы (1)


Нет, вероятно, неправильно запускать окно с последнего значения предыдущего окна.

Попробуйте сначала начать с середины последнего окна; затем динамически опускайте верхний край, когда вы повторяете нижний край вниз, чтобы поддерживать соответствующий «промежуток» для окна.


Неясно, представляет ли описанная вами фитнес-функция и «удаление из списка» принятие идеальных элементов, отклонение или что-то еще.

Идеальная правильная семантика для вашего окна может зависеть от точной спецификации/понимания того, что представляет собой эта общая операция, и в вашем вопросе этого очень не хватало.

person Thomas W    schedule 04.05.2013