Алгоритм для определения “обычного” платежа наличными составляет за данную цену

Согласно официальной документации django , эти версии django поддерживаются версиями python:

Django version  Python versions
1.11            2.7, 3.4, 3.5, 3.6, 3.7 (added in 1.11.17)
2.0             3.4, 3.5, 3.6, 3.7
2.1, 2.2        3.5, 3.6, 3.7

Итак, вы можете использовать Python 3.7 для производства.

5
задан e.James 19 November 2008 в 16:07
поделиться

6 ответов

Существуют также другие факторы, Вы вряд ли заплатите 6 x 0.25, Вы использовали бы 1 x 1.00 и 2 x 0.25 вместо этого. Обычно 0.25 больше не были бы затем 3, 0.10 больше не будут затем 2, и 0.05 больше не был бы затем 1.

Также в реальном мире, многие люди никогда не беспокоят значениями менее затем 1.00, они плата alawys со счетами и "оставляют сдачу".

То же относится 5.00, 10.00, и 20.00, для покупок, более затем люди за несколько долларов будут использовать 5.00 или 10.00 вместо этого. Конечно, 20.00 наиболее распространены в циркуляции благодаря банкоматам.

Для чего это программное обеспечение? Вы на самом деле пробуете образцовые фактические покупки и нуждаетесь в точных результатах или простом моделировании, которое не должно быть строгим?

2
ответ дан 14 December 2019 в 01:20
поделиться

"Скорее всего", делает это очень хитрой проблемой. Необходимо было бы знать относительную доступность и распределение каждого типа валюты. Например, 22% всех счетов в циркуляции составляют 20$ s, делая их намного более вероятно, чтобы использоваться, чем счета или за 10$ 50$ для сумм между 10$ и 100$.

2
ответ дан 14 December 2019 в 01:20
поделиться

Это - на самом деле известная проблема, это - вариант binpacking, если я не ошибаюсь...

Иногда это называло алгоритм кассиров (или жадный алгоритм). Можно найти реализацию в этой презентации: http://www.cs.princeton.edu/~wayne/kleinberg-tardos/04greed.pdf, посмотрите страницу 11/12/13..

(для разъяснения нормальный алгоритм кассиров только возвращается, минимальная сумма монет должна была расплатиться с клиентом. Но Вы могли изменить решение для динамического программирования вычислить все возможные комбинации),

2
ответ дан 14 December 2019 в 01:20
поделиться

OH! # % $ ^&* () _, теперь я - действительно пи.. редактор.

Я просто записал псевдокод и оценку сложности в течение 10 минут, и когда я отправляю существует только кнопка "I am a human being" без любой возможности ввести что-то, и моего полного сообщения не стало (и конечно, на этот раз я не сделал копию окна редактирования, на всякий случай...), хорошо таким образом, вот короткая версия:

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

Теперь используйте этот много набор P монет, добавьте его к (до сих пор пустой) набор результатов (ряд мультимножеств), и к (до сих пор пустой также) рабочий набор.

Теперь повторитесь, пока рабочий набор не будет пуст:

Возьмите набор P из рабочего набора, P' = P, для каждой монеты c в P: P' = P.replace (c, nextBiggerCoin), removeSmallestCoin (как долго как P без самой маленькой монеты все еще> A)

Если P' еще не находится в наборе результатов, поместите его в набор результатов и рабочий набор

Моя предполагаемая сложность была O (s*n^2) с s количество решений.

1
ответ дан 14 December 2019 в 01:20
поделиться

Это для системы кассовых терминалов. Когда окончательная цена вычисляется, кассир должен войти в сумму наличными, предоставленной клиентом. Существует три кнопки "ярлыка", которые должны быть установлены на "вероятные" суммы сделать жизнь кассира легче. Абсолютное совершенство не необходимо. – eJames (19 ноября в 22:28)

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

1
ответ дан 14 December 2019 в 01:20
поделиться

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

В большинстве ситуаций фактическое использование ограничено 5$ к диапазону за 200$. Большинство людей обычно не вытаскивает 500$ наличными регулярно:)

Я решил посмотреть на различные случаи от 0$ до 5$, 5$ к 10$... 45$ к 50$. У нас было 3 кнопки так в каждом случае, первая (самая низкая) кнопка будет следующим значением за 5$ выше цены. Таким образом, если это были 7,45$ затем, 8$ были первой кнопкой, $13,34-> 15$, $21,01-> 25$.

Это оставляет 2-е и 3-и кнопки. Каждый случай имеет очевидные ответы, учитывая стандартные значения 5$, 10$, 20$, счета за 50$. например: Смотря на 24,50$ затем 1-> 25$, 2-> 30$, 3-> 40$. Они могут быть найдены с помощью таблицы и некоторого здравого смысла.

Я также нашел, что с помощью значений большие 50$ могли просто соответствовать их ниже дубликатов за 50$. т.е.: 72,01$ были бы тем же ответом как 22,01$ и так далее. Единственный протест с числами, больше, чем 60 и меньше чем 70. Тот случай требует обработки возможности 4 счетов за 20$.

Алгоритм также масштабируется приятно в 100$ к диапазону за 200$. Выше этого редкий случай в розничной продаже.

1
ответ дан 14 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: