22 segment intersect
Bentley Ottmann algorithm and related problems
-
Не нужно писать импорты в каждой ячейке, достаточно одного раза на весь ноутбук (например, в начале или при первом использовании)
-
В упражнении, я считаю, всё-таки нужно оставить раскомментированным определение функции - чтобы пользователь знал её сигнатуру. Можешь просто сделать так, чтобы она сразу возвращала результат функции-ответа.
-
Из классов
Point,SegmentиEventинтерес может представлять лишь компаратор последнего, всё остальное лучше убрать с глаз долой. И если тернарник не влезает в одну строку, может, стоит написать его нормально? -
А что, доказательства у нас теперь ромбиками? :)
-
Наверное, код проще дописывать, когда тебе дана пустая функция, а не когда надо писать где-то в середине вместо комментариев. Впрочем, это уже лично моё мнение. И я бы не отказался от реализации "по умолчанию" с ответами
-
План в текущем виде немного бесполезен. Желательно, чтобы он был кликабелен, как нормальное содержание. Ну или убери его, особо ничего не потеряешь
> Из классов Point, Segment и Event интерес может представлять лишь компаратор последнего
Антон просил написать такую заготовку, чтобы человек не тратил время на написание несложных доп функций, только на алгоритм. Компараторы остальных классов и хэш-функция нужны в реализации, зачем их каждому переписывать
Скорее всего не стоит полностью в ноутбуке писать реализацию классов Type, Segment, Event. Лучше вынести в какой-то файл, а в ноутбуке просто описать интерфейс. Слишком много кода(где особо смысла нет) просто мешает
Мы сегодня говорили с Антоном, он предложил (настоятельно порекомендовал) вынести все типовые классы со всех конспектов в отдельную либу. Он передаст более формальные требования через Артёма чуть позже.
Да, про память я забыла рассказать, Антон напомнил уже, я добавлю.
Точки пересечения отрезков тоже являются событиями, читай внимательнее. И в каркасе идет разбор всех трех возможных типов. Сравнение событий надо сделать немного иначе, это да.
Точки пересечения отрезков тоже являются событиями, читай внимательнее. И в каркасе идет разбор всех трех возможных типов. Сравнение событий надо сделать немного иначе, это да.
Покажи мне место в тексте своего алгоритма, где ты говоришь, что после того как мы нашли какое-либо пересечение мы добавили его в кучу событий. (Я этого просто совсем не увидел, я видел только слово добавляем в статус).
И в каркасе идет разбор всех трех возможных типов. Сравнение событий надо сделать немного иначе, это да.
Каркас будет работать только в случае если в одной точки пересекаются не более 2 отрезков. Мне кажется задача твоего алгоритма совершенно иная. Кроме того, ты сама же приводишь в док-во оценки времени совершенно другой код алгоритм. Кроме того, зачем делить на случаи, если это вписывается в общую концепцую.
Возможно, как пример, отдельной задачи было бы неплохо попросить написать 3 случая. А потом показать сам алгоритм, ведь он совсем не похож на эти 3 случая. Ну почти не похож.
Антон просил написать такую заготовку, чтобы человек не тратил время на написание несложных доп функций, только на алгоритм. Компараторы остальных классов и хэш-функция нужны в реализации, зачем их каждому переписывать
Их и не нужно переписывать. Просто убери их из нотебука в соседний файлик, и импортируй оттуда. Возможно, в строчке с импортом можно добавить комментарий, что этот класс поддерживает. Вряд ли кому то интересно смотреть на то, как реализован __add__ и прочее.
(настоятельно порекомендовал) вынести все типовые классы со всех конспектов в отдельную либу.
Возможно, под разные задачи у этих классов будут немного разные компараторы. Например, мой для точки - нестандартный
Каркас будет работать только в случае если в одной точки пересекаются не более 2 отрезков.
Это неправда, я писала этот алгоритм, такая реализация работает в случае, если в точке пересекаются/начинаются/заканчиваются больше двух отрезков, почитай внимательнее описание и порядок, в котором идут ивенты. Не понятно, какую общую концепцию ты имеешь ввиду. Случаев никаких нет, только три типа событий, который обрабатываются совершенно разными образами.
-
(Пока мы ещё не запилили общую библиотеку для типовых классов) Возможно так выглядит нагляднее, но, тем не менее, я считаю, что импортировать класс Point из samples не нужно, так как он уже был создан ранее, в примере про "левый поворот". Лично у меня возникло подозрение, что "может быть в samples реализация как-то отличается и надо бы посмотреть этот файл".
-
"О вкусах не спорят", но всё же стоит убрать "\large" из формулы точки пересечения двух отрезков, так как формулы разных размеров смотрятся не очень вкусно. Либо сделать левую часть последнего равенства также "\large". (Понятно, что изначально хотелось выделить итоговую формулу).
-
Исправить очепятки: переберающий -> перебирающий персечений -> пересечений дейтвия -> действия алгорим -> алгоритм
В целом, если рассматривать конспект, как туториал для нешарящего (вроде меня), претензий нет: написано понятным языком, как следует разжёвано. Упражнения неплохие. В принципе, после их выполнения более-менее осознаешь, как это всё работает.
(Годные замечания были даны до меня. Так что не знаю, к чему ещё можно придраться).
Этот конспект на доработке после разговора с Антоном (еще неделю назад). Он будет очень сильно исправлен. Поэтому пока прошу не тратить время на его ревью.