Постраничное удаление

UPD: вот тут попытка решить задачу, но не до конца, можно скачать код на 1С и попробовать.

Прикольная алгоритмическая задача, которая пригодится на собеседования кандидатов или для вящего удовольстия.

В базе данных есть заранее неизвестное количество контрагентов.

К базе можно выполнять только один вид запроса: спросить сколько контрагентов находится в выдаче на странице номер N.

При этом на странице выдается по 25 контрагентов и контрагенты всегда упорядочены одинаково. На последней странице может быть меньше контрагентов.

К запросу можно выполнить только одно действие: удалить контрагентов, выданных на странице.

При этом будут удалены только те контрагенты, по которым в базе не проходит никаких операций.

Вопрос: Как оптимально выполнить удаление всех контрагентов, которых можно удалить.

0 0 голоса
Рейтинг статьи
В этой статье выражено личное, частное мнение автора, которое не является призывом или рекомендацией и может быть ошибочным! Автор настоятельно не рекомендует и даже запрещает читать этот блог. Возрастное ограничение 18+.
Автор не пытается оскорбить чьих-либо чувств, или разжечь ненависть. Все персонажи и описываемые события являются вымышленными. Любое совпадение с реальными людьми или событиями, является случайностью. Статья носит исключительно развлекательный характер. Все картинки, видео и фото отредактированные и не настоящие, весь текст является вымыслом (включая названия, имена, адреса), в нем нет ни слова правды и все это преследует лишь одну цель – поднять настроение.

Вам может также понравиться...

Подписаться
Уведомить о
guest

66 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей
Алексей
24 дней назад

у гниды не работает мозг и он хочет получить решение за счет «каловых масс»
не подсказывайте гомосеку

Зимбицкий
Зимбицкий
24 дней назад
Ответить на  fixin

Ну вот, правильно, значит хуй тебе, гнида.

Отожный НДЫК гыгыгы
Отожный НДЫК гыгыгы
24 дней назад

Башляй, ускоряй и нахуй гуляй, глупая пидораска

Зимбицкий
Зимбицкий
24 дней назад

нулл нулл нулл нахуярь, эникейщик тупой.

basement_rekt
basement_rekt
24 дней назад

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

basement_rack
basement_rack
24 дней назад
Ответить на  fixin

ответь мне, какая алгоритмическая сложность эффективного решения

Ашот Таксопарк
Ашот Таксопарк
23 дней назад
Ответить на  fixin

А с хера ли ты тогда решил что решение оптимальное если не знаешь сложности решения?

basement_rack
basement_rack
23 дней назад
Ответить на  fixin

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

Serg
Serg
24 дней назад

Кажется можно втупую действовать — удалил на текущей странице, запросил число, если меньше 25, то всё. Если 25, переходим к следующей странице.

Хрюн Моржовый
Хрюн Моржовый
24 дней назад
Ответить на  fixin

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

Serg
Serg
24 дней назад
Ответить на  Хрюн Моржовый

Да, втупую не получится. Но как из тех вводных, что были озвучены, понять такую ситуацию? Чего-то не хватает,

Serg
Serg
24 дней назад
Ответить на  Serg

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

Хрюн Моржовый
Хрюн Моржовый
24 дней назад
Ответить на  Serg
for(int i = pagesCount; i >= 0; i--)

   ClearPageFromContragents(i);
Хрюн Моржовый
Хрюн Моржовый
24 дней назад
Ответить на  Хрюн Моржовый

Хотя я тоже обосрался, надо «int i = pagesCount — 1;»

Serg
Serg
24 дней назад
Ответить на  Хрюн Моржовый

А pagesCount это число страниц? Мы его не знаем, по условиям задачи.

Хрюн Моржовый
Хрюн Моржовый
24 дней назад
Ответить на  Serg

Если лень пердолиться то N+1 запросов количества элементов на странице и N вызовов удаления, где N — это количество страниц.

Если не лень заморочиться бинарным поиском, то 32 запроса количества элементов и N вызовов удаления.

Хрюн Моржовый
Хрюн Моржовый
24 дней назад
Ответить на  fixin

Тебе зачем? Реально что ли собес на джуна проходишь? Ок, ищем lastPage с которой будем начинать удаление, декрементируя. Подразумеваем индексацию с 0 и то что твои методы корректно обрабатывают обращение к несуществующей странице. Вариант 1, чтоб поверили что ты сам писал: int lastPage = 0; while (GetItemsOnPage(lastPage) == 25)lastPage++; // тут в lastPage индекс последней страницы с айтемами или первой пустой страницы, в зависимости от того кратно ли общее число айтемов 25. Вариант 2. Излишне выпедренный, учитывая что ты один хрен будешь потом по одной странице чистить, плюс не поверят что ты сам писал, решат что тебе студент-второкурсник помог unsigned… Подробнее »

Хрюн Моржовый
Хрюн Моржовый
23 дней назад
Ответить на  fixin

Я тебе больше скажу, гнида, первый вариант вообще ничего не удалит. Как и второй. Там нет вызова функции удаления. Как удалять я тебе написал выше, начиная с последней страницы идти последовательно к первой и удалять. А эти 2 варианта расссказывают, как найти ту самую последнюю страницу.
Если у тебя N cтраниц, то первый вариант удалит всех удаляемых контрагентов за N вызовов функции подсчёта и N вызовов функции удаления.
Второй вариант за 32 вызова функции подсчёта (количества бит в инте) и N вызовов функции удаления.

Хрюн Моржовый
Хрюн Моржовый
22 дней назад
Ответить на  fixin

Сос, тебе сифилис окончательно мозги съел?

Я тебе буквально написал 2 варианта нахождения индекса последней страницы, написал кодом. И пояснил что этот код делает, ищет номер последней страницы. И что ты мне отвечаешь? Предлагаешь написать код для поиска последней страницы. Я бы подумал, что ты троллишь, но это для троллинга слишком тупо.

Отожный НДЫК гыгыгы
Отожный НДЫК гыгыгы
21 дней назад
Ответить на  Хрюн Моржовый

Да он просто не понимает чужой код. Ещё и не 1Сный. И вообще он «не в курсах» гыгыгы

Хрюн Моржовый
Хрюн Моржовый
21 дней назад
Ответить на  fixin

Всё написано выше, тупица.

Serg
Serg
24 дней назад
Ответить на  Хрюн Моржовый

Я может не догоняю твою мысль, но о каком бинарном поиске идëт речь? Мы не знаем общее число страниц, не знаем сколько удаляемых контрагентов на странице.

Отожный НДЫК гыгыгы
Отожный НДЫК гыгыгы
21 дней назад
Ответить на  fixin

И? Написал?

Serg
Serg
24 дней назад
Ответить на  fixin

Я размышлял в контексте того, что мы не знаем, какие из контрагентов на странице подлежат удалению, а какие нет. Про число всех на странице я в курсе.

Минский Хейтер
Минский Хейтер
24 дней назад

Переформулируй нормально. Вообще надо перечитывать несколько раз написанное перед публикацией. Лучше если прочтет другой человек

Отожный НДЫК гыгыгы
Отожный НДЫК гыгыгы
24 дней назад
Ответить на  fixin

Протри очко, прочти свой говновысер и вспомни, дебил

Отожный НДЫК гыгыгы
Отожный НДЫК гыгыгы
24 дней назад
Ответить на  fixin

Будем ждать твоего изящного решения, каломассы не смогут. Удалей их в очередной раз как Орловского с двумя импотентками, отож

Минский Хейтер
Минский Хейтер
24 дней назад
Ответить на  fixin

Что у этого человека в голове?

Минский Хейтер
Минский Хейтер
24 дней назад
Ответить на  fixin

Фррмализуй нормально. У тебя техническое образование или гуманитарное?

Vlad O.
Vlad O.
24 дней назад
Ответить на  Минский Хейтер

У дебила образование только на бумаге, он ни хуя не знает ни в одной области. Полнейший идиот, пидор и педофил.

Урина Ковалевская
Урина Ковалевская
22 дней назад
Ответить на  Vlad O.

Все так как Вы описали,а ещё пиздабол и трус.гггг….

basement_rack
basement_rack
22 дней назад
Ответить на  fixin

когда анус себе дернешь?

Отожный НДЫК гыгыгы
Отожный НДЫК гыгыгы
21 дней назад
Ответить на  fixin

Почему аналитические высеры исчезли из уютного бложика?

bob32
bob32
24 дней назад

Чем меньше запросов, тем лучшe. DELETE FROM из твоей таблицы с нужным condition-ом по другим таблицам и все.

В твоем варианте можно курсор завести и использовать WHERE CURRENT OF конструкцию (если PostgreSQL).

Ты какие-то костыли лепишь и решаешь задачу не с того конца.

bob32
bob32
24 дней назад
Ответить на  fixin

Да, т.к могу объяснить бизнесу где задачу надо решать. Бизнес бизнесу рознь, у нас бизнес понимает где задача должна решаться.

Минский Хейтер
Минский Хейтер
24 дней назад

У деда деменция
https://geniy1s.ru/postranichnoe-udalenie/

basement_rack
basement_rack
23 дней назад
Ответить на  Минский Хейтер

и слабоумие

66
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x