Pull to refresh
6
0
Константин Булатов @kbulatov

User

Send message
Тут я с вами совершенно согласен — очень интересно дальнейшее решение задачи в более общем случае. И наверняка можно обобщить и задачу распознавания рукописного текста на какую-то более общую, и так далее.

Меня лишь смутил ваш комментарий про оценку практической годности. С моей точки зрения практическая оценка технологии должна проводиться не по общности применения, а как раз наоборот — по применимости к конкретному целевому объекту, адекватном понимании особенностей конкретной задачи и их учете. Иначе получается (может не очень хорошая аналогия, но все же), что очки на минус 3 это плохое технологическое решение, потому что не подходят для людей, у которых зрение минус 5, и серьезно для практического использования можно будет рассматривать только очки, подходящие всем сразу…
Но ведь статья о распознавании рукописного ПАСПОРТА… И об этом (о сужении задачи и об аккуратности почерка) в явном виде говорится во втором абзаце статьи. Как студенческие конспекты относятся к «серьезной оценке практической годности» технологии распознавания рукописного паспорта?
По той же причине, почему в английском языке это слово пишется слитно. Слово «dataset» само по себе недавно возникло (формально говоря, правильно «data set»), но все больше и больше публикаций употребляют именно слитное начертание. Причина — слово «dataset» сейчас значит не просто абстрактный набор данных, а структурированный набор аннотированных (т.е. с разметкой) данных, как правило опубликованный в открытом доступе, объединенный какой-то одной тематикой, и предназначенный для обучения, тестирования и объективного сравнения алгоритмов.

По этой же причине абстрактное «набор данных» в русском языке уже не очень хорошо отражает семантику того, что имеется ввиду. Почему бы и не «датасет».
Codacy: Беспрерывный статистический анализ для дополнения ваших юнит тестов (new).

Наверно все-таки «статический»?
Файл однако достаточно большой: в CSV формате — ~1Гб, в bz2-архиве — ~320 Мб. При этом ежедневно обновляется, если верить сайту. Хранить на мобильнике вряд ли получится, можно конечно на каком-нибудь своем сервере его хранить… но тогда приложению доступ в сеть понадобится для проверки. Кроме того, проверять получится только серию и номер (только они в базе хранятся). Что делать если номер распознается с ошибкой в одной цифре, и результат окажется в базе?..
Да, попытка решения задачи была всего одна, и она получила вердикт Wrong Answer на втором тесте.

Прошу прощения, насчет ошибки в формуле я вас дезинформировал, только что пересмотрел ту посылку. В решении используется двойной тернарный поиск точки, в которой углы падения и отражения будут равны. Как будет свободное время, я попытаюсь сдать эту задачу тем же способом (чтобы понять, что конкретно участник делал неправильно).
Хардкорных тестов не было, я проверял (у меня решение зашло без каких-либо «безопасных» сравнений чисел с плавающей точкой). Возможно на бумаге действительно задачу решили многие, однако посылка во время контеста была всего одна, и с ошибкой в формуле, а не в технике.
Ваше решение абсолютно верно, и, прошу заметить, никак не противоречит авторскому. На вашем рисунке вы также просто нашли бы точку O просто ортогонально отражая точку P относительно плоскости зеркала (на вашем рисунке — относительно вертикальной прямой, содержащей зеркало) и пересекая плоскость зеркала с прямой, проходящей через отражение P и точку V.

Как правильно заметил mayorovp, пожалуй единственной проблемой оригинального рисунка состоит в том, что прямая P'P должна быть перпендикулярно прямой, содержащей бОльшие полуоси эллипса. Доказать корректность авторского подхода просто — так как прямая P'P перпендикулярна плоскости зеркала, она перпендикулярно любой прямой, лежащей в этой плоскости. А значит, P'P перпендикулярна прямой, проходящий через точки пересечения плоскости и прямых P'P и P'V. Из этого же следует (обозначив буквой C точку пересечения плоскости и прямой P'V), что углы между плоскостью и прямыми PC и CV равны. После этого останется только проверить, что точка С находится на зеркале. Перехода к планиметрии при таком подходе не требуется, и код программы получается очень короткий.
Стойкое желание вполне понятно, и, как мне кажется, вполне резонно — «неизвестному в олимпиадном программировании» вузу хочется стать более известным.
Я конечно необъективен, так как выпускник этого вуза, и олимпиадник, но все-таки считаю организацию олимпиады для школьников самым приличным способом повысить известность вуза в олимпиадном плане. Вуз принимает участие в олимпиадах, выходит в финал ACM ICPC, и тем временем остается не очень известным. Организует (ежегодно, хотя хотелось бы чаще) олимпиаду для школьников, школьники отзываются, приезжают, решают задачи, победители получают призы. Взамен ~100% участников этой олимпиады узнают про этот вуз, а какой-то, пусть маленький, процент, возможно рассмотрит этот вуз в качестве будущей альма матер. Не вижу подвоха, с моей точки зрения — это win-win.
Пользовался awesome около года, пока не решил попробовать i3 — в нем из коробки не было тех косяков, которые меня слегка раздражали в awesome (иногда тайловые окна в нижней части экрана не доходят до нижнего края, оставляя полоску из нескольких пикселей — не критично, но ассиметричность заметная; при подключении нескольких мониторов на каждом свой набор воркспейсов и для переключения между мониторами нужно привыкать к отдельному хоткею, тогда как в i3 набор воркспейсов общий на все мониторы). Уверен что все «недостатки» awesome, которые мне не нравились, можно полечить копанием в конфигах, но все таки приятно когда все сразу ровно так как хочется =). К некоторым хоткеям awesome я правда так привык, что такие же и в i3 забиндил…
Для неопределившихся с тайловым менеджером окон — еще один (субьективный) плюс i3wm: общение с window manager очень удобно осуществлять на питоне с помощью i3-py (API интуитивно понятный, даже манов читать не надо).
Тогда уж, кстати, Adobe читается «адОби», а не «адОб» (см. википедию или презентации компании). Хотя я встречал даже «абоб»…
Wall Street Journal: “As usage has evolved from the word’s origin as the Latin plural of datum, singular verbs now are often used to refer to collections of information: Little data is available to support the conclusions. Otherwise, generally continue to use the plural: Data are still being collected.”
(отсюда)
Про «data is/are»: традиционалисты действительно настаивают на использовании слова data как множественного числа от datum, однако многие в англоговорящем мире считают, что это слово вместе с языком и техническим прогрессом эволюционировало и должно использоваться в единственном числе. Приблизительно такая же ситуация когда-то была со словом agenda (в латыни и долгое время в английском — множественное от agendum, однако в современном английском agenda используется как существительное единственного числа).

Рекомендации по стилю в издательстве The Guardian: Data: takes a singular verb (like agenda), though strictly a plural; no one ever uses «agendum» or «datum»
(отсюда)
Вопрос по камере — почему глазок основной камеры (на самой первой фотографии) выглядит скошенным? Это так задумано, или он как-то двигается, или еще что? Или это наклеенная защитная пленка видна просто?
А почему вы так уверены, что Fn+LeftArrow в качестве Home и Fn+RightArrow в качестве End это так неудобно? Или это кажется вам нелогичным? То, что на асусовских клавиатурах нету выделеных Home, End, PgUp, PgDn меня тоже волновало, но только в первые 2-3 дня после покупки. На четвертый день к этому привыкаешь и работать снова становится комфортно. По клавише стрелки по крайней мере не промахнешься…
На фото выше — меня например смущало бы, что кнопка End находится под Home (хотя логичнее было бы их горизонтальное расположение). Сколько раз пользователи промахиваются мимо End и вместо этого нажимают на Home или PgUp?
Подозреваю, что автор имел ввиду gprof, а не gperf. Gperf вроде как ничего не профилирует, просто хеши генерирует ;)
Предположим, нас устроит, если сложность будет не хуже, чем 20*n^2. F(n) — наша неизвестная функция сложности. Вычисляем F(n) с помощью Mock-объекта на проектном объеме данных (это может быть и несколько точек) и сравниваем с эталонной функцией 20*n^2. Если вычисленное значение меньше, то тест пройден. Это позволяет вовремя отловить случайные изменение сложности используемого алгоритма.

Ясно, т.е. вы просто считаете количество операций при некоторых значениях. Если функции простые (типа полиномов, логарифмов) — все более-менее нормально. Но если функция более сложная, не монотонная? К примеру — возмем факторизацию числа, например. На 1024 она работает быстро, на 1000000000 — почти так же быстро. А вот на 1000000007 — будет работать ощутимо дольше =). Я уверен что можно придумать хитрый алгоритм хорошего быстрого контейнера, который работает сильно быстрее в особенных случаях (четности, степени двойки и т.д.). Оценить сложность алгоритмов такого класа вашим способом, видимо, не получится?

Кстати, мне кажется, что bool operator==(std::pair<const Mock, int> & p1, std::pair<const Mock, int> & p2) вам совсем не нужен: STL-евскому std::map должно хватать operator< для ключа (он у вас и так есть).

По определению вычислительная сложность — это именно _функция_ зависимости объема работы от размера входных данных.
Вычислительная сложность — это функция, а вы просто вычисляете _значение_ этой функции в одной точке!

Предложение «При N = таком-то получаем количество операций K» — это не дает никакого представления о вычислительной сложности (равно как и алгоритмической, равно как и асимтотической оценки).
Предложение «При линейном увеличении N количество операций K растет как такая-то функция» — вот это найденная зависимость (т.е. найденная вычислительная сложность).
Точнее, у вас не алгоритмическая сложность оценивается, а просто количество операций. Вдруг будет какое-нибудь сбалансированное дерево, но длины могут быть порядка 997*logN. Тогда получается, если вы проверите для N = 1000, у вас стоимость поиска будет порядка 997 и вы решите что это линейная сложность?
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity