Сегодня мы решаем задачу 2924. Find Champion II
🏆 Задача:
В турнире n
команд представлены как вершины DAG (ориентированного ацикличного графа). Если команда a
сильнее команды b
, это отображается направленным ребром от a
к b
. Требуется найти чемпиона турнира — вершину, из которой достижимы все остальные вершины. Если чемпиона нет или их несколько, вернуть −1
.
😊 Идея:
В DAG вершина с отсутствующими входящими рёбрами (in_degree = 0
) является источником. Если в графе ровно один источник, он становится кандидатом в чемпионы, так как из него достижимы все остальные вершины
(Нетривиальный момент: это утверждение не верно в общем случе, но в случае DAG его несложно доказать).
Если источников больше или ни одного, чемпиона не существует.
Сложность
-
🕒 Временная сложность:
O(m)
: Обход рёбер для подсчёта входящих рёбер.
O(n)
: Проход по массиву in_degree.
- Итого:
O(n+m)
.
-
🗂️ Пространственная сложность:
O(n)
: Для хранения массива in_degree
.
Исходный код решения
impl Solution {
pub fn find_champion(n: i32, edges: Vec<Vec<i32>>) -> i32 {
let mut in_degree = vec![0; n as usize];
// Calculate in-degrees for each node
for e in &edges {
in_degree[e[1] as usize] += 1;
}
// Identify the potential champion
let mut champion = -1;
let mut n_champions = 0;
for (node, °ree) in in_degree.iter().enumerate() {
if degree == 0 {
champion = node as i32;
n_champions += 1;
}
}
// There must be exactly one node with in-degree 0
if n_champions == 1 {
champion
} else {
-1
}
}
}
ответить
Начну-ка я минипроект по разбору ежедневных задач с LeetCode.
Решения будут на раст, ибо: модно, стильно, молодёжно!
Rust идеально подходит для задач с LeetCode благодаря высокой производительности, безопасному управлению памятью и удобным инструментам для работы с данными, обеспечивая компактный и надёжный код.
Надеюсь, такой контент будет полезен аудитории.
ответить
notq - коллективный блог. Я сделал его для людей, которые мне нравятся. Скорее всего, это и вы.
И лентой, и ранжированием комментариев управляют посетители с помощью голосования (примерно как на hackernews или на старом реддите). Пишите о чем угодно и как угодно. Вообще-то все свои, но некоторые иногда стесняются, поэтому можете писать анонимно.
Действует единственное правило: не пишите чего-нибудь такого, за что меня или вас посадят. Модерация есть, но предназначена только для решения этой задачи. Upd: правило отменено
notq - проект личный, некоммерческий, не связанный ни с какой компанией или организацией. Честно!
Баги и предложения о развитии можете кидать в комментарии.
Peace.
- Почему notq? В честь моей бывшей. В каком-то смысле. Потому что всего 4 буквы, не занято, вполне приличные ассоциации с нотами и заметками. Читается "нотка", а впрочем, читайте как хотите
- Что на логотипе? Глайдер из игры "Жизнь"
28 ответов
Предположительно, тебя повысили за то, что ты что-то делал руками лучше всех. Ты будешь много где встречать советы вроде "теперь всё изменилось, у тебя другая работа, прекращай работать руками" и т.п. Это может быть верно, но может быть и херней. До тех пор, пока ты можешь лично создавать 30% или больше от артефактов (строчек кода, фичей, смысла), которые требуются от команды, забей на всякую муть типа методологий и пиплменеджмента и просто продолжай. Да, так ты "на самом деле" "не руководитель", а просто мощный волчара, но шансы на успех будут гораздо выше, чем если ты будешь всё делать как в книжке. Дело даже не в том, что ты напишешь кучу кода, а в том, что это будет твой код, ты будешь хорошо понимать, что в нем и вокруг вообще происходит, и что сколько стоит. Когда у тебя в команде будет 50 человек или больше, это тебе очень пригодится.
В какой-то момент тебе захочется, чтобы команда перестала тебя ограничивать. Для этого нужно, чтобы в ней не было идиотов, и чтобы хватало рабочих рук. Поэтому придется этим заняться самому. В твоей компании на эту тему наверняка есть куча странных ритуалов, их, по возможности, нужно обойти, чтобы как можно быстрее выгнать некомпетентных кретинов. Обычно можно научиться делать их работу за них в 10 раз быстрее, тогда можно будет их сначала выгнать, а потом нанять замену, а не наоборот. Нанимать лучше "умных", а не "опытных" (еще лучше и то и другое, но у вас столько денег нет). Сделать из умных опытных легко, а в обратную сторону невозможно, ну или я не умею.
Вновь нанятых нужно научить работать. Единственный способ это сделать это кодревью, местами переходящий в парное программирование (это единственный смысл в парном программировании). В этот момент можно научить нового человека работать втрое быстрее, чем его предшественник. Главное, чтобы он об этом не догадался.
Где-то в этот момент ты обнаружишь, что лично создаешь уже не очень значимую часть финальных артефактов. Это хорошо, ты стал руководителем, только не методом "давайте всё сломаем, потому что так в книжке написано", а естественным образом.
В этот момент надо заставить команду набрать импульс самостоятельно. Чтобы каждый день в проекте происходило что-то ценное, даже если ты за этим не следишь детально.
Типичные примеры такие:
- придумать каждому хорошему человеку задачу на вырост, в рамках которой он, если захочет зажечь, будет заниматься чем-то полезным (иначе он займется рандомом типа "переписать всё на расте")
- научить людей содержательно ревьюить код друг друга, чтобы они не ждали твоего ценного мнения
- научить людей строить системы так, как ты бы сам их строил (то есть простые и работающие)
- (специфично для ML) настроить сбор обучающих данных с максимальной скоростью
Ну вот в принципе и всё, таким способом ты сможешь собрать крутую команду, создавать с ней офигительный хайтек и менять мир к лучшему. Потом повысят все равно не тебя, потому что топ-менеджмент формируется не так, но это уже совсем другая история.
9 ответов
Но и постов давно не было. Не уверен, что получилось коммьюнити :-(
4 ответа
Я понятия не имею, как это делается "правильно", поскольку последние 15 лет провел в корпорации и коммитил только взакрытую.
Тем не менее, если не попробовать, то ведь никогда и не научусь, правда? Поэтому вот:
https://github.com/aplakhov/notq
Кидайте свои помидоры, заводите issues, пилите пулреквесты и всё такое. README "как развернуть и протестировать" постараюсь дописать в ближайшее время.
2 ответа
Внезапно обнаружил, что понятие «шуньята» или «пустота» из буддизма практически равнозначно любимому void*
Керниган и Ричи обучили нас азам буддизма?
ответить
Я не знаю ответ на этот вопрос, зато сегодня я узнал кое-что другое, чем-то связанное.
В 1716 году астроном Галлей (в честь которого названа комета) придумал способ определения размеров Солнечной системы. Для этого нужно подгадать момент, когда Венера проходит по солнечному диску, и пронаблюдать его из двух достаточно далеких мест на поверхности Земли. Из-за параллакса геометрия прохождения будет слегка отличаться, и используя это отличие, можно будет вычислить расстояния в тройке Земля - Венера - Солнце, зная расстояния между точками, откуда производились наблюдения на Земле. Дальше на основе расстояния от Земли до Солнца можно посчитать и размеры орбит остальных планет.
(если нужно, тут подробное и более-менее понятное описание того, как именно всё это считается, с картинками)
Ну и вот, наверное, какие-то два джентльмена-астронома проделали этот опыт и получили ответ, да? Не совсем так...
В реальности произошло вот что. Во-первых, подходящего транзита пришлось ждать 50 лет, но за это время идею не забыли и не похоронили. Во-вторых, более того:
Чешский астроном Кристиан Майер был приглашен российской императрицей Екатериной Великой наблюдать за прохождением Венеры в Санкт-Петербурге вместе с Андерсом Йоханом Лекселлом, в то время как другие члены Российской академии наук отправились в восемь других мест Российской империи под общим руководством Степана Румовского.
Король Соединенного Королевства Георг III приказал построить королевскую обсерваторию рядом со своей летней резиденцией в Ричмонд-Лодж, чтобы он и королевский астроном Стивен Деменбрей могли наблюдать за прохождением Венеры.
Читать дальше →
ответить
Статья спасена из Яндекс.Кью
Чтобы лучше понимать космические новости, полезно выработать интуицию: что вообще означает "полететь в космос", почему это сложно и от чего эта сложность зависит. После этого вы также начнете получать больше удовольствия от "Марсианина", "Семиевия" и вообще книг Энди Вейера и Нила Стивенсона (и меньше от другой космической фантастики)
Космос не наверху
Большинство людей интуитивно представляют себе полёт в космос совсем неправильно, так, как будто задача состоит в том, чтобы взлететь куда-то очень высоко. Это не так, и подобное интуитивное заблуждение мешает понимать почти всё, что с космосом связано. Например, чем полёты на МКС, на Луну и на Марс отличаются друг от друга, и что из этого во сколько раз сложнее и дороже. Например, почему противоракетная оборона от межконтинентальных баллистических ракет настолько безумно сложна, хотя сами они являются технологией середины прошлого века. Тем более это касается полуфантастических вещей вроде космических лифтов и орбитальных поселений.
это высоко, но это не космос
Даже люди с высшим физико-математическим образованием часто в теории знают, как оно на самом деле, но интуицией на этот счёт не обладают, потому что никто не научил их простому мнемоническому правилу: космос это не высоко, космос это быстро.
Например, международная космическая станция летает примерно на высоте 400 километров над поверхностью. А радиус Земли почти в 20 раз больше. Если представить себе Землю как баскетбольный мяч, то МКС от него на расстоянии меньше сантиметра. Гравитация там во всех смыслах такая же, как и "внизу". Невесомость на станции не потому, что станция высоко, а потому что она находится в свободном падении. Невесомость, которую можно чувствовать до раскрытия парашюта или в падающем самолёте, это не какое-то похожее ощущение или имитация, это в точности тот же самый эффект.
Но станция не только "падает вниз", она ещё и "летит вбок" со скоростью несколько километров в секунду. Поэтому "падение" её всё время только заворачивает, и мимо поверхности она "промахивается". Это и есть орбита.
Чтобы полететь в космос, не нужно улетать далеко, достаточно оказаться за пределами атмосферы, а это пустяки, километров сто, в границах Москвы есть точки, находящиеся на таком расстоянии друг от друга. Но ещё нужно не упасть сразу же обратно, а вот это уже требует очень, очень быстро двигаться "вбок". Это "очень-очень" как раз и называется "первой космической скоростью", чуть меньше 8 километров в секунду. Почему это так сложно?
Читать дальше →
2 ответа
Disclaimer: написанное ниже не является инвестиционной рекомендацией! Перепроверяйте всё, что читаете в интернете, особенно связанное с деньгами.
Несколько раз сталкивался с тем, что достаточно умные, на мой взгляд, люди не умеют посчитать стоимость того или иного дериватива. Но это ладно, гораздо хуже, когда эти люди считают, что это не нужно, или сложно. Хочу попробовать себя в жанре "простые ответы на простые вопросы", и показать, что это А) не сложно и Б) может пригодиться.
Упрощённый пример
Рассмотрим простую ситуацию. Некто предлагает вам, на выбор, два варианта: либо он даёт вам 100 рублей сейчас, либо X рублей ровно через 1 год. Предположим, что это кто-то, известный своей кристальной честностью и приверженностью обязательствам (например, компания Яндекс), и вы полностью уверены в том, что получите свои X рублей. Какой вариант стоит выбрать?
Очевидно, что ответ зависит от X, причём монотонно: нет смысла брать 105 рублей через год вместо 100 сейчас, но выбирать 100 рублей сейчас вместо 110 рублей через год. Также понятно, что если X < 100, то нужно брать 100 сейчас, а если X очень большое, например, миллиард, то нужно выбрать его. Как выбрать точку отсечения?
На первый взгляд, нужно попробовать понять, какая будет инфляция, что же мы сможем купить на эти деньги через год. Но на самом деле правильный ответ можно вывести почти "из первых принципов", и инфляция будет играть в нём роль стороннего наблюдателя.
Первые принципы
Читать дальше →
5 ответов
Все мы хотим жить долго и быть здоровыми. Сейчас я научу вас, как это делается. Или нет.
Человеческое тело - гомеостатическая машина. Чтобы не упасть замертво на ровном месте, ему нужно, независимо от происходящего вокруг, держать в узких пределах много различных показателей (намного больше, чем у Боинга 747). Температуру тела, давление, уровень глюкозы в крови, уровень CO2, кислотно-щелочной баланс крови (все они, выйдя за пределы, убьют вас на месте). В табличке "Список основных гормонов" в Википедии несколько десятков строчек, к ним относятся, например, инсулин (при выходе за пределы шприц каждый день, несколько раз в день, до конца жизни) или серотонин (при выходе за пределы выход только в окно, если хоть на это хватит сил); про остальные вы слышали реже, но это не значит, что они менее важные. А ещё свои строгие пределы и сверху, и снизу положены всяким липидам (например, холестерину), ферментам ("генетическое заболевание" это обычно про них), витаминам и т.п.
Очень здорово, что, как правило, человеку не нужно всё это изучать, чтобы просто существовать. Организм сам поддерживает гомеостаз с помощью разных своих органов и систем. В общем-то не "разных", а "всех", в этом и заключается его работа. Можно себе представить такую машину с разными узлами, в каждом из которых множество датчиков и актуаторов: стал снижаться уровень клюмбума в шесячнице? Впрыснем чуть больше преклюмбума в подзазульник, пусть перерабатывает в клюмбум. Обратных связей подобного рода много.
Ну, дальше вам исполняется 40 лет, датчик заклинивает, потому что в нем скопилась копоть, и всегда показывает "БОЛЬШЕ КЛЮМБУМА". Подзазульник начинает работать с удвоенной мощностью, и от этого с высокой вероятностью сломается лет через пять; лишний клюмбум из организма теперь нужно как-то удалять, и пощенки вынуждены тратить на это по меньшей мере половину своей пропускной способности, выполняя остальную свою работу хуже. Проблемы в организме накапливаются, пока не откажет совсем кто-то из вышеперечисленных, или даже какой-то узел, на первый взгляд с ними слабо связанный. И тогда человек впервые понимает, что у него не просто временами побаливал живот и была изжога, и идет к врачу, или вызывает скорую, или вызывают скорую его родственники.
Читать дальше →
3 ответа
-
в какой-то момент в notq начнут приходить новые пользователи. Чтобы истинная аудитория не растворилась среди случайных людей, на сервисе появится разделение на ценных пользователей и всех остальных. Ценные пользователи влияют на ранжирование и карму в десятки раз сильнее. Все пользователи, приглашенные изначально (технически, зарегистрировавшиеся до определенной даты), станут ценными пользователями автоматически. Дальше статус ценного пользователя будут получать те, кого ценят (то есть за чей контент голосуют) другие ценные пользователи. Система определения ценного пользователя может меняться и дорабатываться, основная цель всего этого - сделать так, чтобы сервис продолжал нравиться мне и вам и хорошо отделял сигнал от шума. Ну и цветовая дифференциация штанов, конечно
-
появится тг-ботик, который умеет присылать лучшие посты
-
когда контента станет много, появится больше способов ориентироваться в нем. Будут ли это улучшения механик тэгов, какие-то подписки, или "сообщества", аналогичные сабреддитам, я пока не знаю и с удовольствием с кем-нибудь посоветуюсь на этот счёт
Ваши соображения можете писать в комменты. Если вам нужны какие-то мелкие улучшения, типа поддержки TeX или шахматной нотации, displayname или аватарок для пользователей и так далее, пишите. Если вы хотите сделать сервис гораздо красивее и готовы помочь, тоже пишите. Особенно если этого можно добиться простым улучшением css (а я совершенно уверен, что можно).
18 ответов
Наши «цифровые помощники» — Siri, Алиса, «Окей Гугл», Alexa и прочая Маруся прямо сейчас топчутся на важном рубеже, перейти который уже некоторое время не очень получается — и не только по технологическим соображениям.
Рубеж этот заключается в принципиальной разнице между «окей, Гугл, покажи мне авиарейсы в Питер на пятое число» и «Сири, купи мне билет в Питер на пятое». Одно дело — когда помощник просто собирает для тебя информацию, совсем другое — когда помощник сам принимает решение. Делегировать принятие решения непросто, даже если речь о помощнике из мяса и костей: нужна уверенность, что помощник не просто способен сделать лучший выбор, но и сделает его в твоих интересах.
Помощнику-человеку нужно создать мотивацию действовать именно в твоих интересах. Как именно — об этом написаны тысячи книг; тут и финансы, и личная преданность, и религиозные мотивы, и мораль, и чего только нет. Цифрового помощника достаточно запрограммировать на нужное «поведение» (ну, то есть на оптимизацию по параметрам, нужным именно тебе). Одна проблема: помощника, как правило, программируешь не ты.
Хорошо, если принятое решение легко проверить. Если камера в телефоне «промахнулась» в балансе белого, это сразу видно. Впрочем, такие решения уже давно делегированы, с ними проблем нет. Ещё хорошо, когда интересы автора системы-помощника совпадают с интересами пользователя: программисты спам-фильтров, как правило, в самом деле хотят, чтобы в твоей почте было меньше спама. Правда, тут уже возможен конфликт интересов: Mail.ru может быть не очень мотивирована отфильтровывать спам от VK, а почта Yahoo — спам от Verizon, например…
К сожалению, по состоянию на сегодня средства и компетенции для разработки худо-бедно универсальных «цифровых помощников» есть только у крупных компаний, и конфликт интересов практически неизбежен. Выбирая между тобой и ООО «Яндекс», кому во благо примет решение Алиса в твоём телефоне? Каковы шансы, что Маруся при выборе, где купить товар, предпочтёт Ozon, а не Мегамаркет — даже если на первом дешевле и быстрее? Люди, конечно, бывают всякие, но я сильно сомневаюсь, что в таких условиях кто-то готов доверить помощнику принятие решений, даже если этот кто-то погружен в соответствующую бизнес-экосистему «с потрохами».
Читать дальше →
18 ответов
Был у меня был период увлечения математической логикой в тщетной попытке понять доказательство независимости континуум-гипотезы от ZFC. Хочу рассказать оттуда об одном занимательном факте и предложить не очень сложную, но красивую, на мой взгляд, задачку.
Сначала немного определений. Назовём структурой произвольное множество M, на котором заданы какие-то отношения. Например, (N, <) - множество натуральных чисел с отношением "меньше", или (R, +) - множество действительных чисел с отношением сложения. "Отношение сложения" - это множество всех троек (x, y, z), для которых x + y = z.
Имея структуру, можно задаться вопросом, какие множества в ней определяемы с помощью стандартных логических формул (и, или, отрицание, существует, для любого). Разрешён знак =, который означает совпадение элементов.
Чтобы определить множество, нужно написать формулу с одной свободной переменной, которая будет верна только на этом множестве. Например, множество чётных чисел в структуре (Z, +) определяется формулой "существует y такое, что x = y + y". Свободная переменная здесь - x, и утверждение верно тогда и только тогда, когда x чётное.
Ещё несколько примеров.
-
Ноль в структуре ( Z, +) определяется формулой "x + x = x".
-
Отношение порядка в структуре ( N, +) определяется формулой "существует z такое, что x + z = y". Эта формула верна, когда x < y.
-
Множество неотрицательных чисел в структуре ( Z, +, *) можно определить с помощью теоремы Лагранжа: "cуществуют такие k, l, m, n, что x = k*k + l*l + m*m + n*n".
Читать дальше →
6 ответов
Посоветуйте, пожалуйста, короткие фантастические рассказы. Очень люблю этот жанр, особенно, перед сном.
Со своей стороны, предложу«Индетерминированный ключ» (The Laxian Key ) Шекли.
7 ответов
Настало время действительно горячих взятий hot take-ов!
Сформулирую кратко (но разверну мысль в ответе): мне кажется, что технический прогресс больше не нужен.
Судите сами: прогресс в идеале направлен на то, что человеческая жизнь становится 1) удобнее, 2) безопаснее и 3) продолжительнее.
1. Человечество умеет производить вещи в таких количествах, и с такой точностью и воспроизводимостью, что может закрыть потребности всех людей в базовом удобстве и комфорте. Никаких новых изобретений для этого уже не нужно.
2. Существуют страны, в которых жизнь, если не абсолютно, то уж по крайней мере почти безопасна (Швейцария, Япония, Новая Зеландия). Значит, рецепт безопасности тоже известен, и его не нужно далее улучшать.
3. Продолжительность жизни - это заслуга медицины, и в лучших странах она уже составляет в среднем (!) 80+ лет. Для чего человеку больше - я не знаю, а всё, что зависит не от медицины, а от климата и образа жизни - это уже целиком неподвластно техническому прогрессу.
Таким образом, я хочу подвести к мысли, что самым лучшим занятием сейчас становится не прогресс per se, а его распространение в места, куда он пока не достиг. Чем более равномерно и хорошо будет благоустроена Земля, тем лучше мы будем жить как вид. Вряд ли полностью комфортная Земля совсем исключит конфликты и войны, но их точно будет меньше, когда люди не будут голодать и ходить в туалет на улице. Единственное, в чём ещё точно нужен прогресс - это в переработке отходов жизнедеятельности человека, но и тут скорее это будет просто повсеместное распространение хороших практик, чем какой-то радикальный прорыв.
Кстати, ещё лет 15 назад я бы не согласился со своим же утверждением, потому что тогда были области, где прогресс ещё только зарождался и приносил реальное качественное улучшение жизни - Интернет и все сервисы в нём, агропромышленная революция, электротранспорт. Но сейчас, кажется, прогрессирует только AI, который сам по себе тема для отдельного hot take, который я, может быть, запилю позже.
Косвенно моя мысль подтверждается также тем, что в индустрии программирования несколько лет назад начались массовые layoff-ы, которые в целом говорят о том, что все нужные сервисы (и их конкуренты) уже сделаны, осталось только развивать то, что постоянно требует развития, а на это нужно гораздо меньше людей.
27 ответов
Весьма высокоразвлекательный факт обнаружил mwatkins, какой-то пользователь lesswrong. Он взял открытую LLM'ку (конкретнее GPT-J), и добавил к ней новый токен, эмбеддинг которого является усреднением эмбеддингов всех токенов в словаре. По идее должна была получиться такая совершенно абстрактная штука, не существительное, не глагол и не число, не теплая и не соленая и не деепричастие, не хорошая и не плохая, но все это вместе в небольших дозах.
Далее mwatkins попросил AI дать определение этой самой штуке:
A typical definition of <token> would be '
Большинство определений, как и можно было ожидать, как-то так и выглядели:
"кто-то или что-то, кто некоторым образом относится к какому-то..." и т.д. и т.п.
Однако.
Были и исключения.
Читать дальше →
3 ответа
Статья спасена из Яндекс.Кью
Сегодня я узнал, что печенье «Юбилейное» впервые было выпущено в 1913 году в честь 300-летия дома Романовых.
Поэтому и "Юбилейное".
1 ответ
Расскажите, какую самую потрясающую дичь вы наблюдали в реализации архитектуры сервисов/ПО/интеграций?
4 ответа
Ответ спасен из Яндекс.Кью
Я пишу код уже больше 20 лет и, хотя в последнее время больше занимаюсь руководством, на пике формы был способен писать по 500+ строк хорошо работающего кода в день. Вот принципы, которые мне в этом помогали:
-
Не переобобщайте. Если не получается малой кровью создать универсальное решение, то и неважно, решите конкретную текущую задачу и двигайтесь дальше. Обобщение, даже хорошее, в 70% случаев так и остается нигде больше не использованным.
-
Не оптимизируйте код заранее. Идея усложнить код ради его ускорения почти всегда ошибочна. Исключение возможно только в том случае, когда именно этот участок код "тормозит" так, что это уже заметно на уровне продукта или бизнеса. "Пессимизировать" код тоже, конечно, не нужно, из двух версий, одинаковых по сложности и по объему кода, выбирайте более быструю. Из этого есть важное следствие: нельзя дублировать данные и нельзя кешировать результаты вычислений там, где этого не требует во весь голос производительность. Больше половины структурных багов возникает из-за того, что "разъехались" кэш и реальные данные, причем еще и отлаживать такое обычно адски сложно, потому что в момент собственно "разъезжания" никакого бага еще не видно, он проявится потом, когда ставить breakpoint-ы и проходить исполнение по шагам уже поздно.
-
Называйте и группируйте всё происходящее правильно. Код, в котором нет алгоритмических или технологических сложностей, должен читаться как текст, написанный по-английски. Хорошо, когда код, в котором ниндзя куда-то крадётся, выглядит как-то вроде ninja.sneak(...), а не pDst2.trySetCoord(...) и ещё десять строчек после этой, ни одну из которых нельзя забыть. Если функция что-то меняет в состоянии объекта, она не может называться isSomething -- если так сделать, следующий же код с её участием обречён на интересный дебаг. Если функция что-то трудно вычисляет, она не может называться getSomething -- кто-нибудь наверняка начнёт вызывать её в цикле и удивляться, почему всё тормозит. Класс, который хранит состояние документа, может называться DocumentState или Document, но никак не SDManager. Кстати, про Manager-ов. Если единственное название, которое вы можете выбрать для класса или метода, получается очень расплывчатым, это верный признак того, что вы делаете что-то неправильно. Классы BaseObject и World или функции databaseOps и initService быстро приведут к самым разным проблемам и багам, связанным с нарушениями этого и предыдущего пунктов.
-
Не смешивайте алгоритмы и другие технологически сложные участки кода с бизнес-логикой. Выразительности современных языков программирования вполне достаточно для того, чтобы, скажем, графический движок компьютерной игры ничего не знал о ниндзя и вертолётах, функции работы с БД в CRM-системе не знали слов "счёт" и "клиент", и т.д. и т.п. Для бизнес-логики типичны постоянные изменения, нечеткость и путаница. Как только сущности с разных уровней абстракции начинают упоминаться в соседних строчках кода, , всё это тут же начинает проникать и в технологически сложный код, и всё взрывается.
Читать дальше →
1 ответ
Когда-то я мог сидеть и программировать 10-12 часов подряд. Сейчас не получается, каждые несколько минут борюсь с желанием получить бесплатного дофаминчику в какой-нибудь соцсети. Обычно проигрываю. Когда мне удается войти в поток, я за полдня могу сделать столько же, сколько обычно делаю за две недели. Есть у кого такие же проблемы? Что делать?
14 ответов
В среде ML'щиков прямо захайпились сети Колмогорова-Арнольда - https://arxiv.org/abs/2404.19756
А насколько по вашему безумная идея попробовать другие варианты апроксимации функций на рёбрах сети. Математически базис рядов Фурье вроде как лучше должен на эту задачу ложиться, нежели сплайны.
5 ответов
Всем привет! Для оживления дискуссии в этом уютном киберпространстве я решил запилить серию флеймообразующих философских вопросов (по одному в несколько дней) из серии "потрындеть под пиво". Я их долго собирал, но ещё никуда особо не закидывал, так что посмотрим, какие действительно хороши, а какие так себе. Надеюсь на ваши вдумчивые ответы и широкий спектр мнений.
Итак, сегодняшний вопрос:
Как вы считаете, сокращается ли в мире (и в частности в России) разрыв между поколениями - становятся ли более похожими дети и родители, их занятия, уровень образования, взаимопонимание? Будет ли в целом будущим поколениям легче взрослеть, учитывая объём и структурированность доступной информации?
Моё мнение: за весь мир не скажу, но в России это точно наблюдается. Пра-прадеды жили в деревне, прадеды работали в колхозах и перебирались в город, деды часто были первые, кто мог получить высшее образование, родители прошли уравниловку в советской системе, соответственно, их дети (текущие 25+ летние) имели примерно одинаковые стартовые возможности и культурный базис, при этом уже не меняя стиль жизни (деревня->город) и не меняя уровень образования (почти у всех высшее, как и у родителей). При этом сейчас растёт осознанность потребления, отношений (почти все хоть раз ходили к психологу), у всех в доступе в интернете одни и те же вещи. Текущие 25+ - это поколение с самыми широкими взглядами, поэтому им будет в среднем легче всего принять своих детей такими, какими они захотят быть, и дать им в этом свободу. В свете этого я считаю, что следующей культурной революции можно уже не ждать, потому что пока в целом непонятно, куда ещё можно расширить восприятие или самоидентификацию. Просто постепенно достигнем универсализма, вслед за всем прогрессивным миром.
В глобальном смысле будет интересно, куда зайдёт столкновение архаики/традиционности (условно Ближний Восток + Средняя Азия + Африка) и прогресса (условно США + Европа + Австралия/Сингапур/Япония). Учитывая, что и тех, и других примерно поровну, а есть ещё Индия и Китай, в которых и то, и другое очень интересно смешано, в целом может быть и так, что прогресс имеет шансы так и не стать универсальным.
21 ответ
Статья спасена из Яндекс.Кью
Джарон Ланье: “Я хотел бы выдвинуть гипотезу об одной цивилизующей силе, которая заключается в восприятии множества пересекающихся иерархий статуса. Я заметил, что это помогает в работе по реабилитации членов банд в Окленде. Когда существует множество перекрывающихся иерархий статуса, у людей больше шансов не драться за более высокий статус в цепочке. И чем жестче навязывание единой иерархии в жизни людей, тем больше вероятность того, что они вступят в конфликт друг с другом. Частью успеха Америки является фактор путаницы в понимании того, как оценивать чей-либо статус”.
Стивен Пинкер: “Это глубокое наблюдение. Есть исследования, показывающие, что насилие более распространено, когда люди ограничены одной иерархией, и вся их социальная ценность зависит от того, где они находятся в этой иерархии, тогда как если они принадлежат к нескольким пересекающимся группам, они всегда могут искать подтверждения ценности в другом месте. Например, если я делаю что-то глупое, когда я за рулем, и кто-то показывает мне палец и называет меня мудаком, это не конец света: я думаю про себя, что я штатный профессор в Гарварде. С другой стороны, если бы статус среди мужчин на улице был моим единственным источником ценности в жизни, я мог бы разозлиться на дороге и вытащить пистолет. Современность включает в себя множество вещей, и их трудно отделить друг от друга. Но я подозреваю, что когда вы не ограничены деревней или кланом, и вы можете искать свою судьбу в широком мире, это является умиротворяющей силой именно по этой причине”.
Отсюда: https://www.edge.org/conversation/mc2011-history-violence-pinker
ответить
С самого начала развития теории ветвящихся процессов было ясно, что в некоторых случаях они могут быть применены в генетике. Но в 1948 году в СССР был окончательно завершен разгром генетики. При существовавшем тогда официальном государственном мировоззрении разгром генетики привел к тому, что даже теория вероятностей оказалась под угрозой стать в глазах властей «вредной наукой». В 1946 году вышел в четвертом издании учебник академика Сергея Натановича Бернштейна «Теория вероятностей», в котором было много задач, связанных с законами Менделя. Учебник быстро разошелся, и все попытки автора издать стереотипно следующее издание не привели к успеху. От автора требовали убрать эти задачи, на что он не согласился. Одним из тех, кто принимал активное участие в уничтожении генетики в СССР, был академик Трофим Денисович Лысенко, президент Всесоюзной академии сельскохозяйственных наук. Лысенко тогда бросил лозунг: «Наука – враг случайности». Отсюда недалеко и до организационных выводов. Я не могу забыть, как блестяще в МГУ публично выступил член-корреспондент Академии наук СССР Александр Яковлевич Хинчин. Он сказал: «Известен лозунг: «Наука – враг случайности». И это абсолютно верно. Но врага надо изучать. И это делает теория вероятностей».
воспоминания Б.А. Севастьянова
Заметка из Телеграм-канала "Воспоминания математиков", который всем рекомендую @mathmemories
6 ответов
Страница
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16