что же там оптимизировать, спросите вы? сейчас расскажу:
⁃ есть куча грязной посуды в раковине
⁃ надо её загрузить в посудомойку
⁃ чтобы всё влезло
⁃ и чтобы всё промылось
вот мы всё загрузили, оно помылось, настал финальный этап — разгрузка посуды и её раскладка по своим местам в ящиках и шкафах. и вот тут всплывает ещё одно — неявное — требование к процессу: упорядочивание.
ведь (когда они не в мойке и не в раковине) вилки живут с вилками, ложки — с ложками; глубокие тарелки с одной стороны, отдельно от плоских. у кастрюль и плошек тоже есть свои места.
и вот в момент разгрузки было удобно (читай, оптимально), чтобы посуда была предварительно отсортирована в посудомойке по месту хранения.
сравним две последовательности разгрузки:
ложка → вилка → нож → нож → вилка → ложка
ложка → ложка → вилка → вилка → нож → нож
во втором случае мы можем взять сразу несколько ложек и одним движением положить их на своё место, вместо того, чтобы грузить по одной ложке, каждый раз тратив время на поиск к месту их хранения.
проницательный читатель мог узнать применяемые методы: батчинг и сокращение обращений к рандомному месту хранения.
можно пойти дальше и провести аналогии в выборе момента для упорядочивания элементов с двумя известными известными подходами: запись inplace в B-Tree или append-only LSM; то есть либо мы заранее оптимально раскладываем элементы (тратя какой-то ресурс на это), либо мы сваливаем как есть, а разбор элементов оставляем на потом (ровно как и траты ресурсов).
как в любом подобном выборе есть свои трейдофы — мы либо оптимизируем запись (надо быстро положить и поскорее акнуть писателю), либо у нас есть немного времени аккуратно разложить входящий поток, чтобы читателю потом можно было быстрее найти нужный кусок.
⌘ ⌘ ⌘
так что я предпочитаю потратить чуток времени при загрузке посудомойки и разложить всё одинаковое рядом — ведь так и так в раковине всё вперемешку и получается вылавливать оттуда по одному-две штуки за раз. отсоритрованная посуду получается быстрее разгружать — берёшь охапку вилок и кидаешь в свой отдел; потом сразу три плоских тарелки отправляются в том же порядке в шкаф, и т.д.
понимаю всю серьёзность вопроса, поэтому жажду узнать где ещё можно оптимизировать процесс — буду рад предложениям в комментариях
П.С.: а в следующий раз продолжим повышать градус важности и поговорим об оптимизации сушки белья. не переключайтесь!