[{"data":1,"prerenderedAt":1213},["ShallowReactive",2],{"$f05qabpEW7xK7L27CLdiOtjVrUOBZMoJ2yUgsjEugYoo":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":77,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":80,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":405,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":408,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":652,"mdc-9zzej9-key":672,"mdc-81mwio-key":684,"mdc--2qz3i4-key":692,"mdc-ikuuv8-key":700,"mdc-iqvo7v-key":708,"mdc-xwpvxo-key":716,"mdc-g8unr9-key":724,"mdc-unpkbl-key":769,"mdc--jsly6m-key":812,"mdc--ppd0mw-key":820,"mdc--20ng2q-key":922,"mdc--t7upl3-key":974,"mdc--cdnx99-key":982,"mdc--qpoffn-key":1191},{"content":4,"quizQuestionContent":47,"type":66,"pageMeta":67},[5,9,13,16,20,24,27,31,34,37,41,44],{"id":6,"value":7,"isTypeH1":8},"1954","Алгоритмическая сложность: понятие и примеры",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4549","Теория: что такое алгоритмическая сложность","theory-what-is-algorithmic-complexity",{"id":14,"value":15,"isTypeParagraph":8},"10452","Алгоритмическая сложность описывает зависимость затрат алгоритма от размера входных данных n.  \nЧаще всего рассматриваются две величины: временная сложность (сколько операций требуется) и сложность по памяти (сколько дополнительной памяти требуется).  \nФраза «оценка ресурсов в зависимости от размера входных данных» — ключ к правильному определению.\n\nТри главных элемента определения:\n- Оценка (а не точное измерение времени).\n- Ресурсы (обычно время и/или память).\n- Зависимость от n (размера входа).",{"id":17,"description":18,"titleAlert":19,"isTypeAlertWarning":8},"759","Оценка сложности помогает сравнивать масштабируемость решений, но не заменяет измерения производительности: реальная скорость зависит от реализации, движка, данных и окружения.",null,{"id":21,"value":22,"anchor":23,"isTypeH2":8},"4550","Нотации O, Ω, Θ (асимптотика)","asymptotic-notations-big-o-omega-theta",{"id":25,"value":26,"isTypeParagraph":8},"10453","Для описания роста затрат используются асимптотические обозначения.  \nО-большое (Big O) — наиболее распространённая запись верхней оценки роста затрат по времени или памяти при увеличении n.  \nВ асимптотическом анализе обычно игнорируются константы и менее значимые слагаемые, чтобы сравнивать именно порядок роста.\n\nМини-словарь:\n- `O(g(n))`: верхняя оценка; часто интерпретируется как «не растёт быстрее, чем g(n)» при больших n.\n- `Ω(g(n))`: нижняя оценка; показывает, что быстрее определённого уровня опуститься нельзя.\n- `Θ(g(n))`: «точная» по порядку оценка; и сверху, и снизу один и тот же порядок роста.\n\nПример идеи, почему константы отбрасываются:\n- Если алгоритм делает `3n + 10` операций, то по порядку роста это `O(n)`, потому что при больших n линейная часть определяет поведение.\n\n```\n// Условная иллюстрация: сравнение выражений по росту (не измерение времени)\nfunction opsA(n) { return 3 * n + 10 }  // O(n)\nfunction opsB(n) { return n * n }       // O(n^2)\n\nfor (const n of [10, 100, 1000]) {\n  console.log(n, opsA(n), opsB(n))\n}\n```",{"id":28,"value":29,"anchor":30,"isTypeH2":8},"4551","Примеры на JavaScript (время и память)","javascript-examples-time-and-space",{"id":32,"value":33,"isTypeParagraph":8},"10454","В примерах ниже размер входа — `n = arr.length`.  \nВажно различать время (сколько шагов делает алгоритм) и память (сколько дополнительной памяти создаётся поверх входных данных).\n\n```\nfunction exampleO1(arr) {\n  // Время: O(1) — одна операция чтения по индексу\n  // Память: O(1) — дополнительная память почти не используется\n  return arr[0]\n}\n\nfunction exampleOn(arr) {\n  // Время: O(n) — один проход по массиву\n  // Память: O(1) — хранится только sum\n  let sum = 0\n  for (let i = 0; i \u003C arr.length; i++) {\n    sum += arr[i]\n  }\n  return sum\n}\n\nfunction exampleOn2(arr) {\n  // Время: O(n^2) — вложенные циклы\n  // Память: O(1)\n  let count = 0\n  for (let i = 0; i \u003C arr.length; i++) {\n    for (let j = 0; j \u003C arr.length; j++) {\n      if (arr[i] === arr[j]) count++\n    }\n  }\n  return count\n}\n```\n\nЛогарифмический пример обычно связан с бинарным поиском по отсортированному массиву: на каждом шаге остаётся примерно половина диапазона, поэтому шагов требуется порядка `log n`.\n\n```\nfunction binarySearch(sortedArr, target) {\n  let left = 0\n  let right = sortedArr.length - 1\n\n  while (left \u003C= right) {\n    const mid = Math.floor((left + right) / 2)\n    const value = sortedArr[mid]\n\n    if (value === target) return mid\n    if (value \u003C target) left = mid + 1\n    else right = mid - 1\n  }\n\n  return -1\n}\n```",{"id":35,"description":36,"titleAlert":19,"isTypeAlertWarning":8},"760","В JavaScript оценка сложности методов массивов и коллекций в реальности может зависеть от реализации движка и текущего состояния структуры данных; теоретическая оценка помогает мыслить о росте затрат, но не гарантирует фиксированное время на любой платформе.",{"id":38,"value":39,"anchor":40,"isTypeH2":8},"4552","Таблица типичных классов сложности","table-of-common-complexity-classes",{"id":42,"value":43,"isTypeParagraph":8},"10455","Главная цель таблицы — быстро сопоставлять «как будет расти цена» при увеличении n.\n\n| Обозначение | Как растёт при увеличении n | Пример идеи |\n|---|---|---|\n| `O(1)` | Почти не меняется | Доступ по индексу, фиксированное число действий |\n| `O(log n)` | Растёт очень медленно | Деление диапазона пополам (бинарный поиск) |\n| `O(n)` | Пропорционально n | Один проход по данным |\n| `O(n log n)` | Между `n` и `n^2` | Эффективные сортировки сравнениями |\n| `O(n^2)` | Быстро ухудшается | Два вложенных прохода по данным |\n| `O(2^n)`, `O(n!)` | Становится непрактичным очень быстро | Полный перебор вариантов |\n\nСхема роста (условно, без чисел):\n```\nn увеличивается →\nO(1)       -------------------------\nO(log n)   ----+----+----+----+----\nO(n)       /////////////////////////\nO(n log n) ///////////////////////////////\nO(n^2)     //////////////////////////////////////////////\nO(2^n)     ////////////////////////////////////////////////////////////////\n```",{"id":45,"value":46,"isTypeParagraph":8},"10456","Итого: правильный ответ — 4, потому что алгоритмическая сложность описывает, как растут затраты времени и/или памяти при увеличении размера входных данных, обычно через асимптотические обозначения вроде `O(n)` или `O(n^2)`.",{"id":48,"options":49,"hint":63,"solution":64,"description":65},"1183",[50,54,57,60],{"id":51,"label":52,"isCorrect":53},"4876","Алгоритмическая сложность — это точное время выполнения программы в миллисекундах на конкретном процессоре.",false,{"id":55,"label":56,"isCorrect":53},"4877","Алгоритмическая сложность определяет только объем оперативной памяти, занимаемый переменными в коде.",{"id":58,"label":59,"isCorrect":53},"4878","Алгоритмическая сложность — это свойство кода, означающее его трудность для понимания другими разработчиками.",{"id":61,"label":62,"isCorrect":8},"4879","Алгоритмическая сложность — это оценка количества ресурсов (времени и памяти), необходимых алгоритму для выполнения в зависимости от размера входных данных.","Правильное определение обязательно содержит слова про «оценку ресурсов» и «зависимость от размера входных данных n», а не про миллисекунды, читаемость или только память.","**Правильный ответ: 4** - он корректно отражает суть понятия, охватывая оба типа ресурсов (время и память) и зависимость от объема данных.\n\nВ учебном и инженерном смысле «сложность» — это не измерение в миллисекундах, а модель того, как растут затраты при увеличении размера входа.\n\nПочему неверны варианты 1–3:\n- Вариант 1 неверен: «точное время в миллисекундах» зависит от процессора, настроек, нагрузки, версии среды выполнения, оптимизаций и множества деталей, а сложность стремится описать рост затрат при увеличении n.\n- Вариант 2 неверен: сложность может оценивать не только память, но и время (а иногда и другие ресурсы).\n- Вариант 3 неверен: «трудность понимания» относится к читаемости и поддерживаемости кода, но не является алгоритмической сложностью.","Выберите правильное определение алгоритмической сложности:","quizQuestion",{"title":68,"description":69,"ogTitle":68,"ogDescription":69,"ogImageUrl":70,"canonical":19,"ogLocale":71,"ogSiteName":72,"ogImageType":73,"ogImageWidth":74,"ogImageHeight":75,"ogType":76,"ogUrl":19},"Что такое алгоритмическая сложность?","Объяснение алгоритмической сложности, нотация \"О\" большое, примеры временной и пространственной сложности алгоритмов.","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":78,"siteUrl":79},"GOOD WEB JOB!","https://goodwebjob.ru",{"slugs":81},[82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307,310,313,316,319,322,325,328,331,334,337,340,343,346,349,352,355,358,361,364,366,369,372,375,378,381,384,387,390,393,396,399,402],{"name":83,"value":84},"Теоретические задания","theoretical-tasks",{"name":86,"value":87},"Что вернёт этот код: typeof (function(){})()","what-this-code-will-return-typeof-function",{"name":89,"value":90},"С чего начать?","where-to-begin",{"name":92,"value":93},"Почему опасно писать прямо в прототипы базовых типов?","why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":95,"value":96},"Backend","backend",{"name":98,"value":99},"Frontend","frontend",{"name":101,"value":102},"Какие логические значения в console.log будут получены?","prototype-what-logical-values-will-be-received-in-console-log",{"name":104,"value":105},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":107,"value":108}," Найти в массиве неповторяющиеся числа","find-non-repeating-numbers-in-an-array",{"name":110,"value":111},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":113,"value":114},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":116,"value":117},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":119,"value":120},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":122,"value":123},"Какое значение выведет консоль с object.property?","what-value-will-the-console-output-with-object-property",{"name":125,"value":126},"Что выведется в console.log([arr[0](), arr[0]()])?","what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":128,"value":129},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":131,"value":132},"Необходимо проверить, являются ли две строки анаграммами друг друга","checks-whether-two-strings-are-anagrams-of-each-other",{"name":134,"value":135},"Определить, является ли слово палиндромом","determines-whether-a-word-is-a-palindrome",{"name":137,"value":138},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":140,"value":141},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":143,"value":144},"Дано дерево (вложенный объект), надо найти сумму всех вершин","given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":146,"value":147},"Для каждой ветви дерева записать номер вложенности данной ветви","for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":149,"value":150},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":152,"value":153},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":155,"value":156},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":158,"value":159},"Напишите функцию, который сделает из массива объект","write-a-function-that-will-make-an-object-out-of-an-array",{"name":161,"value":162},"Что выведет console.log в результате выполнения цикла while?","what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":164,"value":165},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":167,"value":168},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":170,"value":171},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":173,"value":174},"Уникализация значений в массиве","unifying-values-in-an-array",{"name":176,"value":177},"«Расплющивание» массива","flattening-the-array",{"name":179,"value":180},"Что вернёт метод book.getUpperName()?","what-will-the-book-get-upper-name-method-return",{"name":182,"value":183},"Сжатие строк","string-compression",{"name":185,"value":186},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":188,"value":189},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":191,"value":192},"Как браузер после ввода домена понимает, откуда брать сайт?","how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":194,"value":195},"Как домен попадает в DNS в таблицу соответствия: домен – ip","how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":197,"value":198},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":200,"value":201},"Ключевые отличия TCP и UDP","key-differences-between-tcp-and-udp",{"name":203,"value":204},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":206,"value":207},"Что такое HTTP и из чего состоит?","what-is-http-and-what-does-it-consist-of",{"name":209,"value":210},"Что такое заголовки в HTTP и зачем они нужны?","what-are-http-headers-and-why-do-we-need-them",{"name":212,"value":213},"Что такое параметры в HTTP?","what-are-http-parameters",{"name":215,"value":216},"Где находится HTML-код в структуре HTTP-ответа?","where-is-the-html-code-located-in-the-http-response-structure",{"name":218,"value":219},"Что такое HTML?","what-is-html",{"name":221,"value":222},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":224,"value":225},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":227,"value":228},"Что такое cookie?","what-is-a-cookie",{"name":230,"value":231},"Кто является инициатором записи cookie в браузере?","who-initiates-the-cookie-recording-in-the-browser",{"name":233,"value":234},"Есть ли возможность с клиента (с браузера) управлять cookie?","is-it-possible-to-manage-cookies-from-the-client-browser",{"name":236,"value":237},"Лайвкодинг","livecoding",{"name":239,"value":240},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":242,"value":243},"Всё, что идет по HTTPS – оно защищено?","is-everything-that-goes-through-https-secure",{"name":245,"value":246},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":248,"value":249},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":251,"value":252},"Как браузер парсит JavaScript и изображения при рендеринге?","how-the-browser-parses-javascript-and-images-when-rendering",{"name":254,"value":255},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":257,"value":258},"Что в браузере блокирует рендеринг страницы?","what-is-blocking-the-page-rendering-in-the-browser",{"name":260,"value":261},"Что такое DOM в браузере? Что такое CSSOM?","what-is-dom-in-a-browser-what-is-cssom",{"name":263,"value":264},"Что является узлами в DOM?","what-are-nodes-in-the-dom",{"name":266,"value":267},"Из чего состоит CSSOM?","what-does-cssom-consist-of",{"name":269,"value":270},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":272,"value":273},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":275,"value":276},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":278,"value":279},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":281,"value":282},"Есть HTML код. Будет ли font-weight на span влиять?","there-is-an-html-code-will-font-weight-affect-span",{"name":284,"value":285},"Flexbox и Grid, чем отличаются друг от друга?","what-are-the-differences-between-flexbox-and-grid",{"name":287,"value":288},"Заменяют ли Flexbox и Grid друг друга?","do-flexbox-and-grid-replace-each-other",{"name":290,"value":291},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":293,"value":294},"Сборник задач","tasks",{"name":296,"value":297},"Какие способы объявления функции есть в JavaScript?","what-are-the-ways-to-declare-a-function-in-javascript",{"name":299,"value":300},"Что такое this в JavaScript?","what-is-this-in-javascript",{"name":302,"value":303},"Что такое Event Loop, как работает?","what-is-an-event-loop-and-how-does-it-work",{"name":305,"value":306},"Что будет, если вызвать typeof на необъявленной переменной?","what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":308,"value":309},"Что показывает оператор typeof в JavaScript?","what-does-the-typeof-operator-show-in-javascript",{"name":311,"value":312},"Какие типы данных существует в JavaScript?","what-types-of-data-exist-in-javascript",{"name":314,"value":315},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":317,"value":318},"Что вернет typeof для массива?","what-will-typeof-return-for-an-array",{"name":320,"value":321},"Почему оператор typeof, применённый к массиву, возвращает объект?","why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":323,"value":324},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":326,"value":327},"Что возвращает typeof для new Set в JavaScript?","what-does-typeof-return-for-new-set-in-javascript",{"name":329,"value":330},"Для чего нужен React, какие он решает проблемы?","what-is-react-used-for-and-what-problems-does-it-solve",{"name":332,"value":333},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":335,"value":336},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":338,"value":339},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":341,"value":342},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":344,"value":345},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":347,"value":348},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":350,"value":351},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":353,"value":354},"Какие существуют стратегии ветвления для работы команды? Что это такое?","what-are-the-branching-strategies-for-the-team-what-is-it",{"name":356,"value":357},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":359,"value":360},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":362,"value":363},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":68,"value":365},"what-is-algorithmic-complexity",{"name":367,"value":368},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","what-is-the-algorithmic-complexity-of-quick-sort",{"name":370,"value":371},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":373,"value":374},"Каким способом может выполняться авторизация пользователя на сайте?","how-can-a-user-be-authorized-on-a-website",{"name":376,"value":377},"В чем разница между микро- и макро-тасками в JavaScript?","what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":379,"value":380},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":382,"value":383},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":385,"value":386},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":388,"value":389},"Подготовка к тех.интервью","technical-interview",{"name":391,"value":392},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":394,"value":395},"Что такое DNS, как DNS находит нужный IP-адрес?","what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":397,"value":398},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","variables-are-declared-as-follows-specify-the-correct-statement",{"name":400,"value":401},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":403,"value":404},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",[406],{"label":388,"slug":389,"to":407},"/technical-interview/where-to-begin",{"navigationList":409,"navigationSublist":415},[410,412],{"path":407,"isActive":53,"name":89,"icon":411,"isNavbarMobileDisabled":8},"material-symbols:visibility-outline-rounded",{"path":413,"isActive":8,"name":293,"icon":414,"isNavbarMobileDisabled":53},"/technical-interview/tasks","material-symbols:task-outline",[416,423,442,451,456,551,568,575,580,623,638,643],{"title":417,"list":418,"isOpened":53},"Bash",[419,421],{"name":359,"path":420,"isActive":53},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":362,"path":422,"isActive":53},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":424,"list":425,"isOpened":53},"CSS",[426,428,430,432,434,436,438,440],{"name":269,"path":427,"isActive":53},"/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":272,"path":429,"isActive":53},"/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":275,"path":431,"isActive":53},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":278,"path":433,"isActive":53},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":281,"path":435,"isActive":53},"/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":284,"path":437,"isActive":53},"/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":287,"path":439,"isActive":53},"/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":290,"path":441,"isActive":53},"/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":443,"list":444,"isOpened":53},"Git",[445,447,449],{"name":347,"path":446,"isActive":53},"/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":350,"path":448,"isActive":53},"/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":353,"path":450,"isActive":53},"/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":452,"list":453,"isOpened":53},"HTML",[454],{"name":218,"path":455,"isActive":53},"/technical-interview/tasks/what-is-html",{"title":457,"list":458,"isOpened":53},"JavaScript",[459,461,463,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549],{"name":101,"path":460,"isActive":53},"/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":92,"path":462,"isActive":53},"/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":239,"path":464,"isActive":53},"/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":122,"path":466,"isActive":53},"/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":125,"path":468,"isActive":53},"/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":161,"path":470,"isActive":53},"/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":164,"path":472,"isActive":53},"/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":179,"path":474,"isActive":53},"/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":397,"path":476,"isActive":53},"/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":185,"path":478,"isActive":53},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":167,"path":480,"isActive":53},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":170,"path":482,"isActive":53},"/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":86,"path":484,"isActive":53},"/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":188,"path":486,"isActive":53},"/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":296,"path":488,"isActive":53},"/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":299,"path":490,"isActive":53},"/technical-interview/tasks/what-is-this-in-javascript",{"name":302,"path":492,"isActive":53},"/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":305,"path":494,"isActive":53},"/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":308,"path":496,"isActive":53},"/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":311,"path":498,"isActive":53},"/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":314,"path":500,"isActive":53},"/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":317,"path":502,"isActive":53},"/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":320,"path":504,"isActive":53},"/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":323,"path":506,"isActive":53},"/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":326,"path":508,"isActive":53},"/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":370,"path":510,"isActive":53},"/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":376,"path":512,"isActive":53},"/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":110,"path":514,"isActive":53},"/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":128,"path":516,"isActive":53},"/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":113,"path":518,"isActive":53},"/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":143,"path":520,"isActive":53},"/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":119,"path":522,"isActive":53},"/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":146,"path":524,"isActive":53},"/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":137,"path":526,"isActive":53},"/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":149,"path":528,"isActive":53},"/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":155,"path":530,"isActive":53},"/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":107,"path":532,"isActive":53},"/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":158,"path":534,"isActive":53},"/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":131,"path":536,"isActive":53},"/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":104,"path":538,"isActive":53},"/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":134,"path":540,"isActive":53},"/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":176,"path":542,"isActive":53},"/technical-interview/tasks/flattening-the-array",{"name":140,"path":544,"isActive":53},"/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":182,"path":546,"isActive":53},"/technical-interview/tasks/string-compression",{"name":173,"path":548,"isActive":53},"/technical-interview/tasks/unifying-values-in-an-array",{"name":152,"path":550,"isActive":53},"/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":552,"list":553,"isOpened":53},"React",[554,556,558,560,562,564,566],{"name":329,"path":555,"isActive":53},"/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":400,"path":557,"isActive":53},"/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":332,"path":559,"isActive":53},"/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":335,"path":561,"isActive":53},"/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":338,"path":563,"isActive":53},"/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":341,"path":565,"isActive":53},"/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":403,"path":567,"isActive":53},"/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":569,"list":570,"isOpened":53},"Алгоритмы",[571,573],{"name":68,"path":572,"isActive":53},"/technical-interview/tasks/what-is-algorithmic-complexity",{"name":367,"path":574,"isActive":53},"/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":576,"list":577,"isOpened":53},"Дебаггинг",[578],{"name":344,"path":579,"isActive":53},"/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":581,"list":582,"isOpened":53},"Компьютерные сети",[583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621],{"name":191,"path":584,"isActive":53},"/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":394,"path":586,"isActive":53},"/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":194,"path":588,"isActive":53},"/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":197,"path":590,"isActive":53},"/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":200,"path":592,"isActive":53},"/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":203,"path":594,"isActive":53},"/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":206,"path":596,"isActive":53},"/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":209,"path":598,"isActive":53},"/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":212,"path":600,"isActive":53},"/technical-interview/tasks/what-are-http-parameters",{"name":215,"path":602,"isActive":53},"/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":221,"path":604,"isActive":53},"/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":224,"path":606,"isActive":53},"/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":227,"path":608,"isActive":53},"/technical-interview/tasks/what-is-a-cookie",{"name":230,"path":610,"isActive":53},"/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":233,"path":612,"isActive":53},"/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":391,"path":614,"isActive":53},"/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":242,"path":616,"isActive":53},"/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":245,"path":618,"isActive":53},"/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":248,"path":620,"isActive":53},"/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":373,"path":622,"isActive":53},"/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":624,"list":625,"isOpened":53},"Отрисовка в браузере",[626,628,630,632,634,636],{"name":254,"path":627,"isActive":53},"/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":251,"path":629,"isActive":53},"/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":257,"path":631,"isActive":53},"/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":260,"path":633,"isActive":53},"/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":263,"path":635,"isActive":53},"/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":266,"path":637,"isActive":53},"/technical-interview/tasks/what-does-cssom-consist-of",{"title":639,"list":640,"isOpened":53},"Ревью кода",[641],{"name":356,"path":642,"isActive":53},"/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":644,"list":645,"isOpened":53},"Теория вероятности",[646,648,650],{"name":379,"path":647,"isActive":53},"/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":382,"path":649,"isActive":53},"/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":385,"path":651,"isActive":53},"/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"cooperation":653,"copyright":656,"reportError":657,"socialNetwork":659},{"link":654,"title":655},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":658,"link":654},"Сообщить об ошибке",{"label":660,"socialNetworkList":661},"Мы в соцсетях:",[662,665,668],{"icon":19,"link":663,"title":664},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":666,"link":654,"title":667},"ic:baseline-telegram","Telegram",{"icon":669,"link":670,"title":671},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":673,"body":674},{},{"type":675,"children":676},"root",[677],{"type":678,"tag":679,"props":680,"children":681},"element","p",{},[682],{"type":683,"value":65},"text",{"data":685,"body":686},{},{"type":675,"children":687},[688],{"type":678,"tag":679,"props":689,"children":690},{},[691],{"type":683,"value":52},{"data":693,"body":694},{},{"type":675,"children":695},[696],{"type":678,"tag":679,"props":697,"children":698},{},[699],{"type":683,"value":56},{"data":701,"body":702},{},{"type":675,"children":703},[704],{"type":678,"tag":679,"props":705,"children":706},{},[707],{"type":683,"value":59},{"data":709,"body":710},{},{"type":675,"children":711},[712],{"type":678,"tag":679,"props":713,"children":714},{},[715],{"type":683,"value":63},{"data":717,"body":718},{},{"type":675,"children":719},[720],{"type":678,"tag":679,"props":721,"children":722},{},[723],{"type":683,"value":62},{"data":725,"body":726},{},{"type":675,"children":727},[728,739,744,749],{"type":678,"tag":679,"props":729,"children":730},{},[731,737],{"type":678,"tag":732,"props":733,"children":734},"strong",{},[735],{"type":683,"value":736},"Правильный ответ: 4",{"type":683,"value":738}," - он корректно отражает суть понятия, охватывая оба типа ресурсов (время и память) и зависимость от объема данных.",{"type":678,"tag":679,"props":740,"children":741},{},[742],{"type":683,"value":743},"В учебном и инженерном смысле «сложность» — это не измерение в миллисекундах, а модель того, как растут затраты при увеличении размера входа.",{"type":678,"tag":679,"props":745,"children":746},{},[747],{"type":683,"value":748},"Почему неверны варианты 1–3:",{"type":678,"tag":750,"props":751,"children":752},"ul",{},[753,759,764],{"type":678,"tag":754,"props":755,"children":756},"li",{},[757],{"type":683,"value":758},"Вариант 1 неверен: «точное время в миллисекундах» зависит от процессора, настроек, нагрузки, версии среды выполнения, оптимизаций и множества деталей, а сложность стремится описать рост затрат при увеличении n.",{"type":678,"tag":754,"props":760,"children":761},{},[762],{"type":683,"value":763},"Вариант 2 неверен: сложность может оценивать не только память, но и время (а иногда и другие ресурсы).",{"type":678,"tag":754,"props":765,"children":766},{},[767],{"type":683,"value":768},"Вариант 3 неверен: «трудность понимания» относится к читаемости и поддерживаемости кода, но не является алгоритмической сложностью.",{"data":770,"body":771},{},{"type":675,"children":772},[773,789,794],{"type":678,"tag":679,"props":774,"children":775},{},[776,778,782,784,787],{"type":683,"value":777},"Алгоритмическая сложность описывает зависимость затрат алгоритма от размера входных данных n.",{"type":678,"tag":779,"props":780,"children":781},"br",{},[],{"type":683,"value":783},"\nЧаще всего рассматриваются две величины: временная сложность (сколько операций требуется) и сложность по памяти (сколько дополнительной памяти требуется).",{"type":678,"tag":779,"props":785,"children":786},{},[],{"type":683,"value":788},"\nФраза «оценка ресурсов в зависимости от размера входных данных» — ключ к правильному определению.",{"type":678,"tag":679,"props":790,"children":791},{},[792],{"type":683,"value":793},"Три главных элемента определения:",{"type":678,"tag":750,"props":795,"children":796},{},[797,802,807],{"type":678,"tag":754,"props":798,"children":799},{},[800],{"type":683,"value":801},"Оценка (а не точное измерение времени).",{"type":678,"tag":754,"props":803,"children":804},{},[805],{"type":683,"value":806},"Ресурсы (обычно время и/или память).",{"type":678,"tag":754,"props":808,"children":809},{},[810],{"type":683,"value":811},"Зависимость от n (размера входа).",{"data":813,"body":814},{},{"type":675,"children":815},[816],{"type":678,"tag":679,"props":817,"children":818},{},[819],{"type":683,"value":18},{"data":821,"body":822},{},{"type":675,"children":823},[824,839,844,881,886,910],{"type":678,"tag":679,"props":825,"children":826},{},[827,829,832,834,837],{"type":683,"value":828},"Для описания роста затрат используются асимптотические обозначения.",{"type":678,"tag":779,"props":830,"children":831},{},[],{"type":683,"value":833},"\nО-большое (Big O) — наиболее распространённая запись верхней оценки роста затрат по времени или памяти при увеличении n.",{"type":678,"tag":779,"props":835,"children":836},{},[],{"type":683,"value":838},"\nВ асимптотическом анализе обычно игнорируются константы и менее значимые слагаемые, чтобы сравнивать именно порядок роста.",{"type":678,"tag":679,"props":840,"children":841},{},[842],{"type":683,"value":843},"Мини-словарь:",{"type":678,"tag":750,"props":845,"children":846},{},[847,859,870],{"type":678,"tag":754,"props":848,"children":849},{},[850,857],{"type":678,"tag":851,"props":852,"children":854},"code",{"className":853},[],[855],{"type":683,"value":856},"O(g(n))",{"type":683,"value":858},": верхняя оценка; часто интерпретируется как «не растёт быстрее, чем g(n)» при больших n.",{"type":678,"tag":754,"props":860,"children":861},{},[862,868],{"type":678,"tag":851,"props":863,"children":865},{"className":864},[],[866],{"type":683,"value":867},"Ω(g(n))",{"type":683,"value":869},": нижняя оценка; показывает, что быстрее определённого уровня опуститься нельзя.",{"type":678,"tag":754,"props":871,"children":872},{},[873,879],{"type":678,"tag":851,"props":874,"children":876},{"className":875},[],[877],{"type":683,"value":878},"Θ(g(n))",{"type":683,"value":880},": «точная» по порядку оценка; и сверху, и снизу один и тот же порядок роста.",{"type":678,"tag":679,"props":882,"children":883},{},[884],{"type":683,"value":885},"Пример идеи, почему константы отбрасываются:",{"type":678,"tag":750,"props":887,"children":888},{},[889],{"type":678,"tag":754,"props":890,"children":891},{},[892,894,900,902,908],{"type":683,"value":893},"Если алгоритм делает ",{"type":678,"tag":851,"props":895,"children":897},{"className":896},[],[898],{"type":683,"value":899},"3n + 10",{"type":683,"value":901}," операций, то по порядку роста это ",{"type":678,"tag":851,"props":903,"children":905},{"className":904},[],[906],{"type":683,"value":907},"O(n)",{"type":683,"value":909},", потому что при больших n линейная часть определяет поведение.",{"type":678,"tag":911,"props":912,"children":916},"pre",{"className":913,"code":915,"language":683},[914],"language-text","// Условная иллюстрация: сравнение выражений по росту (не измерение времени)\nfunction opsA(n) { return 3 * n + 10 }  // O(n)\nfunction opsB(n) { return n * n }       // O(n^2)\n\nfor (const n of [10, 100, 1000]) {\n  console.log(n, opsA(n), opsB(n))\n}\n",[917],{"type":678,"tag":851,"props":918,"children":920},{"__ignoreMap":919},"",[921],{"type":683,"value":915},{"data":923,"body":924},{},{"type":675,"children":925},[926,944,953,965],{"type":678,"tag":679,"props":927,"children":928},{},[929,931,937,939,942],{"type":683,"value":930},"В примерах ниже размер входа — ",{"type":678,"tag":851,"props":932,"children":934},{"className":933},[],[935],{"type":683,"value":936},"n = arr.length",{"type":683,"value":938},".",{"type":678,"tag":779,"props":940,"children":941},{},[],{"type":683,"value":943},"\nВажно различать время (сколько шагов делает алгоритм) и память (сколько дополнительной памяти создаётся поверх входных данных).",{"type":678,"tag":911,"props":945,"children":948},{"className":946,"code":947,"language":683},[914],"function exampleO1(arr) {\n  // Время: O(1) — одна операция чтения по индексу\n  // Память: O(1) — дополнительная память почти не используется\n  return arr[0]\n}\n\nfunction exampleOn(arr) {\n  // Время: O(n) — один проход по массиву\n  // Память: O(1) — хранится только sum\n  let sum = 0\n  for (let i = 0; i \u003C arr.length; i++) {\n    sum += arr[i]\n  }\n  return sum\n}\n\nfunction exampleOn2(arr) {\n  // Время: O(n^2) — вложенные циклы\n  // Память: O(1)\n  let count = 0\n  for (let i = 0; i \u003C arr.length; i++) {\n    for (let j = 0; j \u003C arr.length; j++) {\n      if (arr[i] === arr[j]) count++\n    }\n  }\n  return count\n}\n",[949],{"type":678,"tag":851,"props":950,"children":951},{"__ignoreMap":919},[952],{"type":683,"value":947},{"type":678,"tag":679,"props":954,"children":955},{},[956,958,964],{"type":683,"value":957},"Логарифмический пример обычно связан с бинарным поиском по отсортированному массиву: на каждом шаге остаётся примерно половина диапазона, поэтому шагов требуется порядка ",{"type":678,"tag":851,"props":959,"children":961},{"className":960},[],[962],{"type":683,"value":963},"log n",{"type":683,"value":938},{"type":678,"tag":911,"props":966,"children":969},{"className":967,"code":968,"language":683},[914],"function binarySearch(sortedArr, target) {\n  let left = 0\n  let right = sortedArr.length - 1\n\n  while (left \u003C= right) {\n    const mid = Math.floor((left + right) / 2)\n    const value = sortedArr[mid]\n\n    if (value === target) return mid\n    if (value \u003C target) left = mid + 1\n    else right = mid - 1\n  }\n\n  return -1\n}\n",[970],{"type":678,"tag":851,"props":971,"children":972},{"__ignoreMap":919},[973],{"type":683,"value":968},{"data":975,"body":976},{},{"type":675,"children":977},[978],{"type":678,"tag":679,"props":979,"children":980},{},[981],{"type":683,"value":36},{"data":983,"body":984},{},{"type":675,"children":985},[986,991,1177,1182],{"type":678,"tag":679,"props":987,"children":988},{},[989],{"type":683,"value":990},"Главная цель таблицы — быстро сопоставлять «как будет расти цена» при увеличении n.",{"type":678,"tag":992,"props":993,"children":994},"table",{},[995,1019],{"type":678,"tag":996,"props":997,"children":998},"thead",{},[999],{"type":678,"tag":1000,"props":1001,"children":1002},"tr",{},[1003,1009,1014],{"type":678,"tag":1004,"props":1005,"children":1006},"th",{},[1007],{"type":683,"value":1008},"Обозначение",{"type":678,"tag":1004,"props":1010,"children":1011},{},[1012],{"type":683,"value":1013},"Как растёт при увеличении n",{"type":678,"tag":1004,"props":1015,"children":1016},{},[1017],{"type":683,"value":1018},"Пример идеи",{"type":678,"tag":1020,"props":1021,"children":1022},"tbody",{},[1023,1046,1068,1089,1125,1147],{"type":678,"tag":1000,"props":1024,"children":1025},{},[1026,1036,1041],{"type":678,"tag":1027,"props":1028,"children":1029},"td",{},[1030],{"type":678,"tag":851,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":683,"value":1035},"O(1)",{"type":678,"tag":1027,"props":1037,"children":1038},{},[1039],{"type":683,"value":1040},"Почти не меняется",{"type":678,"tag":1027,"props":1042,"children":1043},{},[1044],{"type":683,"value":1045},"Доступ по индексу, фиксированное число действий",{"type":678,"tag":1000,"props":1047,"children":1048},{},[1049,1058,1063],{"type":678,"tag":1027,"props":1050,"children":1051},{},[1052],{"type":678,"tag":851,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":683,"value":1057},"O(log n)",{"type":678,"tag":1027,"props":1059,"children":1060},{},[1061],{"type":683,"value":1062},"Растёт очень медленно",{"type":678,"tag":1027,"props":1064,"children":1065},{},[1066],{"type":683,"value":1067},"Деление диапазона пополам (бинарный поиск)",{"type":678,"tag":1000,"props":1069,"children":1070},{},[1071,1079,1084],{"type":678,"tag":1027,"props":1072,"children":1073},{},[1074],{"type":678,"tag":851,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":683,"value":907},{"type":678,"tag":1027,"props":1080,"children":1081},{},[1082],{"type":683,"value":1083},"Пропорционально n",{"type":678,"tag":1027,"props":1085,"children":1086},{},[1087],{"type":683,"value":1088},"Один проход по данным",{"type":678,"tag":1000,"props":1090,"children":1091},{},[1092,1101,1120],{"type":678,"tag":1027,"props":1093,"children":1094},{},[1095],{"type":678,"tag":851,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":683,"value":1100},"O(n log n)",{"type":678,"tag":1027,"props":1102,"children":1103},{},[1104,1106,1112,1114],{"type":683,"value":1105},"Между ",{"type":678,"tag":851,"props":1107,"children":1109},{"className":1108},[],[1110],{"type":683,"value":1111},"n",{"type":683,"value":1113}," и ",{"type":678,"tag":851,"props":1115,"children":1117},{"className":1116},[],[1118],{"type":683,"value":1119},"n^2",{"type":678,"tag":1027,"props":1121,"children":1122},{},[1123],{"type":683,"value":1124},"Эффективные сортировки сравнениями",{"type":678,"tag":1000,"props":1126,"children":1127},{},[1128,1137,1142],{"type":678,"tag":1027,"props":1129,"children":1130},{},[1131],{"type":678,"tag":851,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":683,"value":1136},"O(n^2)",{"type":678,"tag":1027,"props":1138,"children":1139},{},[1140],{"type":683,"value":1141},"Быстро ухудшается",{"type":678,"tag":1027,"props":1143,"children":1144},{},[1145],{"type":683,"value":1146},"Два вложенных прохода по данным",{"type":678,"tag":1000,"props":1148,"children":1149},{},[1150,1167,1172],{"type":678,"tag":1027,"props":1151,"children":1152},{},[1153,1159,1161],{"type":678,"tag":851,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":683,"value":1158},"O(2^n)",{"type":683,"value":1160},", ",{"type":678,"tag":851,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":683,"value":1166},"O(n!)",{"type":678,"tag":1027,"props":1168,"children":1169},{},[1170],{"type":683,"value":1171},"Становится непрактичным очень быстро",{"type":678,"tag":1027,"props":1173,"children":1174},{},[1175],{"type":683,"value":1176},"Полный перебор вариантов",{"type":678,"tag":679,"props":1178,"children":1179},{},[1180],{"type":683,"value":1181},"Схема роста (условно, без чисел):",{"type":678,"tag":911,"props":1183,"children":1186},{"className":1184,"code":1185,"language":683},[914],"n увеличивается →\nO(1)       -------------------------\nO(log n)   ----+----+----+----+----\nO(n)       /////////////////////////\nO(n log n) ///////////////////////////////\nO(n^2)     //////////////////////////////////////////////\nO(2^n)     ////////////////////////////////////////////////////////////////\n",[1187],{"type":678,"tag":851,"props":1188,"children":1189},{"__ignoreMap":919},[1190],{"type":683,"value":1185},{"data":1192,"body":1193},{},{"type":675,"children":1194},[1195],{"type":678,"tag":679,"props":1196,"children":1197},{},[1198,1200,1205,1207,1212],{"type":683,"value":1199},"Итого: правильный ответ — 4, потому что алгоритмическая сложность описывает, как растут затраты времени и/или памяти при увеличении размера входных данных, обычно через асимптотические обозначения вроде ",{"type":678,"tag":851,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":683,"value":907},{"type":683,"value":1206}," или ",{"type":678,"tag":851,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":683,"value":1136},{"type":683,"value":938},1775735655417]