Разделение документов на папки - PullRequest
0 голосов
/ 30 апреля 2018

Чтобы листы бумаги были помещены в папку, они должны быть связаны с помощью степлеров. Например, степлеры могут вместить не более 10 листов. Требуется 3 степлера, чтобы скрепить 25 листов бумаги. Если первый сшиватель используется для бумаг с 1 по 10, второй с 10 по 19 и третий с 19 по 25, тогда потребуется только одна папка. Если первый сшиватель используется для бумаг 1-10, второй для 8-18, а третий для 16-25, то потребуется только одна папка. Если первый сшиватель используется для бумаг с 1 по 10, второй с 12 по 21 и с третьей с 21 по 25 понадобятся три папки, так как первая папка будет содержать 1-10, вторая папка 11 и третий с 12-25.
Массивы a1, a2 .... an и b1, b2 .... bn целых положительных чисел представляют бумаги от ai до bi, которые будут сшиты, где ai

Я должен написать алгоритм со сложностью O (n), который решает задачу, если L имеет порядок n, и алгоритм со сложностью O (nlogn), не зависящий от L, но я не уверен, как подойти к задаче. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 30 апреля 2018

Для части O (NlogN).

Вам необходимо отсортировать интервалы (степлеры) по начальной точке (массиву a).

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

Обратите внимание на то, как вы вычисляете количество страниц и убедитесь, что правильно учитываете свободные страницы до первого степлера и после последнего, так как легко допустить ошибку +/- 1.

Сложность проистекает из сортировки. Остальное линейно.

...