Есть ли название для этого алгоритма?

Извиняюсь за не описательный вопрос; Если вы можете придумать лучший, я весь уши.

Я пишу немного Perl для реализации алгоритма, и код, который у меня есть, пахнет подозрительно. Поскольку у меня нет опыта работы в CS, у меня в заднем кармане не так много знаний о стандартных алгоритмах, но это похоже на то, что могло бы быть.

Позвольте мне описать то, что я делаю, в пути метафоры:

  • У вас есть конвейер с апельсинами. Апельсины проходят один за другим. У вас также есть неограниченный запас коробок в плоской упаковке.
  • Отметьте каждый апельсин. Если он гнилой, выбросьте его.
  • Если он хороший, положите его в ящик. Если у вас нет коробки, возьмите новую и соорудите ее.
  • Если в коробке 10 апельсинов, закройте ее и положите на поддон. Не конструируйте новый.
  • Повторяйте, пока у вас не кончатся апельсины
  • Если у вас есть собранный ящик с несколькими апельсинами, закройте его и положите на поддон

Итак, у нас есть алгоритм обработки элементов в списке, если они соответствуют некоторым критериям, их следует добавить в структуру, которая, когда она соответствует некоторым другим критериям, должна быть «закрыта». Кроме того, после обработки списка, если есть «открытая» структура, Вне цикла было бы еще одно условие для закрытия любых незавершенных структур.

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

  1. Это описание известного алгоритма? Если да, то есть ли у него имя?
  2. Есть ли эффективный способ объединить действие «закрытие рамки» в одном месте, вместо того, чтобы один раз внутри цикла и один раз за его пределами?

I пометил это как «Perl», потому что подходы Perlish представляют интерес, но мне было бы интересно услышать о других языках, в которых есть изящные решения этой проблемы.

20
задан RBerteig 11 December 2010 в 09:12
поделиться