Как реализовать приоритетный сбор - PullRequest
0 голосов
/ 03 ноября 2010

Мне нужно реализовать приоритетную коллекцию.

Предполагая, что в коллекции есть три следующих значения (и их приоритеты):

thisIsUrgent = Priority.High
thisIsImportant = Priority.Medium
thisIsBoring = Priority.Low

Я хочу использовать MoveNext(), чтобы просмотреть коллекцию и получить другое значение.
Предполагая, что я зацикливаюсь десять раз, каждый раз при выводе значения из MoveNext() желаемый результат будет:

thisIsUrgent

thisIsImportant

thisIsUrgent

thisIsUrgent

thisIsBoring

thisIsImportant

thisIsUrgent

thisIsUrgent

thisIsImportant

thisIsBoring

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

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 03 ноября 2010

самый простой подход - иметь 3 коллекции за одним интерфейсом. При вызове MoveNext проверьте тот, который имеет наивысший приоритет, если есть сообщения, возвращайте их, пока очередь не опустеет. Затем все ниже и ниже. Затем вы можете улучшить алгоритм выбора следующей очереди, например, реализовать вероятностную.

В вашем конкретном случае вы должны использовать вероятностное планирование.

  • Urgent имеет 5/10 = 0.5
  • Medium имеет 0.3
  • Low имеет 0.2

На каждом ходу генерировать случайное число в диапазоне [0; 1]. если значение попадает в [0; 0,5], выберите из очереди Urgent, если в [0,5; 0,8], то Medium, [0,8; 1] -> Low;

1 голос
/ 03 ноября 2010

Используйте 3 набора, по одному для каждого приоритета, как говорит Андрей.

Затем, когда вы хотите получить следующее задание, выберите случайное число от 1 до 9.

Получить следующееЗадача из соответствующей коллекции выглядит следующим образом:

1–5: высокий приоритет

6–8: обычный приоритет

9: низкий приоритет

1 голос
/ 03 ноября 2010
0 голосов
/ 03 ноября 2010

Возможно, вы сможете прояснить свой вопрос немного лучше; не сразу понятно, почему вы должны выводить данные в определенном порядке. Данные в одной коллекции или несколько коллекций?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...