Files
eduplan-cpp-eltex/diag/cards_src.tsv
T

35 KiB

1leveldomainquestionanswerref
2basealgoВо что превращается 3n + 100 в O-нотацииO(n)урок D1_algo.md
3basealgoСколько шагов у бинарного поиска в массиве из 10⁶ элементов20 (log₂ 10⁶ ≈ 20)урок D1_algo.md
4corealgoПочему push_back в среднем O(1), а не O(n)ёмкость растёт геометрически (удвоение), сумма реаллокаций на n вставок — геометрическая прогрессия ≈ n, а не n²урок D1_algo.md
5corealgoЧто ломает удвоение ёмкости у vectorуказатели/итераторы/ссылки на старые элементы (реаллокация переносит блок памяти)урок D1_algo.md
6deepalgoЧто будет, если ёмкость vector растить на +1 за раз вместо удвоениясуммарная стоимость n вставок станет O(n²)урок D1_algo.md
7basealgoСложность построения кучи (heapify) из произвольного массиваO(n), не O(n log n)урок D1_algo.md
8basealgoКакая сортировка всегда O(n log n) и устойчиваmergesortурок D1_algo.md
9corealgoХудший случай quicksort и когда он достигаетсяO(n²), на уже отсортированном массиве при плохом выборе опорногоурок D1_algo.md
10corealgoНижняя граница сортировки сравнениямиΩ(n log n)урок D1_algo.md
11corealgoЗа счёт чего map держит высоту log nинвариант красно-чёрного дерева: чередование цветов + равное число чёрных узлов на пути от корня до листаурок D1_algo.md
12deepalgoПочему нельзя полагаться на порядок обхода unordered_mapпорядок бакетов не гарантирован и может меняться при rehashурок D1_algo.md
13basealgoФормула фактора загрузкиload = size / capacityурок D1_algo.md
14basealgoПорог load factor при открытой адресации, после которого делают rehashобычно ≤ 0.7урок D1_algo.md
15corealgoЗачем tombstone при открытой адресациичтобы удаление не обрывало цепочку зондирования: поиск должен пройти сквозь помеченную ячейку до элемента, вставленного позжеурок D1_algo.md
16corealgoПочему ёмкость хеш-таблицы берут степенью двойкиidx = hash & (cap-1) вместо деления по модулю — дешевле на процессореурок D1_algo.md
17corealgoЧто физически происходит при rehashвыделяется массив вдвое больше, каждый элемент переставляется по новому индексу (зависит от cap)урок D1_algo.md
18deepalgoПочему rehash даёт амортизированное O(1), а не O(n) на вставкута же геометрическая прогрессия, что у vector::push_back: суммарная стоимость n вставок ≈ n, а не n²урок D1_algo.md
19basealgoСложность has_pair (вложенный цикл по всем парам)O(n²)урок D1_algo.md
20corealgoСложность has_pair_fast по времени и по памятиO(n) по времени в среднем, O(n) дополнительной памяти под хеш-множествоурок D1_algo.md
21basealgoКакие константы использует FNV-1a в этом коде (offset basis / prime)1469598103934665603 / 1099511628211урок D1_algo.md
22corealgoПочему rehash пересчитывает индекс для каждого узла, а не переносит их как естьиндекс = hash % buckets.size(), а size() изменился (удвоился), старые индексы для нового размера в общем случае неверныурок D1_algo.md
23corealgoЧем открытая адресация выигрывает у цепочек по производительности и почемуона кэш-дружелюбнее: элементы лежат подряд в массиве, а не разбросаны по куче отдельными узламиурок D1_algo.md
24deepalgoМожет ли load factor у цепочек быть больше 1да, цепочка просто станет длиннее (в отличие от открытой адресации, где load ≤ 1 всегда)урок D1_algo.md
25baselinuxЧто возвращает `fork()` в родителе и в ребёнкев родителе PID ребёнка (>0), в ребёнке 0, при ошибке −1урок D1_linux.md
26corelinuxЧто происходит со страницами памяти при `fork()`ничего сразу: COW, физическая копия страницы создаётся при первой записи в неё (page fault)урок D1_linux.md
27corelinuxПочему `fork` дешёвый даже для процесса с гигабайтами памятикопируются не данные, а только записи таблицы страниц; сами страницы данных не дублируются, пока их не изменятурок D1_linux.md
28baselinuxЧто нужно сделать с `stdout` перед `fork`, если он не пуствызвать `fflush(stdout)`, иначе буфер продублируется в ребёнкеурок D1_linux.md
29deeplinuxКакой размер страницы памяти на x86-64, о которой копия делается при COW4 КБурок D1_linux.md
30baselinuxЧем `exec` отличается от `fork``fork` создаёт новый процесс, `exec` заменяет образ текущего процесса, не создавая новогоурок D1_linux.md
31corelinuxЧто сохраняется у процесса после успешного `exec`PID и таблица открытых файловых дескрипторов, кроме помеченных `FD_CLOEXEC`урок D1_linux.md
32corelinuxПочему `exec` при успехе никогда не возвращает управлениестарого кода, куда можно было бы вернуться, больше не существует — адресное пространство заменено новым образомурок D1_linux.md
33baselinuxРазница между `execlp`, `execv`, `execvp``execlp` ищет в `PATH`, `execv` — по полному пути, `execvp` — по имени в `PATH`урок D1_linux.md
34baselinuxЗачем нужен `waitpid`забрать код возврата завершившегося ребёнка и позволить ядру освободить его запись в таблице процессовурок D1_linux.md
35corelinuxЧто такое зомби и почему он не исчезает сампроцесс, завершивший `exit()`, чью запись ещё не забрал родитель через `wait`; ядру некуда передать код возврата, кроме как дождаться `wait`урок D1_linux.md
36corelinuxЧем зомби отличается от сиротызомби: родитель жив, но не вызвал `wait`; сирота: родитель умер, процесс усыновлён init/systemd (PID 1)урок D1_linux.md
37baselinuxОткуда код возврата 137 и 139137 = 128+9 (SIGKILL), 139 = 128+11 (SIGSEGV) — так оболочка кодирует завершение по сигналуурок D1_linux.md
38corelinuxКак правильно проверить, что ребёнок убит сигналом, а не завершился штатномакросами `WIFSIGNALED(status)`/`WTERMSIG(status)`, не сравнением `status` напрямуюурок D1_linux.md
39deeplinuxЧто показывает `WCOREDUMP(status)`что завершение по сигналу сопровождалось записью core-дампа на дискурок D1_linux.md
40baselinuxНомера сигналов SIGINT/SIGKILL/SIGTERM/SIGSEGV/SIGPIPE/SIGCHLD2/9/15/11/13/17урок D1_linux.md
41corelinuxЧем SIGTERM отличается от SIGKILLSIGTERM перехватывается и позволяет корректно завершиться, SIGKILL не перехватывается и не игнорируется, ядро снимает процесс с исполнения напрямуюурок D1_linux.md
42corelinuxЧто можно делать внутри обработчика сигналатолько менять `volatile sig_atomic_t`; `printf`/`malloc` небезопасны (не async-signal-safe)урок D1_linux.md
43baselinuxЧем `sigaction` лучше `signal`поведение `signal` исторически различается между Unix-системами, `sigaction` даёт предсказуемую и переносимую семантикуурок D1_linux.md
44deeplinuxЧто происходит, если сервис игнорирует SIGTERM при `systemctl stop`по истечении `TimeoutStopSec` (по умолчанию ~90 c) systemd посылает SIGKILL принудительноурок D1_linux.md
45baselinuxЧто означает EINTR и как на него реагироватьвызов прерван доставкой сигнала; корректная реакция — повторить вызовурок D1_linux.md
46baselinuxЧем EAGAIN отличается от обычной ошибки чтенияданных сейчас нет на неблокирующем дескрипторе, это не сбой, а сигнал «попробуй позже»урок D1_linux.md
47corelinuxКогда безопасно читать `errno`сразу после ошибки вызова, до любого другого вызова, способного его перезаписатьурок D1_linux.md
48deeplinuxКакой errno сигнализирует об исчерпании лимита открытых дескрипторов процессаEMFILE (лимит задаётся `ulimit -n`)урок D1_linux.md
49baselinuxКакой код возврата у шелла даст несуществующая команда127урок D1_linux.md
50baselinuxКакие дескрипторы дочерний процесс получает от родителя при `fork` и почему вывод команды сразу виден в терминале0/1/2 (stdin/stdout/stderr) наследуются через копию таблицы дескрипторов при `fork`урок D1_linux.md
51corelinuxКаким флагом собрать бинарник для проверки на утечки и UB`-fsanitize=address,undefined -fno-omit-frame-pointer`урок D1_linux.md
52basealgoСколько байт меняет местами `bswap32`4задача 01_bits
53corealgoЧто делает `x & (x - 1)`гасит младший единичный бит `x`задача 01_bits
54corealgoСколько итераций цикла `popcount32` на `x = 0xFFFFFFFF`32 (по числу единичных бит)задача 01_bits
55deepalgoПочему `1u << 31` пишут с суффиксом `u`, а не как `int`сдвиг знакового `int` взадача 01_bits
56basealgoКакой порядок байт использует сеть для многобайтовых полейnetwork byte orderзадача 01_bits
57basealgoВо сколько раз быстрее идёт `fast` относительно `slow` в паре двух указателейв 2 разазадача 02_list
58corealgoПочему рекурсивный разворот списка не годится под требование O(1) памятикаждыйзадача 02_list
59corealgoНа чём основано доказательство, что `fast` догонит `slow` при циклевнутри циклазадача 02_list
60basealgoСколько дополнительных указателей нужно для итеративного разворота списка3задача 02_list
61basealgoСложность `push`/`pop` кольцевого буфераO(1)задача 03_ring
62corealgoКак отличить пустой буфер от полного при `head_ == tail_`хранить отдельныйзадача 03_ring
63corealgoЧем `delete[]` отличается от `delete` для массива, выделенного `new[]``delete`задача 03_ring
64basealgoКакое условие делает `push` дешевле, чем `% capacity_` на каждый вызовзадача 03_ring
65basenetМинимальная длина IPv4-заголовка без опций20 байтзадача 04_ipv4
66basenetКод `protocol` для TCP / UDP / ICMP6 / 17 / 1задача 04_ipv4
67corenetВ каком порядке лежат `src_ip`/`dst_ip` в буфере согласно заданию«как на проводе»,задача 04_ipv4
68corenetПочему `reinterpret_cast` буфера в `Ipv4Header*`UB? — нет гарантии выравниваниязадача 04_ipv4
69deepnetЧему должна быть равна сумма в доп. коде по `ihl*4` байтам заголовка (вместе с полемзадача 04_ipv4
70basealgoСложность наивного DP-решения LISO(n²)задача 05_lis
71corealgoСложность решения через `tails` + бинарный поискO(n log n)задача 05_lis
72corealgoЧто хранит `tails[k]`минимально возможный последний элемент возрастающейзадача 05_lis
73deepalgoПочему для строгого возрастания нужен `lower_bound`, а не `upper_bound`задача 05_lis
74basethreadsКаким флагом компилятора включается ThreadSanitizer`-fsanitize=thread`задача 06_threads
75basethreadsЧто бросает `push` после `close()``std::runtime_error`задача 06_threads
76corethreadsДолжен ли `size()` быть потокобезопасным в этой задачеда, его тоже вызывают из другого потока и он тоже под захватом мьютексазадача 06_threads
77corethreadsЧто происходит с ждущими потоками при `close()`все разблокируются (никакого вечного `wait`)задача 06_threads
78basethreadsЧто атомарно делает `cv.wait(lock)` при входеосвобождает мьютекс и усыпляет поток одной неделимой операциейзадача 06_threads
79corethreadsПочему `while` вокруг `wait`, а не `if`из-за spurious wakeup: `wait` может вернуться без вызова notifyзадача 06_threads
80corethreadsЧем опасен один `condition_variable` на два разных предиката вместе с `notify_one`можно разбудить не тот поток, а нужный останется ждатьзадача 06_threads
81deepthreadsНа каком примитиве ОС реализован `condition_variable` на Linuxfutexзадача 06_threads
82basethreadsКакой командой запускается проверка задачи 06`python3 grade.py 06`задача 06_threads
83corethreadsПочему TSan может не показать гонку при одном прогоне, даже если она есть в кодеон ловит гонку по факту конкретной раскладки потоков в этом запуске, а не статическим анализомзадача 06_threads
84baselinuxНа каком адресе и с каким флагом сокета должен слушать сервер127.0.0.1, `SO_REUSEADDR`задача 07_epoll
85baselinuxСколько одновременных соединений сервер должен держать минимум64задача 07_epoll
86corelinuxПо какому событию сервер закрывает соединение с клиентомпо EOF со стороны клиентазадача 07_epoll
87baselinuxЧто означает `EAGAIN` на неблокирующем сокетене ошибка, сигнал «данных пока нет, попробуй позже»задача 07_epoll
88corelinuxВ чём разница между LT и ET режимами epollLT сообщает о готовности, пока данные остаются в буфере; ET — один раз, при переходе «не готов → готов»задача 07_epoll
89corelinuxПочему ET требует неблокирующих дескрипторовцикл чтения до EAGAIN на блокирующем сокете завис бы на последнем вызове, когда данных больше нетзадача 07_epoll
90deeplinuxКакая асимптотика у `epoll_wait` относительно select/pollO(1) на готовое событие против O(n) на весь набор у select/pollзадача 07_epoll
91baselinuxКаким кодом возврата должен завершаться сервер по SIGTERM/SIGINT0задача 07_epoll
92corelinuxЧто возвращает `epoll_wait`, если его прервал сигнал-1 с `errno == EINTR`, не ошибка выполнениязадача 07_epoll
93baselinuxСколько соединений открывает тест `grade.py 07`3задача 07_epoll
94baselinuxКаким сигналом тест проверяет корректное завершение сервераSIGTERMзадача 07_epoll
95baselinuxСколько строк TOP выводится, если уникальных IP меньше трёхстолько, сколько есть уникальных IPзадача 08_bash
96baselinuxЧто печатает скрипт для пустого файла`TOTAL 0`, `5XX 0`, без строк TOPзадача 08_bash
97corelinuxПо какому полю строки лога определяется IPпо первому полюзадача 08_bash
98corelinuxПочему `while read line` в bash медленный на миллионе строккаждая итерация — это работа интерпретатора bash, а вызов внешних утилит из цикла — ещё и `fork+exec` на строкузадача 08_bash
99corelinuxЧто даёт связка awk + sort вместо построчного циклаодин проход по файлу целиком специализированным бинарником вместо миллиона запусков процессовзадача 08_bash
100deeplinuxПо какому полю сортируется список IP при равенстве числа запросовпо возрастанию строки IP (вторичный ключ сортировки)задача 08_bash
101baselinuxЧто делает `set -e`останавливает скрипт при первой команде с ненулевым кодом возвратазадача 08_bash
102corelinuxВ каких позициях `set -e` не останавливает скрипт при ошибке командыв условиях `if`/`while`/`until`, слева/справа от `&&`/`||`, после `!`задача 08_bash
103corelinuxПочему `local var=$(cmd)` не ловится `set -e`, если `cmd` упалитоговый код возврата строки — это код возврата `local`, а он 0 даже при упавшей подстановке внутризадача 08_bash
104corelinuxЗачем `set -o pipefail` отдельно от `set -e`без него код возврата конвейера — это код возврата только последней команды, падение команды посередине конвейера остаётся незамеченнымзадача 08_bash
105baselinuxКаким кодом возврата должен завершаться `solution.sh` при успехе0задача 08_bash
106corelinuxЧто именно сверяет `grade.py 08` с эталономточное совпадение вывода (все четыре строки) на фикстуре и на большом логезадача 08_bash
107baselinuxЧто печатает `./crash` без аргументов после починки`len=5`, код возврата 0задача 09_gdb
108corelinuxКакие два санитайзера должны не давать сообщений после починкиASan и UBSan (`-fsanitize=address,undefined`)задача 09_gdb
109baselinuxЧто даёт флаг `-g` при сборке для gdbотладочную информацию (DWARF): соответствие адресов строкам, именам и типам переменныхзадача 09_gdb
110corelinuxПочему для отладки собирают с `-O0`, а не с `-O2`оптимизатор переставляет/удаляет инструкции и переиспользует регистры, из-за чего строки и значения в отладчике перестают однозначно соответствовать исходникузадача 09_gdb
111corelinuxЧто ловит ASan из перечисленного: выход за границы, use-after-free, двойное освобождениевсе три, в момент обращения к памяти, а не постфактумзадача 09_gdb
112deeplinuxЧто именно ловит UBSan, в отличие от ASanнеопределённое поведение по стандарту C (знаковое переполнение, сдвиг за пределы разрядности), а не ошибки работы с памятьюзадача 09_gdb
113baselinuxКакая команда gdb показывает цепочку вызовов до краша`bt`задача 09_gdb
114corelinuxЧем `watch var` отличается от обычного `break`останавливает выполнение при каждом изменении значения переменной, а не в заданной точке кодазадача 09_gdb
115corelinuxЗачем нужен `frame N` после `bt`переключает контекст `print`/`info locals` на конкретный кадр стека, чтобы смотреть переменные не только текущей функциизадача 09_gdb
116baselinuxСколько входов прогоняет `grade.py 09`5задача 09_gdb
117baselinuxКаким компилятором собирается `crash.c` на проверкеgcc (компилятор C)задача 09_gdb
118basealgoСколько времени закладывается на задачу 101,5–2,5 часа со ступенямизадача 10_hash
119basealgoКакой командой проверяется решение`python3 grade.py 10`задача 10_hash
120deepalgoГде в реальных устройствах используется похожая структуратаблицы MAC-адресов (FDB) коммутатора, кэши сессий — открытая адресация с жёсткими ограничениями по памятизадача 10_hash
121basealgoПочему `hash & (cap-1)` эквивалентно `hash % cap`только если `cap` — степень двойки: `cap-1` в двоичном виде — маска из всех младших бит, AND с ней даёт тот же результат, что остаток от делениязадача 10_hash
122basealgoПример: `cap=8` (маска `0b111`), `hash=19` (`0b10011`). Индекс`19 & 7 = 3`задача 10_hash
123corealgoСреднее число проб при удачном поиске, load factor 0.7≈2,2 (формула Кнута `0.5·(1+1/(1-0.7))`)задача 10_hash
124corealgoТо же при load factor 0.9≈5,5 — рост почти в 2,5 раза от значения при 0.7задача 10_hash
125deepalgoСреднее число проб при НЕудачном поиске, load factor 0.9≈50,5 (`0.5·(1+1/(1-0.9)²)`) — на порядок хуже удачного поисказадача 10_hash
126corealgoПочему `EMPTY` вместо `TOMBSTONE` после удаления ломает поиск чужих ключейпоиск идёт по цепочке проб до первой `EMPTY`; если такая ячейка появляется раньше искомого ключа, элементы за ней в этой цепочке становятся ненаходимыми, хотя физически на местезадача 10_hash
127basealgoСколько ключей вставляет тест на кластеризацию и какие они512 ключей, кратных 16задача 10_hash
128basealgoЗа какое время должны пройти 100 000 вставокбыстрее 2 секундзадача 10_hash
129basealgoКакой порог load factor держит таблица≤ 0.7задача 10_hash
130basealgoМинимальная ёмкость таблицы по умолчанию16, степень двойкизадача 10_hash
131basealgoИндексы детей и родителя в max-heap на массиведети `2i+1`, `2i+2`; родитель `(i-1)/2`задача 11_heap
132basealgoЧто за 2 секунды должны выполниться на 3 000 000 элементов`heapify` и `kth_largest` с `k=1000` (по отдельности)задача 11_heap
133basealgoКакой ключевой запрет на реализацию `heapify`нельзя строить через `push` в цикле, только bottom-up за O(n)задача 11_heap
134basealgoСложность доступа к максимуму (`top`)O(1), максимум всегда в корне по инварианту кучизадача 11_heap
135basealgoСложность одного `sift-up`/`sift-down` от произвольного узлаO(log n) — путь ограничен высотой деревазадача 11_heap
136corealgoЧто сравнивается на каждом шаге `sift-down`узел с обоими детьми; меняется местами с бОльшим из них, если тот больше узлазадача 11_heap
137corealgoЗа какое время строится куча через n последовательных `push`O(n log n): сумма `Σ log₂(i)` по всем вставкам ≈ `n log₂ n`задача 11_heap
138corealgoЗа какое время строится куча через bottom-up heapifyO(n): работа в узле пропорциональна его высоте `h`, а ряд `Σ h/2^h` сходится к константе, а не растёт с `n`задача 11_heap
139deepalgoС какого индекса начинается bottom-up heapify и в какую сторону идётс последнего нелистового узла `n/2 - 1`, к корню (индекс 0)задача 11_heap
140corealgoВо сколько раз push-цикл медленнее bottom-up heapify по числу сравнений при n=3 000 000примерно на порядок (~10 раз): `log₂(3·10⁶) ≈ 21,5` против константы ~2 у bottom-upзадача 11_heap
141basealgoСложность `kth_largest`/`top_k` через полную кучуO(n + k log n): O(n) на heapify плюс k раз pop по O(log n)задача 11_heap
142corealgoКогда используют min-heap размера k вместо полной кучи на весь массивна потоке данных, который не помещается в память: min-heap размера k хранит только k текущих кандидатов, сложность O(n log k), память O(k)задача 11_heap
143corealgoЧем `std::nth_element` отличается от кучи для top-Kв среднем O(n), даёт частичный порядок вокруг k-го элемента, но не отсортированный список и без гарантии худшего случая; куча всегда O(n + k log n) и отдаёт элементы по убыванию через popзадача 11_heap
144basealgoЧто возвращает функция при `src == dst`0задача 12_dijkstra
145basealgoЧто возвращает функция при недостижимости `dst`-1задача 12_dijkstra
146basealgoВ каком типе суммируются веса и почему не `int``long long`; веса суммируются до 10^9, `int` может переполниться на длинном путизадача 12_dijkstra
147basealgoСложность наивной Дейкстры (перебор минимума по массиву)O(V²)задача 12_dijkstra
148basealgoСложность Дейкстры с бинарной кучейO((V+E) log V)задача 12_dijkstra
149corealgoПри V=100 000, E=200 000, почему наивный O(V²) не укладывается в 2 секунды100 000² = 10^10 операций против ≈5·10^6 у варианта с кучей — разница на 3–4 порядказадача 12_dijkstra
150corealgoЧто означает «ленивое удаление» устаревших записей в очередивместо decrease-key при каждом улучшении расстояния в кучу пушится новая пара (dist, v); при извлечении запись с `d != dist[v]` пропускается как устаревшаязадача 12_dijkstra
151deepalgoПочему `std::priority_queue` не используют с decrease-key напрямуюу контейнера-адаптера нет интерфейса для обновления произвольного элемента за O(log n); дешевле каждый раз пушить новую запись и лениво отбрасывать устаревшие при popзадача 12_dijkstra
152corealgoПочему Дейкстра ломается на отрицательных рёбрахалгоритм считает расстояние до извлечённой из очереди вершины окончательным; отрицательное ребро может позже уменьшить это расстояние, но вершина уже не пересматриваетсязадача 12_dijkstra
153basealgoКакой алгоритм нужен при отрицательных весах без отрицательных цикловБеллман-Форд, O(V·E)задача 12_dijkstra
154corealgoКак Беллман-Форд обнаруживает отрицательный циклесли рёбра продолжают релаксироваться на V-м проходе (после V-1 гарантированно достаточных проходов), в графе есть отрицательный циклзадача 12_dijkstra
155basealgoПочему self-loop с w≥0 не требует отдельной обработкидобавление неотрицательного веса к текущему расстоянию никогда не уменьшает его, значит такое ребро никогда не выигрывает релаксациюзадача 12_dijkstra
156basenetСколько узлов даёт /24254задача 13_subnet
157basenetСколько узлов даёт /2662задача 13_subnet
158basenetСколько узлов даёт /302задача 13_subnet
159basenetСеть, broadcast и диапазон узлов для `10.0.1.130/26`сеть `10.0.1.128`, broadcast `10.0.1.191`, узлы `129..190`задача 13_subnet
160basenetФормула маски для префикса p (0<p≤32)`0xFFFFFFFF << (32-p)`; для p=0 маска = 0 отдельным случаем (сдвиг на 32 — UB)задача 13_subnet
161basenetКак получить network и broadcast из ip и mask`network = ip & mask`, `broadcast = network | ~mask`задача 13_subnet
162corenetФормула host_count для prefix ≤ 30`2^(32-prefix) - 2`задача 13_subnet
163corenetПочему /31исключение и даёт 2 узла вместо 0 по общей формуле? — RFC 3021: у канала точка-точка ровно 2 узла, broadcast не нужен, поэтому оба адреса 2-адресного блока отдаются под хосты вместо потери половины блоказадача 13_subnet
164corenetЧто возвращает subnet_of для /32network=broadcast=first_host=last_host=ip, host_count=1 (host route/loopback)задача 13_subnet
165corenetФормула `prefix_for_hosts(h)``32 - ceil(log2(h+2))`, из условия `2^(32-prefix) >= h+2`задача 13_subnet
166deepnetПочему `prefix_for_hosts(63) = 25`, а не 26, хотя 62 меньше 63 всего на 1/26 даёт только 62 узла, этого не хватает даже на 1 хост меньше требуемых 63; нужно расширить хостовую часть на 1 бит — /25 с 126 узламизадача 13_subnet