Какова хорошая структура данных для периодических или повторяющихся дат?
-
06-07-2019 - |
Вопрос
Существует ли опубликованная структура данных для хранения периодических или повторяющихся дат?Что-то, что может справиться:
- Насос требует переработки каждые пять дней.
- День зарплаты – каждая вторая пятница.
- День благодарения — второй понедельник октября (США:четвертый четверг ноября).
- День святого Валентина отмечается ежегодно 14 февраля.
- Солнцестояние (обычно) бывает 21 июня и 21 декабря.
- Пасха — это воскресенье после первого полнолуния в день весеннего равноденствия или после него (ладно, это немного натянуто).
Я считаю cron
Внутренняя структура данных может обрабатывать №1, №4, №5 (два правила) и, возможно, №2, но я ее не рассматривал.MS Outlook и другие календари, кажется, способны обрабатывать первые пять, но у меня нет этого исходного кода.
Другие советы
Учитывая все эти различия в способе определения повторения, я бы отказался от одной реализации структуры данных, чтобы учесть все 5 сценариев.
Вместо этого я (и для предыдущего проекта) построил бы простые структуры, которые обращались бы к каждому типу повторения. Вы можете обернуть их все так, чтобы они выглядели как единая структура данных, но под капотом они могли делать все, что им нравится. Благодаря реализации интерфейса я смог одинаково обработать каждый тип повторения, чтобы он выглядел как единая структура данных, подходящая для всех. Я мог бы запросить у любого экземпляра все даты повторения в течение определенного периода времени, и это помогло.
Я также хотел бы узнать больше о том, как эти даты нужно использовать, прежде чем остановиться на конкретной реализации.
Если вы хотите на практике создать структуру данных, я бы порекомендовал хеш-таблицу (где праздники или события являются ключами с новым вхождением даты в качестве значения), если существует множество различных вхождений, которые можно хэшировать значение, которое находит раздел в связанном списке, который затем содержит список всех вхождений (это приведет к выполнению поиска и вставки в O (1)). Р>