Pull to refresh
28
0
Send message

Две красивые задачи по алгоритмам

Reading time4 min
Views68K
На этой неделе я начал читать бакалаврам Академического университета базовый курс по алгоритмам. Начинал я совсем с основ, и чтобы тем, кто с базовыми алгоритмами уже знаком, было чем заняться, я в начале пары сформулировал две, наверное, самые свои любимые задачки по алгоритмам. Давайте и с вами ими поделюсь. Решение одной из них даже под катом подробно расскажу. Но не отказывайте себе в удовольствии и не заглядывайте сразу под кат, а попытайтесь решить задачи самостоятельно. Обещаю, что у обеих задач есть достаточно простые решения, не подразумевающие никаких специальных знаний по алгоритмам. Это, конечно, не означает, что эти решения просто найти, но после пары один из студентов подошёл и рассказал правильное решение первой задачи. =) Если же вам интересно посмотреть на начало курса или порешать больше разных задач — приходите к нам на (бесплатный) онлайн-курс, который начнётся 15 сентября.

Задача 1. Дан массив A длины (n+1), содержащий натуральные числа от 1 до n. Найти любой повторяющийся элемент за время O(n), не изменяя массив и не используя дополнительной памяти.


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

Задача 2. Дана матрица nxn, содержащая попарно различные натуральные числа. Требуется найти в ней локальный минимум за время O(n).


Локальным минимумом матрицы называется элемент, который меньше всех своих четырёх соседей (или трёх, если этот элемент лежит на границе; или двух, если это угловой элемент). Обратите внимание, что от нас требуется линейное по n время, хотя в матрице квадратичное по n число элементов. Поэтому мы предполагаем, что матрица уже считана в память. И нам нужно найти в ней локальный минимум, обратившись лишь к линейному количеству её ячеек.

Под катом — решение первой задачи. Ещё раз призываю вас заглядывать под кат только после того, как порешаете задачу. По второй задаче могу какую-нибудь подсказку сказать.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments82

Делаем настольное устройство для изготовления печатных плат в один клик

Reading time5 min
Views277K
В очередной раз отмывая раковину от рыжих пятен хлорного железа, после травления платы, я подумал, что пришло время автоматизировать этот процесс. Так я начал делать устройство для изготовления плат, которое уже сейчас можно использовать для создания простейшей электроники.

image

Ниже я расскажу о том, как делал этот девайс.
Читать дальше →
Total votes 161: ↑161 and ↓0+161
Comments164

Национальная платёжная система и ширина лошадиной задницы

Reading time15 min
Views68K
Внезапное отключение российских банков от международных платёжных систем свалилось неожиданнее снега в декабре. Неожиданно выяснилось, что использование платёжных системах вероятного противника может вызывать побочные эффекты вроде валютного запора или дистанционного разрушения банков. Знаете, есть такая фобия — Гимнофобия, что означает “боязнь оказаться голым на публике”. Судя по всему, наше правительство ею не страдает (что могло бы радовать, но — нет). В итоге, все мы оказались именно в таком положении.

Из этого положения есть разумный выход — переключится на Национальную Платёжную Систему вместо вражеских visa/mastercard. Но её не существует даже в виде проекта. Существует лишь законодательная инициатива и смутные желания, этой самой инициативой вызванные. И поэтому огромное количество людей в костюмах сейчас нервничают и требуют начать её немедленную разработку. Собираются заседания, куда вдруг приглашают не только людей в клетчатых рубашках, но даже одного-двух избранных в растянутых свитерах. Приказывают начать разработку прямо сейчас. Ну, или понедельника. Ладно, в этот не успели — начните со следующего. А ещё лучше начать сразу внедрение какой-нибудь системы и одновременно вести её разработку. Как бы не вышло так, что на гос.тендере заказ получит какая-то no-name компания, которая возьмёт, скажем, Кибер-плат, перекрасит, назовёт SUPERVISA, а потом стране с этим жить.

“Кто будет её проектировать и какие задачи каких пользователей она будет решать?” — это на порядок более важный вопрос, чем кажется. Если её будут разрабатывать люди из банковской сферы — то она будет нацелена на создание удобства банкам, а для людей и бизнеса — уж как получится (привет, Сбербанк!). Если её будут делать люди из онлайн-систем, то она в первую очередь будет решать задачи онлайн-бизнеса (банковские задачи им интересны в последнюю очередь). Если её будут делать бухгалтера, то это будет облачная 1С. Если её будут делать Erlang-программисты, то задачей будет показать его преимущества, перед другими унылыми языками. Если её будут делать любители короткошерстных терьеров, то… нет, не хочу даже искать ответ на этот вопрос.

И вот на вопросе об основных принципах новой платёжной системы появляется лошадиная задница..
Total votes 151: ↑113 and ↓38+75
Comments100

Микрокомпьютер Module MB 77.07 — русский ответ Raspberry Pi

Reading time10 min
Views112K


Читая новости о запрете на поставку электронной компонентной базы из США для отдельных производителей в РФ, мы решили рассказать об одноплатном микрокомпьютере Module МВ 77.07, который был разработан в российском научно-техническом центре «Модуль» на базе одного из наиболее производительных российских процессоров архитектуры ARM. Также мы рассмотрим установку Linux-дистрибутива Debian на этот микрокомпьютер.
Читать дальше →
Total votes 119: ↑106 and ↓13+93
Comments194

Еще раз про стрелочные индикаторы (и совсем без МК)

Reading time3 min
Views58K
Всем привет!
Мне сразу очень понравилась статья про стрелочную индикацию загрузки процессора и памяти. Бывает нужно глянуть, сколько осталось свободной памяти, запуская третий-четвертый экземпляр тяжелой программы/игры (не хочется доводить до ситуации, кода предыдущие экземпляры свопятся). Или с загрузкой процессора — раньше я думал, что современные Crysis, Call of Duty, Mass Effect и т.д. грузят и видеокарту, и проц. Теперь я знаю, что даже когда картинка подтормаживает — проц загружен не больше 30-40%. Ну или с ходу оценить, все ли ядра использует рендеринг. А какое удовольствие глазу доставляют дергающиеся стрелочки.
Вторая реализация хоть и так же наглядна, но в душу не запала — нет той зрелищности.
Поэтому я решил — когда-нибудь непременно повторю со стрелками.
Единственная проблема, из-за которой я не сделал это сразу — это лень отсутствие индикаторов конечно. И вот, разбирая старый-старый хлам в старом-старом шкафу, я нашел ИХ.


Читать дальше →
Total votes 53: ↑51 and ↓2+49
Comments46

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Registered
Activity