Извините за непонятный вопрос; если вы можете думать о лучшем, я все уши.
Я пишу некоторый Perl для реализации алгоритма и кода, который у меня есть запах. Поскольку у меня нет фона CS, у меня нет большого количества стандартных алгоритмов в моем заднем кармане, но это похоже на то, что может быть.
Позвольте мне описать, что я делаю в метафоре:
- У вас есть конвейер с апельсинами. Апельсины проходят один за другим. У вас также есть неограниченная поставка плоских упакованных ящиков.
- Для каждого апельсина проверьте его. Если он гниет, утилизируйте его
- Если это хорошо, поместите его в коробку. Если у вас нет коробки, возьмите новую и создайте ее.
- Если в коробке есть 10 апельсинов, закройте его и поместите на поддон. Не создавайте новую.
- Повторяйте, пока у вас не будет больше апельсинов.
- Если у вас есть построенная коробка с некоторыми апельсинами, закройте ее и положите на поддон
Итак, у нас есть алгоритм обработки элементов в списке, если они соответствуют некоторым критериям, их следует добавить в структуру, которая, когда она удовлетворяет некоторым другим критериям, должна быть "закрыта". Кроме того, как только список будет обработан, если есть "открытая" структура, он также должен быть "закрыт".
Наивно, я предполагаю, что алгоритм состоит из цикла, действующего над списком, с условием, чтобы увидеть, принадлежит ли элемент списка в структуре и условно видеть, должна ли структура быть "закрыта". Вне цикла, было бы еще одно условие для закрытия любых выдающихся структур.
Итак, вот мои вопросы:
- Это описание известного алгоритма? Если да, имеет ли это имя?
- Есть ли эффективный способ объединить активность "закрытия ящика" в одно место, а не один раз внутри цикла и один раз за пределами цикла?
Я отметил это как "Perl", потому что подходы Perlish представляют интерес, но мне было бы интересно услышать любые другие языки, на которых есть четкие решения.