Посещая супермаркет с списком покупок, получите все предметы самым быстрым способом?

Время от времени моя жена отправляет меня в супермаркет "РЕАЛЬ" с списком покупок (она пишет мне лист бумаги или передает мне сообщение).

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

(Я нашел этот вопрос очень полезным в жизни: pair-socks-from-a-pile-efficiently, и надеялся, что смогу использовать помощь сообщества в своей ситуации)

Я не знаю/не помню, где находится каждый элемент в супермаркете, и список, который я даю, никогда не сортируется (например, овощи перечислены во всем списке, а не один за другим). Кроме того, обычно я получаю непрерывные текстовые сообщения с большим количеством предметов, чтобы покупать, в то время как я все еще в супер.

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

Два способа, о которых я думал:

  • элемент foreach в супер (n) Я передаю: проверьте, есть ли у меня такой элемент в моем списке (m), что даст мне O(n*m) соучастие, которое не так эффективно.
  • "разделение" магазина на строки (p): стоя в начале каждой строки, я могу прочитать знак или посмотреть, какие элементы я должен найти там, чем перебирать список, пытаясь запомнить все элементы в списке я должен найти в этой строке. чем ходить по этой строке и добавлять эти предметы в свою корзину, должен принести мне O(p*m) соучастие. , но это никогда не происходит.. Я не могу вспомнить более трех из четырех элементов из моего списка, который я ожидаю найти в этой строке, и даже если я это сделаю, я часто забываю элемент и снова использовать этот алгоритм (скажем q раз), который приходит к: O(q*p*m).

Несколько комментариев, которые я хотел бы добавить:

  • когда вы, например, попадаете в овощную секцию, я много раз перебирал этот раздел, потому что моя жена отлично повара и добавляет в список (v) все виды овощей. Конечно, я не могу вспомнить все эти овощи, а не останавливаться рядом с каждым овощем на рынке (или должен ли я?), Чтобы проверить, есть ли у меня в моем списке.
  • Пересекая каждый элемент, который я помещал в свою корзину (или создавая новый список со всеми элементами, которые у меня еще нет), для меня очень много времени, поэтому я предпочитаю просто перебирать весь список каждый раз, когда я пытаюсь найти если у меня все еще есть элемент для добавления в корзину.
  • Еще один случай - это второй, который вы получаете в своем автомобиле, прежде чем отправиться в семейный отпуск. Вы помните, что вы забыли взять это и хотя, вернувшись в свой дом, достали некоторые из этих предметов, забыли других и вернулись назад. Это аналогичный случай?
+3
11 июн. '15 в 19:06
источник поделиться
1 ответ

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

Для любых идей, идущих по этой дороге - не собираюсь работать...

0
11 июн. '15 в 20:31
источник

Посмотрите другие вопросы по меткам или Задайте вопрос