From 4975111f1917249b43b3cd93844d4fd8814b5313 Mon Sep 17 00:00:00 2001 From: Evgenia Shevliakova Date: Fri, 10 Nov 2023 12:53:25 +0300 Subject: [PATCH 01/15] feat: add structure-data-in-js --- tools/structure-data-in-js/index.md | 114 ++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 tools/structure-data-in-js/index.md diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md new file mode 100644 index 0000000000..b52a0a6963 --- /dev/null +++ b/tools/structure-data-in-js/index.md @@ -0,0 +1,114 @@ +--- +title: "Структура данных в JS" +description: "В этой доке ты узнаешь основные структуры данных в JavaScript и зачем они нужны." +authors: + - eshevlyakova +related: + - js/array-every + - js/arrays + - js/for +tags: + - article +--- + +## Что такое и зачем + +_Структуры данных_ – это способы организации и хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. +Представим, что у нас есть список из 1000 имен, и нужно найти определенное имя в этом списке. Если искать это имя последовательно, то нам придется проверить каждое имя в списке, чтобы найти нужное. Это может занять много времени, особенно если список очень большой. +Однако, если использовать структуру данных, такую как хеш-таблица или дерево поиска, то можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. + +## Массивы + +[`Массивы`](/js/arrays/) - это одна из самых распространенных структур данных в программировании. Они используются для хранения коллекции элементов, таких как числа, строки или объекты. + +Представь, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: +```js +let pizza = ["кусочек 1", "кусочек 2", "кусочек 3", "кусочек 4", "кусочек 5"]; +``` + +Теперь мы можем поделить пиццу еще на несколько кусочков: +```js +pizza.splice(2, 0, "кусочек 2.5"); +console.log(pizza); +// ["кусочек 1", "кусочек 2", "кусочек 2.5", "кусочек 3", "кусочек 4", "кусочек 5"] +``` + +## Стэк + +_Стек_ - это структура данных, которая работает по принципу “последним пришел - первым вышел”. К примеру вы моете посуду и ставите ее друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмете, когда начнете разбирать стопку. Это и есть принцип работы стека. + +Стеки используются в программировании для хранения данных в порядке их добавления. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы добавляем его в вершину стека. Когда пользователь хочет отменить действие, мы удаляем последнее действие из вершины стека: +```js +let stack = []; + +stack.push("действие 1"); +stack.push("действие 2"); +stack.push("действие 3"); + +console.log(stack); // ["действие 1", "действие 2", "действие 3"] + +let lastAction = stack.pop(); + +console.log(lastAction); // "действие 3" +console.log(stack); // ["действие 1", "действие 2"] +``` +В этом примере мы создали пустой стек и добавили в него три действия. Затем мы удалили последнее действие из вершины стека с помощью метода pop(). + +## Очереди + +_Очередь_ - это структура данных, которая работает по принципу “первым пришел - первым обслужен”. Ее можно сравнить с очередью, в обычном понимании этого слова. Есть очередь из людей, которые ждут в очереди на кассу в магазине. Первый человек, который пришел, будет первым, кто будет обслужен. + +Очереди используются в программировании для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: +```js +let queue = []; + +queue.push("задача 1"); +queue.push("задача 2"); +queue.push("задача 3"); + +console.log(queue); // ["задача 1", "задача 2", "задача 3"] + +let firstTask = queue.shift(); + +console.log(firstTask); // "задача 1" +console.log(queue); // ["задача 2", "задача 3"] +``` +В этом примере мы создали пустую очередь и добавили в нее три задачи. Затем взяли первую задачу из начала очереди с помощью метода shift(). + +## Связанные списки + +_Связанный список_ - это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон - это узел в списке. Каждый вагон содержит груз (данные) и соединение с следующим вагоном (ссылку). Первый вагон - это начало списка, а последний вагон, который не имеет соединения с другим вагоном, - это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. + +Связанные списки используются в программировании для хранения данных в порядке их добавления. Например, если вы хотите сохранить список задач, которые нужно выполнить в вашем приложении, то вы можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу в списке: +```js +class Node { + constructor(data) { + this.data = data; + this.next = null; + } +} + +let head = new Node("Задача 1"); +let secondNode = new Node("Подзадача 1.1"); +let thirdNode = new Node("Подзадача 1.1.2"); + +head.next = secondNode; +secondNode.next = thirdNode; + +console.log(head); +// Node { +// data: "Задача 1", +// next: Node { +// data: "Подзадача 1.1", +// next: Node { +// data: "Подзадача 1.1.2", +// next: null +// } +// } +// } +``` +В этом примере мы создали три узла списка и связали их друг с другом с помощью ссылок. Первый узел списка называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. + +## Деревья + +## Графы From e2bd97f6dd7ac03c316a61ebc98a40d1cb2b2b99 Mon Sep 17 00:00:00 2001 From: Evgenia Shevliakova Date: Tue, 14 Nov 2023 15:19:54 +0300 Subject: [PATCH 02/15] feat: add sections about trees and graphs --- tools/structure-data-in-js/index.md | 57 ++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index b52a0a6963..8462d06d89 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -14,19 +14,19 @@ tags: ## Что такое и зачем _Структуры данных_ – это способы организации и хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. -Представим, что у нас есть список из 1000 имен, и нужно найти определенное имя в этом списке. Если искать это имя последовательно, то нам придется проверить каждое имя в списке, чтобы найти нужное. Это может занять много времени, особенно если список очень большой. +Представим, что у нас есть список из 1000 имён, и нужно найти определённое имя в этом списке. Если искать это имя последовательно, то нам придётся проверить каждое имя в списке, чтобы найти нужное. Это может занять много времени, особенно если список очень большой. Однако, если использовать структуру данных, такую как хеш-таблица или дерево поиска, то можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. ## Массивы -[`Массивы`](/js/arrays/) - это одна из самых распространенных структур данных в программировании. Они используются для хранения коллекции элементов, таких как числа, строки или объекты. +[`Массивы`](/js/arrays/) - это одна из самых распространённых структур данных в программировании. Они используются для хранения коллекции элементов, таких как числа, строки или объекты. Представь, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: ```js let pizza = ["кусочек 1", "кусочек 2", "кусочек 3", "кусочек 4", "кусочек 5"]; ``` -Теперь мы можем поделить пиццу еще на несколько кусочков: +Теперь мы можем поделить пиццу ещё на несколько кусочков: ```js pizza.splice(2, 0, "кусочек 2.5"); console.log(pizza); @@ -35,7 +35,7 @@ console.log(pizza); ## Стэк -_Стек_ - это структура данных, которая работает по принципу “последним пришел - первым вышел”. К примеру вы моете посуду и ставите ее друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмете, когда начнете разбирать стопку. Это и есть принцип работы стека. +_Стек_ - это структура данных, которая работает по принципу “последним пришёл - первым вышел”. К примеру вы моете посуду и ставите её друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмёте, когда начнёте разбирать стопку. Это и есть принцип работы стека. Стеки используются в программировании для хранения данных в порядке их добавления. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы добавляем его в вершину стека. Когда пользователь хочет отменить действие, мы удаляем последнее действие из вершины стека: ```js @@ -56,7 +56,7 @@ console.log(stack); // ["действие 1", "действие 2"] ## Очереди -_Очередь_ - это структура данных, которая работает по принципу “первым пришел - первым обслужен”. Ее можно сравнить с очередью, в обычном понимании этого слова. Есть очередь из людей, которые ждут в очереди на кассу в магазине. Первый человек, который пришел, будет первым, кто будет обслужен. +_Очередь_ - это структура данных, которая работает по принципу “первым пришёл - первым обслужен”. Её можно сравнить с очередью, в обычном понимании этого слова. Есть очередь из людей, которые ждут в очереди на кассу в магазине. Первый человек, который пришёл, будет первым, кто будет обслужен. Очереди используются в программировании для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: ```js @@ -73,7 +73,7 @@ let firstTask = queue.shift(); console.log(firstTask); // "задача 1" console.log(queue); // ["задача 2", "задача 3"] ``` -В этом примере мы создали пустую очередь и добавили в нее три задачи. Затем взяли первую задачу из начала очереди с помощью метода shift(). +В этом примере мы создали пустую очередь и добавили в неё три задачи. Затем взяли первую задачу из начала очереди с помощью метода shift(). ## Связанные списки @@ -111,4 +111,49 @@ console.log(head); ## Деревья +_Деревья_ - это структура данных, которая представляет собой иерархическую структуру в виде набора связанных узлов. Каждый узел дерева содержит значение и список ссылок на его дочерние узлы. Вершина дерева называется корнем. + +Давай создадим дерево с родителем, у которого есть два ребёнка. У каждого из этих детей есть свои дети (внуки): + +```javascript +class TreeNode { + constructor(value) { + this.value = value; + this.children = []; + } +} + +const parent = new TreeNode('Родитель'); +const child1 = new TreeNode('Ребёнок 1'); +const child2 = new TreeNode('Ребёнок 2'); + +parent.children.push(child1); +parent.children.push(child2); + +const grandChild1 = new TreeNode('Внук 1'); +const grandChild2 = new TreeNode('Внук 2'); + +child1.children.push(grandChild1); +child2.children.push(grandChild2); +``` + +Деревья в программировании помогают нам организовывать данные иерархически, обрабатывать информацию, искать пути и многое другое. Бинарные деревья поиска - это пример деревьев, которые помогают нам быстро находить данные. + +_Бинарное дерево_ - это структура данных, в которой каждый узел имеет не более двух детей, обычно обозначаемых как “левый ребёнок” и “правый ребёнок”. Особый вид бинарного дерева - это бинарное дерево поиска. В бинарном дереве поиска для каждого узла его значение больше или равно значению любого узла в его левом поддереве и меньше или равно значению любого узла в его правом поддереве. Это свойство делает бинарные деревья поиска эффективными для операций поиска и вставки. + +Бинарные деревья широко используются в программировании. Они помогают нам быстро находить, вставлять и удалять значения, что делает их полезными во многих приложениях, включая базы данных и игры. + ## Графы + +_Графы_ - это структура данных, которая представляет собой узлы, связанные рёбрами. Давайте представим, что у нас есть несколько городов, расположенных рядом друг с другом, и между ними проложены дороги. В этом контексте, узлы - это города, а ребра - это дороги, соединяющие эти города: + +```javascript +const roadMap = new Graph(); +roadMap.addVertex('Москва'); +roadMap.addVertex('Санкт-Петербург'); +roadMap.addVertex('Нижний Новгород'); +roadMap.addEdge('Москва', 'Санкт-Петербург'); +roadMap.addEdge('Москва', 'Нижний Новгород'); +``` + +Графы широко используются в программировании для моделирования отношений между объектами, поиска путей, оптимизации маршрутов и многого другого. Если вы когда-нибудь слышали о графах, используемых в Facebook или Google Maps, то это яркие примеры применения графов в реальной жизни. Эти структуры данных помогают нам лучше понять и организовать сложные отношения и взаимосвязи. From e5d02fd2ece77cef9ee046805bfda1907e205ff4 Mon Sep 17 00:00:00 2001 From: Tatiana Fokina Date: Mon, 20 Nov 2023 15:39:37 +0400 Subject: [PATCH 03/15] =?UTF-8?q?=D0=9D=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/structure-data-in-js/index.md | 33 ++++++++++++++++++----------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index 8462d06d89..2bad2a8d35 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -13,20 +13,23 @@ tags: ## Что такое и зачем -_Структуры данных_ – это способы организации и хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. +_Структуры данных_ — это способы организации и хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. Представим, что у нас есть список из 1000 имён, и нужно найти определённое имя в этом списке. Если искать это имя последовательно, то нам придётся проверить каждое имя в списке, чтобы найти нужное. Это может занять много времени, особенно если список очень большой. + Однако, если использовать структуру данных, такую как хеш-таблица или дерево поиска, то можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. ## Массивы -[`Массивы`](/js/arrays/) - это одна из самых распространённых структур данных в программировании. Они используются для хранения коллекции элементов, таких как числа, строки или объекты. +[Массивы](/js/arrays/) — это одна из самых распространённых структур данных в программировании. Они используются для хранения коллекции элементов, таких как числа, строки или объекты. Представь, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: + ```js let pizza = ["кусочек 1", "кусочек 2", "кусочек 3", "кусочек 4", "кусочек 5"]; ``` Теперь мы можем поделить пиццу ещё на несколько кусочков: + ```js pizza.splice(2, 0, "кусочек 2.5"); console.log(pizza); @@ -35,9 +38,10 @@ console.log(pizza); ## Стэк -_Стек_ - это структура данных, которая работает по принципу “последним пришёл - первым вышел”. К примеру вы моете посуду и ставите её друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмёте, когда начнёте разбирать стопку. Это и есть принцип работы стека. +_Стек_ — это структура данных, которая работает по принципу «последним пришёл — первым вышел». К примеру вы моете посуду и ставите её друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмёте, когда начнёте разбирать стопку. Это и есть принцип работы стека. Стеки используются в программировании для хранения данных в порядке их добавления. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы добавляем его в вершину стека. Когда пользователь хочет отменить действие, мы удаляем последнее действие из вершины стека: + ```js let stack = []; @@ -52,13 +56,15 @@ let lastAction = stack.pop(); console.log(lastAction); // "действие 3" console.log(stack); // ["действие 1", "действие 2"] ``` -В этом примере мы создали пустой стек и добавили в него три действия. Затем мы удалили последнее действие из вершины стека с помощью метода pop(). + +В этом примере создали пустой стек и добавили в него три действия. Затем мы удалили последнее действие из вершины стека с помощью метода `pop()`. ## Очереди -_Очередь_ - это структура данных, которая работает по принципу “первым пришёл - первым обслужен”. Её можно сравнить с очередью, в обычном понимании этого слова. Есть очередь из людей, которые ждут в очереди на кассу в магазине. Первый человек, который пришёл, будет первым, кто будет обслужен. +_Очередь_ — это структура данных, которая работает по принципу «первым пришёл — первым обслужен». Её можно сравнить с очередью, в обычном понимании этого слова. Есть очередь из людей, которые ждут в очереди на кассу в магазине. Первый человек, который пришёл, будет первым, кто будет обслужен. Очереди используются в программировании для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: + ```js let queue = []; @@ -73,13 +79,15 @@ let firstTask = queue.shift(); console.log(firstTask); // "задача 1" console.log(queue); // ["задача 2", "задача 3"] ``` -В этом примере мы создали пустую очередь и добавили в неё три задачи. Затем взяли первую задачу из начала очереди с помощью метода shift(). + +В этом примере мы создали пустую очередь и добавили в неё три задачи. Затем взяли первую задачу из начала очереди с помощью метода `shift()`. ## Связанные списки -_Связанный список_ - это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон - это узел в списке. Каждый вагон содержит груз (данные) и соединение с следующим вагоном (ссылку). Первый вагон - это начало списка, а последний вагон, который не имеет соединения с другим вагоном, - это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. +_Связанный список_ — это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон — это узел в списке. Каждый вагон содержит груз (данные) и соединение с следующим вагоном (ссылку). Первый вагон — это начало списка, а последний вагон, который не имеет соединения с другим вагоном, — это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. Связанные списки используются в программировании для хранения данных в порядке их добавления. Например, если вы хотите сохранить список задач, которые нужно выполнить в вашем приложении, то вы можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу в списке: + ```js class Node { constructor(data) { @@ -107,11 +115,12 @@ console.log(head); // } // } ``` + В этом примере мы создали три узла списка и связали их друг с другом с помощью ссылок. Первый узел списка называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. ## Деревья -_Деревья_ - это структура данных, которая представляет собой иерархическую структуру в виде набора связанных узлов. Каждый узел дерева содержит значение и список ссылок на его дочерние узлы. Вершина дерева называется корнем. +_Деревья_ — это структура данных, которая представляет собой иерархическую структуру в виде набора связанных узлов. Каждый узел дерева содержит значение и список ссылок на его дочерние узлы. Вершина дерева называется корнем. Давай создадим дерево с родителем, у которого есть два ребёнка. У каждого из этих детей есть свои дети (внуки): @@ -137,20 +146,20 @@ child1.children.push(grandChild1); child2.children.push(grandChild2); ``` -Деревья в программировании помогают нам организовывать данные иерархически, обрабатывать информацию, искать пути и многое другое. Бинарные деревья поиска - это пример деревьев, которые помогают нам быстро находить данные. +Деревья в программировании помогают нам организовывать данные иерархически, обрабатывать информацию, искать пути и многое другое. Бинарные деревья поиска — это пример деревьев, которые помогают нам быстро находить данные. -_Бинарное дерево_ - это структура данных, в которой каждый узел имеет не более двух детей, обычно обозначаемых как “левый ребёнок” и “правый ребёнок”. Особый вид бинарного дерева - это бинарное дерево поиска. В бинарном дереве поиска для каждого узла его значение больше или равно значению любого узла в его левом поддереве и меньше или равно значению любого узла в его правом поддереве. Это свойство делает бинарные деревья поиска эффективными для операций поиска и вставки. +_Бинарное дерево_ — это структура данных, в которой каждый узел имеет не более двух детей, обычно обозначаемых как «левый ребёнок» и «правый ребёнок». Особый вид бинарного дерева — это бинарное дерево поиска. В бинарном дереве поиска для каждого узла его значение больше или равно значению любого узла в его левом поддереве и меньше или равно значению любого узла в его правом поддереве. Это свойство делает бинарные деревья поиска эффективными для операций поиска и вставки. Бинарные деревья широко используются в программировании. Они помогают нам быстро находить, вставлять и удалять значения, что делает их полезными во многих приложениях, включая базы данных и игры. ## Графы -_Графы_ - это структура данных, которая представляет собой узлы, связанные рёбрами. Давайте представим, что у нас есть несколько городов, расположенных рядом друг с другом, и между ними проложены дороги. В этом контексте, узлы - это города, а ребра - это дороги, соединяющие эти города: +_Графы_ — это структура данных, которая представляет собой узлы, связанные рёбрами. Давайте представим, что у нас есть несколько городов, расположенных рядом друг с другом, и между ними проложены дороги. В этом контексте, узлы — это города, а рёбра — это дороги, соединяющие эти города: ```javascript const roadMap = new Graph(); roadMap.addVertex('Москва'); -roadMap.addVertex('Санкт-Петербург'); +roadMap.addVertex('СанктПетербург'); roadMap.addVertex('Нижний Новгород'); roadMap.addEdge('Москва', 'Санкт-Петербург'); roadMap.addEdge('Москва', 'Нижний Новгород'); From 5c4759edaaf37b48365afaec96281ce355a301ef Mon Sep 17 00:00:00 2001 From: Evgeniya Shevlyakova <79781486+eshevlyakova@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:26:25 +0300 Subject: [PATCH 04/15] Apply suggestions from code review Co-authored-by: Polina Gurtovaia --- tools/structure-data-in-js/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index 2bad2a8d35..0baed697e3 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -1,5 +1,5 @@ --- -title: "Структура данных в JS" +title: "Структуры данных в JavaScript" description: "В этой доке ты узнаешь основные структуры данных в JavaScript и зачем они нужны." authors: - eshevlyakova @@ -14,9 +14,9 @@ tags: ## Что такое и зачем _Структуры данных_ — это способы организации и хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. -Представим, что у нас есть список из 1000 имён, и нужно найти определённое имя в этом списке. Если искать это имя последовательно, то нам придётся проверить каждое имя в списке, чтобы найти нужное. Это может занять много времени, особенно если список очень большой. +Представим, что у нас есть список из 1000 имён, и нужно найти определённое имя в этом списке. Можно просматривать каждую строку списка по порядку. Это может занять много времени, особенно если список очень большой. -Однако, если использовать структуру данных, такую как хеш-таблица или дерево поиска, то можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. +Однако, если хранить имена в другой структуре данных, например в хеш-таблице или дереве поиска, то можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. ## Массивы @@ -40,7 +40,7 @@ console.log(pizza); _Стек_ — это структура данных, которая работает по принципу «последним пришёл — первым вышел». К примеру вы моете посуду и ставите её друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмёте, когда начнёте разбирать стопку. Это и есть принцип работы стека. -Стеки используются в программировании для хранения данных в порядке их добавления. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы добавляем его в вершину стека. Когда пользователь хочет отменить действие, мы удаляем последнее действие из вершины стека: +Стеки используются для извлечения данных в обратном порядке. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы кладем элемент на стек. Когда пользователь хочет отменить действие, мы снимаем элемент со стека: ```js let stack = []; @@ -63,7 +63,7 @@ console.log(stack); // ["действие 1", "действие 2"] _Очередь_ — это структура данных, которая работает по принципу «первым пришёл — первым обслужен». Её можно сравнить с очередью, в обычном понимании этого слова. Есть очередь из людей, которые ждут в очереди на кассу в магазине. Первый человек, который пришёл, будет первым, кто будет обслужен. -Очереди используются в программировании для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: +Очереди используются для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: ```js let queue = []; @@ -165,4 +165,4 @@ roadMap.addEdge('Москва', 'Санкт-Петербург'); roadMap.addEdge('Москва', 'Нижний Новгород'); ``` -Графы широко используются в программировании для моделирования отношений между объектами, поиска путей, оптимизации маршрутов и многого другого. Если вы когда-нибудь слышали о графах, используемых в Facebook или Google Maps, то это яркие примеры применения графов в реальной жизни. Эти структуры данных помогают нам лучше понять и организовать сложные отношения и взаимосвязи. +Графы используются для моделирования отношений между объектами, поиска путей, оптимизации маршрутов и многого другого. Иерархия друзей в Facebook или дороги Google Maps — это графы. From 384debae3298e2aabff23299543f685a355d7cf6 Mon Sep 17 00:00:00 2001 From: Tatiana Fokina Date: Thu, 23 Nov 2023 13:50:14 +0400 Subject: [PATCH 05/15] =?UTF-8?q?=D0=9D=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/structure-data-in-js/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index 0baed697e3..882c5be2e4 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -24,25 +24,25 @@ _Структуры данных_ — это способы организаци Представь, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: -```js +```javascript let pizza = ["кусочек 1", "кусочек 2", "кусочек 3", "кусочек 4", "кусочек 5"]; ``` Теперь мы можем поделить пиццу ещё на несколько кусочков: -```js +```javascript pizza.splice(2, 0, "кусочек 2.5"); console.log(pizza); // ["кусочек 1", "кусочек 2", "кусочек 2.5", "кусочек 3", "кусочек 4", "кусочек 5"] ``` -## Стэк +## Стeк _Стек_ — это структура данных, которая работает по принципу «последним пришёл — первым вышел». К примеру вы моете посуду и ставите её друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмёте, когда начнёте разбирать стопку. Это и есть принцип работы стека. Стеки используются для извлечения данных в обратном порядке. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы кладем элемент на стек. Когда пользователь хочет отменить действие, мы снимаем элемент со стека: -```js +```javascript let stack = []; stack.push("действие 1"); @@ -65,7 +65,7 @@ _Очередь_ — это структура данных, которая ра Очереди используются для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: -```js +```javascript let queue = []; queue.push("задача 1"); @@ -88,7 +88,7 @@ _Связанный список_ — это структура данных, к Связанные списки используются в программировании для хранения данных в порядке их добавления. Например, если вы хотите сохранить список задач, которые нужно выполнить в вашем приложении, то вы можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу в списке: -```js +```javascript class Node { constructor(data) { this.data = data; @@ -165,4 +165,4 @@ roadMap.addEdge('Москва', 'Санкт-Петербург'); roadMap.addEdge('Москва', 'Нижний Новгород'); ``` -Графы используются для моделирования отношений между объектами, поиска путей, оптимизации маршрутов и многого другого. Иерархия друзей в Facebook или дороги Google Maps — это графы. +Графы используются для моделирования отношений между объектами, поиска путей, оптимизации маршрутов и многого другого. Иерархия друзей в Facebook или дороги Google Maps — это графы. From cdf9c3f2d6625aa4d697a1b104774debaeb4ad56 Mon Sep 17 00:00:00 2001 From: Evgenia Shevliakova Date: Wed, 29 Nov 2023 21:59:34 +0300 Subject: [PATCH 06/15] fix: remarks --- tools/structure-data-in-js/index.md | 45 ++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index 882c5be2e4..5e679b9fe4 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -13,7 +13,7 @@ tags: ## Что такое и зачем -_Структуры данных_ — это способы организации и хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. +_Структуры данных_ — это способы хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. Представим, что у нас есть список из 1000 имён, и нужно найти определённое имя в этом списке. Можно просматривать каждую строку списка по порядку. Это может занять много времени, особенно если список очень большой. Однако, если хранить имена в другой структуре данных, например в хеш-таблице или дереве поиска, то можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. @@ -22,7 +22,9 @@ _Структуры данных_ — это способы организаци [Массивы](/js/arrays/) — это одна из самых распространённых структур данных в программировании. Они используются для хранения коллекции элементов, таких как числа, строки или объекты. -Представь, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: +В JavaScript, массивы являются динамическими, что означает, что они могут изменять свой размер во время выполнения программы. Память для массива выделяется динамически, и элементы могут быть расположены не последовательно в памяти. Однако, массивы предоставляют интерфейс для доступа к элементам по их индексу, например, `pizza[0]`. + +Представьте, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: ```javascript let pizza = ["кусочек 1", "кусочек 2", "кусочек 3", "кусочек 4", "кусочек 5"]; @@ -38,9 +40,9 @@ console.log(pizza); ## Стeк -_Стек_ — это структура данных, которая работает по принципу «последним пришёл — первым вышел». К примеру вы моете посуду и ставите её друг на друга. В конце у вас есть стопка тарелок, последняя тарелка, которую вы положили на стопку, будет первой, которую вы возьмёте, когда начнёте разбирать стопку. Это и есть принцип работы стека. +_Стек_ — это структура данных, которая работает по принципу LIFO (Last In, First Out), что означает «последним пришёл — первым вышел». К примеру вы моете посуду и ставите её друг на друга. И если вы захотите вытереть тарелки, то первой вы возьмёте последнюю помытую тарелку - это и есть принцип работы стека. -Стеки используются для извлечения данных в обратном порядке. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы кладем элемент на стек. Когда пользователь хочет отменить действие, мы снимаем элемент со стека: +Стеки используются для извлечения данных в обратном порядке. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы кладём элемент на стек. Когда пользователь хочет отменить действие, мы снимаем элемент со стека: ```javascript let stack = []; @@ -57,11 +59,11 @@ console.log(lastAction); // "действие 3" console.log(stack); // ["действие 1", "действие 2"] ``` -В этом примере создали пустой стек и добавили в него три действия. Затем мы удалили последнее действие из вершины стека с помощью метода `pop()`. +B этом примере создали пустой стек и добавили в него три действия. Затем мы удалили последнее действие из вершины стека с помощью метода `pop()`. ## Очереди -_Очередь_ — это структура данных, которая работает по принципу «первым пришёл — первым обслужен». Её можно сравнить с очередью, в обычном понимании этого слова. Есть очередь из людей, которые ждут в очереди на кассу в магазине. Первый человек, который пришёл, будет первым, кто будет обслужен. +_Очередь_ — это структура данных, которая работает по принципу FIFO (First In, First Out), что означает «первым пришёл — первым обслужен». Её можно сравнить с очередью за вкусными пироженками: первый человек, который пришёл, будет первым, кто получит пироженое. Очереди используются для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: @@ -86,7 +88,12 @@ console.log(queue); // ["задача 2", "задача 3"] _Связанный список_ — это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон — это узел в списке. Каждый вагон содержит груз (данные) и соединение с следующим вагоном (ссылку). Первый вагон — это начало списка, а последний вагон, который не имеет соединения с другим вагоном, — это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. -Связанные списки используются в программировании для хранения данных в порядке их добавления. Например, если вы хотите сохранить список задач, которые нужно выполнить в вашем приложении, то вы можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу в списке: +Существуют два основных типа связанных списков: односвязные и двусвязные списки. + +- _Односвязный список_ — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на `NULL`. Элемент, на который нет указателя, является первым элементом списка. +- _Двусвязный список_ — это структура данных, в которой каждый элемент содержит указатель на следующий элемент и на предыдущий элемент. Это позволяет двигаться по списку в обоих направлениях. + +Связанные списки используются для хранения данных в порядке их добавления. Одним из преимуществ связанных списков является то, что они позволяют быстро добавлять и удалять элементы в любом месте списка. Например, если вы хотите сохранить список задач, которые нужно выполнить в вашем приложении, то вы можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу в списке: ```javascript class Node { @@ -116,13 +123,20 @@ console.log(head); // } ``` -В этом примере мы создали три узла списка и связали их друг с другом с помощью ссылок. Первый узел списка называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. +В этом примере мы создали три узла односвязного списка и связали их друг с другом с помощью ссылок. Первый узел списка называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. Последний узел указывает на `NULL` и называется хвостом списка. ## Деревья -_Деревья_ — это структура данных, которая представляет собой иерархическую структуру в виде набора связанных узлов. Каждый узел дерева содержит значение и список ссылок на его дочерние узлы. Вершина дерева называется корнем. +_Деревья_ — это иерархическая структура, которая состоит из связанных узлов. Каждый узел дерева содержит данные и ссылки на его дочерние узлы. Вершина дерева называется корнем, узлы у которых нет потомков – листьями. + +Ключевые термины, используемые при работе с деревьями: -Давай создадим дерево с родителем, у которого есть два ребёнка. У каждого из этих детей есть свои дети (внуки): +- _Children_ (дети): узлы, у которых текущий узел является родителем. +- _Descendants_ (потомки): узлы, до которых можно добраться через родительские связи. Все ваши дети, внуки, правнуки и так далее будут вашими потомками. +- _Siblings_ (братья и сестры): узлы, имеющие одного и того же родителя. Ваши братья и сестры - это люди, у которых те же родители, что и у вас. +- _Leafs_ (листья): узлы без потомков. К примеру, ваши родственники, у которых нет своих детей. + +Давайте создадим дерево с родителем, у которого есть два ребёнка. У каждого из этих детей есть свои дети (внуки): ```javascript class TreeNode { @@ -146,15 +160,18 @@ child1.children.push(grandChild1); child2.children.push(grandChild2); ``` -Деревья в программировании помогают нам организовывать данные иерархически, обрабатывать информацию, искать пути и многое другое. Бинарные деревья поиска — это пример деревьев, которые помогают нам быстро находить данные. +Деревья помогают организовывать данные иерархически, обрабатывать информацию, искать пути и многое другое. _Бинарное дерево_ — это структура данных, в которой каждый узел имеет не более двух детей, обычно обозначаемых как «левый ребёнок» и «правый ребёнок». Особый вид бинарного дерева — это бинарное дерево поиска. В бинарном дереве поиска для каждого узла его значение больше или равно значению любого узла в его левом поддереве и меньше или равно значению любого узла в его правом поддереве. Это свойство делает бинарные деревья поиска эффективными для операций поиска и вставки. -Бинарные деревья широко используются в программировании. Они помогают нам быстро находить, вставлять и удалять значения, что делает их полезными во многих приложениях, включая базы данных и игры. - ## Графы -_Графы_ — это структура данных, которая представляет собой узлы, связанные рёбрами. Давайте представим, что у нас есть несколько городов, расположенных рядом друг с другом, и между ними проложены дороги. В этом контексте, узлы — это города, а рёбра — это дороги, соединяющие эти города: +_Графы_ — это структура данных, которая представляет собой узлы, связанные рёбрами. Графы бывают двух основных типов: направленные и ненаправленные. + + - _Направленные_ (directed): в направленном графе рёбра имеют направление. Это означает, что если есть ребро от узла `A` к узлу `B`, то это не гарантирует наличие ребра от узла `B` к узлу `A`, то есть `A` к `B` и `B` к `A` это не одно и тоже. +- _Ненаправленные_ (undirected): в ненаправленном графе рёбра не имеют направления. Это означает, что если есть ребро между узлами `A` и `B`, то можно перемещаться в любом направлении. + +Давайте представим, что у нас есть несколько городов, расположенных рядом друг с другом, и между ними проложены дороги. В этом контексте, узлы — это города, а рёбра — дороги, соединяющие эти города: ```javascript const roadMap = new Graph(); From 22e82f1b13f359bba5681df2d37959443d865dad Mon Sep 17 00:00:00 2001 From: Evgenia Shevliakova Date: Fri, 1 Dec 2023 20:22:32 +0300 Subject: [PATCH 07/15] feat: add images --- .../images/binary-search-tree.png | Bin 0 -> 24334 bytes tools/structure-data-in-js/images/graph.png | Bin 0 -> 19137 bytes tools/structure-data-in-js/images/trees.png | Bin 0 -> 32435 bytes .../images/types-of-graphs.png | Bin 0 -> 23943 bytes tools/structure-data-in-js/index.md | 9 ++++++++- 5 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 tools/structure-data-in-js/images/binary-search-tree.png create mode 100644 tools/structure-data-in-js/images/graph.png create mode 100644 tools/structure-data-in-js/images/trees.png create mode 100644 tools/structure-data-in-js/images/types-of-graphs.png diff --git a/tools/structure-data-in-js/images/binary-search-tree.png b/tools/structure-data-in-js/images/binary-search-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..e19a8232b8dedbc9d0cb1a621685c18b4e727389 GIT binary patch literal 24334 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

;zE@o^oW z?M~t{w?{SApn>QGo95-`Pj;x<5gwjg2rkZe#S^haz17AiIf)rEO}#f<_ni0h zwICM%#q-`yLOiGrz<7ylle@9|w=NpQ`QI%B&cAdwr*J)ei9c>0{fBww46ipT%@3wNiis*YU$$`awJ&->T z=rxtZ1#Zd~0{w`J)GWjQYdY$hwuXmrP7J3UbO7-I8AMmo=S)JwOC(!$^@)@=YZT=1 z!w&>gK;zg?g7=D8__msBZ#)&!9yO@Qwq3vVG94|yg-n(&9Qe4pby(p2ZAg zL+DQg4L#>!%kp*0(f)l;1GpTt3{X`VOe|Jh%P|aOrd9SNR zb==ey;(9!%dp>S_g_2YN98)_F|K^jn+a?rPGgx~T~#Pkj4xThiorLN0$1kvlkc z&)mj0qRlq}hknho#^dqzKoJ)$$p#1KQNDx2eE+=7n$PlB(QM}&92`SG#{o_U9Zz)Q zKRud$ak5=G`KzDMM_)PoO^@}Urm+xUuvRGX(@pNt(v~D}%si!{e6cYKxS(wE9qXYa$h5Oe%9p+naI!< zWf?^tgZ8g89Pyx0ONkhxix{~rlO##(^LP_i19|0F#ZQ7W`jXiTtG8$ktu6h0ddjqNv=T)6Unp6dwDYPoHB#8m1N6$kG6C}bpR~Z8 z=g;fDW|$OW8^S3ZfZnMuRYjd~W;tJ5!6JGqs z(v3w;-WUg)QAGqZ0miC8S{$7u+Wy37>6^e7#1YjlM_RG0`l$12wuZUQ>CgX}6xuOVfsEEAzf?Dp$1mV>HhlmsQ=of;PH@Mrp}-!0E^ zA=}znEj{d?Qo}7B0yOS_klGt;o1AMpGcSuMn{se;pf;i&8-5bwapCfEiIR8xM)MiC zrz0tj(%;mY;ilrC6Szb|(9l-xBC7XOb*->C%qBj(;b3T`;*wQ zh2+zx;(vJ#VwkEbRQ;0x`Iqz|3`1Q|$R7&E)_LY60w>T+t|__QY-mSGjg9}vH4T1536s$vUGKYvk2Ux;8{Y@W^O#t z;P+!KTwglGNYyLgf#rzkzsemOb*HR0W>THp=xa0bsY5s=7dr%^fM|y46113j(WbX3 z=o+r`xV@03H}~H_x?P+aUf?e@^_z}dvBfDm+25FzGfZss{AvA`@yG3GX&KRlVZL*p z+nzG{lA;M{RRzApQ@9#ww8bR|K9Lzum7ZT%pbT5;j7cmjFr}^_8i}){`iME`&Xsb**1 z@G8$e68OmaExx9UB#V;N!*Ql(sod`-DZU7}G%(7X>YwKoDe?XAb$aPi#(zB7ygj)xN^;`#zT zm4;Q=HJxzlLm2h)xXI=J8(LL|$f#QU=C zkLZ5edXSCESQT~{dDyp&JRZx@`XHG5+E3TUnU}wA6K%NEPgB>WEL#O|u_9)*3%9Sb zP>a&nwK{AZ_*&7Wi>MNToWssMfwF&_ALNvJw_%pfYDO!-pTC$3k&sq=LArCo5J5Fl zGUNb#*=A8|S+PkF-p5yut4RAp>2_LN-B+Xk*s8UXK&RGFi+DC=;XibPg$WUP`7)>w z$zVVa)kV}aMO{;pcUU^CHfYbasn!ohjB3yf^`-f>%{vb}?iOzRsG<*8Q&^bB#VT9r zQyE$7M_~M|+FPh6-GwBtwfXzc9W1#}9iZBU6c4Ap9$((dh*0uATEsU(H_$d%-N>Vpi{G)5tresJ$JDVA$)@qHId;9uE%AK)#V~_ z83OsyeTdNS=kBqgKplDnBqX?ji5)>hf8i7JTI1?u1XDhT!l?4avT{*0sM3>qQYj;y zkGyud(9bye`s3%gLCMsBc;06lf?qW>US4cxGM}jL0(BpvEHlP*ph<}N5-Zt8?<$$M z&C6?$G^{{8MV3gTI#~s5{yAcRd4vBuNm-=J{Ap8KqYuB-N3*PZASOXM26L)I|Jnwq z7R8xCgvm(nn(Yr55hBWbw8!FfyYq~{%>VbuN$0ycKP^$jA%BDq15jm)#cz8;$H%Fq zPUG}f-QsZTZ&7^zON|WfiQRkjG22u}S51cJc?f5k2yxth`Gg`)a!Pgiy>WPj&4w{2 zKTT5$p^yjOgH|yA=j1IRvR@^|(THrh16;x)%Z7su0jy}WOj%DnO!Ws74P8o@x;4wA zqr5Fw&n((Oq&W9 zcn$4K?48sf8Q(tU`bL)FoaeZY>om@FcTA100`PLC%+gF|@|!mo?;JMtW*!pzr)0Ae zS}-|>?&KQEcpp|wH2JulFi;-9FEC|f0RYsE#bxl~_{vkHuKXjt5LvtAyX^${{arS2 zT|}bihg)CV{c#?W(Icin8FI5>4eo!hXmHK^$7Q99gz%#BH}Y}-RV}UsnaQFm1%oIx z&FU0^DBSjcG~RKWVK+1YbW@e_z*GW=e({0HEfyE@i1FnhcyqAirz+4t(oCnYjtb3) z>vLnEzDS7ffPq;Cqnj0LOwl38`qnVt=q7skdm3Rq04Q3|RGd{{*#KS`;3YH~AU6YvJK{~G? zbQCR(g(tqr$}~H>Fgh9H1NQ(#4l{2x=x%ir{GY$v^M5%3=RRAn)F%0O#rg7Eo~HkO zVvg5LXFf!1*{w{ZaTQwDw;GuyQYOuxB5b#97Clb3IVl60evq^mEJ$Dj zNNh-8FlSUpP`q~eTKO_3X`^rw@SM@)poQ8 z$eGCs(5I~{UMyLN<^r1t1NTUA6Pej4X^2hlAN{tiS_Q5RcKW!q(!V%x06%A80;)Nw zX}~euj6ClgX-l?fryk0&spQzhYb|H!303v{jM*TrcSh7 ztj_D1y6yy^AxbzuQ&0K;LKatPMi?77F=@55AoM8S5r|#bS^)(sPJR(&7|Dy$x(uxS1 zlg8EkiY!$#!q+#}i+cp(V%(2c*&QhP=#b^g>U8x(mH{btb}RYWq5kUA#mz*(qz3@` z(O*%p8&TztO}mjs&&E!+2Zv@07Q+a}lSp(0Bj&9&;{$Z>)J;6?}XK)<~HIkk`AAYmH^`j_8T*2`YKZH)`N{HkXA393v5?U8+f zte{K=?l*aSyA8>9zkzGaLpe}YN;Pa_MTmW9p^?X|PU9M?rym=CODTLo#1q+eyE2#p zD;|X0P$McHE8KD^82xes-mx|6pnrV{>s5Y3D^%*Z)~C2|4aFnUe>MGApyBYRtR7@N zi)WRF*N%^hzVS$hV}{RUtN&U{XBOxm0JN$$j0-mKyKz7X9%(x5<)Q;xEN8>ku<^g3 z+r7l>_HqD~zc@acNqcd!9<%%W&;V62kVb0ivz2$DQeEf{h9jkU_VE`bb;*OKgT;tz zA8f^pM@pqR;bFsCHNk#u7Jgzx{gK-SJXdCsE$d0}_-sMkFxTNMS6O4Cb#l}Sc$ezJ z#Z)2VY%)L#Y~DtVPD`tH^11iT&h$iqaswqxDI8FF$?R3%hY{*TCG*ARKOlT$&8Q05 z{h5VQ^>-c1+y^7q0yu``^xxiV)xoUo+m&-GE?RPe-~Kb8f;2hYVF0lEi( z`%P5}*blwwUn`zdNqbo`$i1&$V$vLTXT)y$bR=j~vUd|B8@}i*`Zw8?4U}hyf(EdB z%Ka4+l8>Ls+stuW)0r_5VVWVe=xK$Q4Nqiuo%M}wP=#qNjxCore35bAW@o*>JXUXV zAzmxd{CA9YSgab5aamhkLyry3z}s_UL_vr>wjxn_QlfKc;k}1P*+9%pMqc&$-ROxT ze&t^QS5tFMDG`Vo2QPp%i)kvB?J-hIx@5s};1})vS$vMMC!3;&Tly6}a+C7;IQ{&P z6Ur`Hg7R%MzpFJU3){atyZ>!5?Mj6M1wy<+UCgz2UHQIlDBL;{X4|-^71yB+;()=Kjjl(#ch9nxbc+O z?JRIBM;M(&vu(!)tcwB`Bcv)j+80??_I0!>f#pOG%!UJUzdR zNiW4(_xHxZqIxE7NZ4t0XN8)}uGbwX5%en}La(57$Vglcay3BV@jUPtjQVgE#uqV3 z`JE1#ySIRXGw{P&IYvhdpRe6+$R!RC%ig3F0TjOA4_|%g7k%Jr&;W3IHSdC8h)hoYYWlrio0zA}JbbID%zYn0d!Y*JpKwAa0 z6oZrl{4VuXvG5O7GU^j3-tj}DCy(Mui29q_Ysm1Ra{)|%5Y{vXjpuc+1a1J6;_zVP zwkE%dEGerMj6Zu1)8d^m;JsY)VQj`#m2SibCyA{P@7Kd%}YcHJpbAZchjYZp=Rd zx+lIg>A6V?vFdn~-i_1dHv0O;)hJlTgHof-V|%WCVgm>sCuMzyDaS>jADaLOhHmlY z&mhOIjV)E*)0aI%B=9*wMMq1C0eb(^^yl2Mm^kZlek6yu?xOZl)BbbCg!QwpW&dA0 zR~`;!8}&n!rRXjD9`!O~%UWWr*(1v^gshe9%c!v>dn)TYLx@7wvSlAb$TmVIvSerM z8I6!6-#vP}-tUk1?f>t(zUz7}mp|@#o^zl3+~+>`Ip_D&hS}90&)a!B?;Q<-imIbJ z{m+rDgs`Af#nuF!nE7z0C93|qrc|54NJ*}A2c?9Ny~|ByK?Nne7ZljO_#x=&hnlwT zUN#s?!fx%apV(QHv=|Vb3r?k!zzWZ(4h&X!&HlB0cdpf_4I?b*Pe1X3+Q;1<$JW@w z%Dca7AK|y^uL$ai%g*T}E)P}=i@R)rB4Ss*@Q84Uhc>LfC(b!SXeR?hdEJPsH9>uL zwxL!FQVdKp1d0`=?}G3v@>6|ISApUANNSmy6p-1gc*7&^5mAkLQr7f|LBrbwU+-2& zptV;SUJ;h2}fPsjVcgxN&*d_3>J z-Ijq9q3?H;3{abRv^uB-E9x`Cv$#yq9XKY;Ay8=vpEAh!HI3 zLxN0%7GTjq1EzxWi7aQchLSCu6*wC1Zj<4gMOXXSaKJUhpTH}ltmr7`zR82oTJkd@ zcl5Cif^Y}Gw0$7kbc@_^5A3V_gFK#(ZMLOgfl_tn@4kj^y3TTnKzPJtC!uV*K#?~UF^=?rJcrO z^k?`0@@44e@F4j+K>y*?AG_1jGzO?9#9tri_XzF@Cg*m6_(0r6IE~2|Lt^`r-*O_{ zccs*9P>2FJ{`z2fNmYHhPY6$sN{G7G;H$d06Iv=8dlbhqJ2 zwOUaf={?QBT{HGjJzK~b+0ow-x|;@4d|{zxl(MM`R82THYiDABE}m4C)d8~jvZ!c# zLH^zMC);&Sf~c7?^3KTwfZfz;WG5$o-A-B#)BS>efs+r)tdl zWWZQWJ&nwk^P8J5`b+B9TodD$8LQHNT&`0wP{+)BFnPWIi`26nI$0t!^`U>QAue~f z^9V6}g%~zz0RuHj>X|d^$#)8x3GHU)>SIwoHlJd{Y(knn9Jo4kJIO66%|({R$s_4s zFMc)Lo2%*BDLL~tC!nAeSt%clwg$a760$gH|JVB1{&`s<)|C0R>N$!{zR}l^{*f*e z_y{Ac*LK%)+F;@r0th~r1 z=DociGa8a&Q7ZBK_GKidhP|5-1zBhQ&|};VJAsrX=8%Ztlh=$6^3;-Q*9IVv{4DX+ zV;$L{L#D6O)7B^f=j7Y2wu*3B!Nmt@i@78K>M*i^&f|iph8(2%-x>kT>j#dUW7`(WkecYxB6Eazl zEEn8ZkK^^&dl-~!q;W^+rQK^4aCh%JJO|KNk3ZHl$;M|Xox@_WXV>x;{Cbx+hAe~_sisddft@cgsl#R3Iq0+Q;FY;R14 z3t7uYQVo_Dxhm9DQ)k}JRGBPJgR?)dAMBV>hIRlqCMTII+LT37vy1@TB7l2GRrQpg zuHu-Mdnr;MrG0Fwiiqx{(@#D%4s~4%MsB;3v(4?Fg)Lp9ot>`>P*{^xo>cgP-wIj0 z13K+A4Taw^5R&Fl9E7Aqdy`Kgo@?9bA1laBH*sQu_luLqNj!2&A3pT!9CgFK@Z#qy z0%eS)ve03=5}h)(#Y(Pl6*avlSvbxbo^v>2GBE4o}`R_r4h$O-yK*Ky>s!- z^?`;e@6!nXl&a|*MozSmPyJgXTc#-6k^4*2D1l`hbR%#3&-kQ`m@l7`DV0Kzfxr~A z<8Dt@=ivkEh|QSc%%#MvxaJUT$3rPJYrCRNxjB=5nyQM3or1*TnXRFwwX{L_md8^Q zvV~~jwuZ8>-h1f)jgB&ad;6|9T~zYl>bHI;BR)N)p4jxQ zNHplPa_4(_P*?MN(J#Jx%iD|w&*}tGnM7yJ<-Fx<5Q)nv5!n4<({ODcug5F)QPC1= zBgnJo7#9$wW8fF1Yr7}}Rwzmtg+1-jR?X@&} z)RdffX~q#KoT6M+)e>vV%5u|B+8BlBe?U#{D}$t;f7B)|pNgUF@!C$$xvD)8p)`wu z2tbY0-<{uTuX0{Et7{<-%&pQ|HO&j%7xiZbfPZ$YZZF$@BYXV=EC8!?oR@+%}ZxGQ1IN zXlmK$HT{QJt2Dq5IRa#>6_cYWw<4{_moS0TE;QJ@SXt>~tuCC^3v!R01JtHQeDEjO z(q04h5fdsGAB`I{HD?d?-o6=f3ER+c+KDSrBQL%0iYXqIEXhz9+RsSceOVM5#Ej5X zwSovVhRa{(n;aV>*Y9vY;$<~R)4Cpr9loX3diYtvi(yGIIGd#;VNulHXIQ<7qK$7a z31p2TX+16A5gAPuPzoVCO=jU^8cUfiE!G!yYc@j0A^a4$*sCBNgfKgX)_ZlrOkw2$ zZX5Im7(Xduec9ger;qMY>2dLSF$JEkA&N0pnyHd)U3|F}#)tS$CoyBq8;q!)mFJl7 zn2UZ(2$y=lb$4@dX=B4yyqc6Fq)%=kOJS<))G+Bbd40U;^3M86kx=#>_)Q)wR@F?B+eEe)nVi; zE+Rk_sm6WSV9Suw_AYjMhVku6byIl#`h`!7Jl3`q6Go={%RHNJfJ^YrCm$EjRVWR1 zGv-gYVFSFSi@jF?6w&DE!u47yOZT=4>kX5(x{dEBz86uAd7Z2?1q#}#Q|IqH9z#QX z^iB8cv##YHD|;YQOX>*zN@4s0MUTT&^rJnp$Luoc*r=YF=oby(Sy%!ihZfc)4j+z7 zK3}4)YPMgbZ4~6{@dR_B&-WEFm_VAoa0hVvhya?Y+(_yQ0FW@kCV%DnC<4k3dikq* z9l`t3hu<7G);$cHO+I>**g}*KYJyOe509dFP*GB&^|0^UU-{bsRF~rMU7m$jx*U%Q zYlhsLe>DofH&6f6jfD+anLQPV6c08UzQukOzF=`G-i7~_$&~G(B&RptZqdfXCE_dP z2zWkomi7)HWbvY?7_1j&8p+*JK=&>fMhgCrk>BDC%~%gsn8J6b?kZw;oG0k(*8=Od z-Cwi+`0<^25_9h~4rT5&PJW8JF~eq3ma%Z+&c{H9CIxK{igrL84Ca@u)wTVSiK;)! z5~Ga$h$hFYW0|WrIQZ4|w!EZY1-fg(@iB1&E1d$eGKIT@XN}OglTP zBT9-NuGf_ve|@>XrIBVSr4F4 ze2yZ5WA$TNqOd`T|m z)}kMJD1W$&nvHd&ELO}TM)y<>5+=WTdtK=T*gKnSD&rGzXa?o{9X{QKTv2{=zbRH* zunfx}Zg(jRJ>{}WkTrw#PU~^ATBk9TJmh2K|312HN08vjpGGXqeL|PLKnGX)Y7>6& z^@axnzJm(NHh~CGXLqK~R&XmuT{Cuh{<1Pn;yqJS7_m~Un7yt`L4u*##|m?S*&I*# zN_ptqlL*8m8r^qVMD%m=ts(;%C)&7IUP{3Z)v?QRLpQvPk78bxy{%g}0ql%A4`?;L zzS?@oT6D7ooH)kIYVjeqxDY4s)-jCuLQDavBZ%WK%RoE#Mn9IOSb&7UWu~#4iv^Wr zGpoxhwDu(C^S!O*0cwCDEdpgwmJ#i2OQYcY^B_4KO=2xq=jD3*1BY}Cw(IJYo+je3 z@C)*yUZ#ic>)d`&3R!tDILQ5YxkuV4&I(_Hubg@%q79(=#=!aTvapCdk48L009d9F zKkt-iQFg&{Ih0=#!};KOh-Z{-za5+NkLK{`LKJl44b+0IFr_dBsG19e@q`m1$jw?q z`e_I^)z$vco<>{TP2|L4Tex$#L!#qJ38rRgF?RdZp%x-Da+c|gT1z;fMs0Ig2f{8~T=1})mo;4n ze5kAQ2v17$ITF3a!Pv6`)S5Q?a4}lcLa&XCJgmRgJF=0Ho@8;Ytr$Lm=d&u{Q`&l2 zC>g(drP1t9i*iH^n^CR5d!%Ar_@@AVJbhF7wM{8%!gMS!70ii-6J?vlNd;KrcdT<2 z5nT79h>#tLVng%NXiRyY0#|17+~dBm8VUr7myLxns#MEprdf&=!qW{O)XqAcZTHBQ z8BvmEADnsKTzPqAhDEH^o0n(fv6sbPU!IEL%)Yo%vESQz+h%CwDNN*kM>o{Y{Rm`$*G08moIsm~n?uZauxvMPEn|PcH zf7Vy5kS*WATs>Q5GhtX|PcpAfhCSS_u1joVd`dK7Sf$p$!x#I3s8gycg3II`une{GkD2sb51vxm#G`IVgKu0 zWOOJ=>>VGE;w}o_l;F<7-GoHW&{9Gym@IsWO`t`Yk^)>?)0%|vO zGv-6=g?OmQKNEXr^E+W`llsS@oO9wRz^3t27YPRmEwz8=->$ASe~YqK`)6YJ)_x~U zJNn_8ZI^&&*VSK3b+7VwR`&lU|DRU&f7Il^?gv<(dA)>V2m(C!hjcF)YL=+mh5ZkG Cgx}5p literal 0 HcmV?d00001 diff --git a/tools/structure-data-in-js/images/graph.png b/tools/structure-data-in-js/images/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b320fdfc22422cdb90baa60f18c8783a2a6bac36 GIT binary patch literal 19137 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 P0sg5fYAKZ7GY|b=BzpR0 literal 0 HcmV?d00001 diff --git a/tools/structure-data-in-js/images/trees.png b/tools/structure-data-in-js/images/trees.png new file mode 100644 index 0000000000000000000000000000000000000000..d7ab87ff0be246092b197470101b2df8f14e6dfb GIT binary patch literal 32435 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 VvD5YOfEoQIbyclLrOK8e{|`w6s#pL3 literal 0 HcmV?d00001 diff --git a/tools/structure-data-in-js/images/types-of-graphs.png b/tools/structure-data-in-js/images/types-of-graphs.png new file mode 100644 index 0000000000000000000000000000000000000000..1c03de643a68521f8225460ca455da13a48649f0 GIT binary patch literal 23943 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 b^YuHOh&;YQOGp8L^;HLKoqns`k4^j+5FRct literal 0 HcmV?d00001 diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index 5e679b9fe4..4d3a47c616 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -10,7 +10,6 @@ related: tags: - article --- - ## Что такое и зачем _Структуры данных_ — это способы хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. @@ -136,6 +135,8 @@ _Деревья_ — это иерархическая структура, ко - _Siblings_ (братья и сестры): узлы, имеющие одного и того же родителя. Ваши братья и сестры - это люди, у которых те же родители, что и у вас. - _Leafs_ (листья): узлы без потомков. К примеру, ваши родственники, у которых нет своих детей. +![Визуализация структуры данных дерева, включая названиями элементов](images/trees.png) + Давайте создадим дерево с родителем, у которого есть два ребёнка. У каждого из этих детей есть свои дети (внуки): ```javascript @@ -164,13 +165,19 @@ child2.children.push(grandChild2); _Бинарное дерево_ — это структура данных, в которой каждый узел имеет не более двух детей, обычно обозначаемых как «левый ребёнок» и «правый ребёнок». Особый вид бинарного дерева — это бинарное дерево поиска. В бинарном дереве поиска для каждого узла его значение больше или равно значению любого узла в его левом поддереве и меньше или равно значению любого узла в его правом поддереве. Это свойство делает бинарные деревья поиска эффективными для операций поиска и вставки. +![Визуализация бинарного дерева](images/binary-search-tree.png) + ## Графы _Графы_ — это структура данных, которая представляет собой узлы, связанные рёбрами. Графы бывают двух основных типов: направленные и ненаправленные. +![Визуализация обычного графа с названиями элементов](images/graph.png) + - _Направленные_ (directed): в направленном графе рёбра имеют направление. Это означает, что если есть ребро от узла `A` к узлу `B`, то это не гарантирует наличие ребра от узла `B` к узлу `A`, то есть `A` к `B` и `B` к `A` это не одно и тоже. - _Ненаправленные_ (undirected): в ненаправленном графе рёбра не имеют направления. Это означает, что если есть ребро между узлами `A` и `B`, то можно перемещаться в любом направлении. +![Визуализация напрваленного и ненаправленного графа](images/types-of-graphs.png) + Давайте представим, что у нас есть несколько городов, расположенных рядом друг с другом, и между ними проложены дороги. В этом контексте, узлы — это города, а рёбра — дороги, соединяющие эти города: ```javascript From b70baaf3008bbc4c837a2f00e25e46c043314252 Mon Sep 17 00:00:00 2001 From: Evgenia Shevliakova Date: Sat, 2 Dec 2023 21:14:55 +0300 Subject: [PATCH 08/15] fix: formatting --- tools/structure-data-in-js/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index 4d3a47c616..fdb9318973 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -173,7 +173,7 @@ _Графы_ — это структура данных, которая пред ![Визуализация обычного графа с названиями элементов](images/graph.png) - - _Направленные_ (directed): в направленном графе рёбра имеют направление. Это означает, что если есть ребро от узла `A` к узлу `B`, то это не гарантирует наличие ребра от узла `B` к узлу `A`, то есть `A` к `B` и `B` к `A` это не одно и тоже. +- _Направленные_ (directed): в направленном графе рёбра имеют направление. Это означает, что если есть ребро от узла `A` к узлу `B`, то это не гарантирует наличие ребра от узла `B` к узлу `A`, то есть `A` к `B` и `B` к `A` это не одно и тоже. - _Ненаправленные_ (undirected): в ненаправленном графе рёбра не имеют направления. Это означает, что если есть ребро между узлами `A` и `B`, то можно перемещаться в любом направлении. ![Визуализация напрваленного и ненаправленного графа](images/types-of-graphs.png) From e3e72082fa4165011676e80f62e8a0ff5ee9187a Mon Sep 17 00:00:00 2001 From: TatianaFokina Date: Tue, 5 Dec 2023 18:38:19 +0400 Subject: [PATCH 09/15] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D1=88=D0=B8?= =?UTF-8?q?=D0=B5=D1=81=D1=8F=20=D1=81=D1=85=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/structure-data-in-js/images/array.png | Bin 0 -> 9149 bytes .../structure-data-in-js/images/linked-list.png | Bin 0 -> 9777 bytes tools/structure-data-in-js/images/queue.png | Bin 0 -> 9306 bytes tools/structure-data-in-js/images/stack.png | Bin 0 -> 12237 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/structure-data-in-js/images/array.png create mode 100644 tools/structure-data-in-js/images/linked-list.png create mode 100644 tools/structure-data-in-js/images/queue.png create mode 100644 tools/structure-data-in-js/images/stack.png diff --git a/tools/structure-data-in-js/images/array.png b/tools/structure-data-in-js/images/array.png new file mode 100644 index 0000000000000000000000000000000000000000..aead5ece690383d695a4ed9d4aa2c3e7b893ab92 GIT binary patch literal 9149 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 Zscb#XlERH&3_os-?z12f?-M*?{saExMAZNQ literal 0 HcmV?d00001 diff --git a/tools/structure-data-in-js/images/linked-list.png b/tools/structure-data-in-js/images/linked-list.png new file mode 100644 index 0000000000000000000000000000000000000000..c90ba1226c8a103f47c56b7e830bf49ba1a17816 GIT binary patch literal 9777 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 Date: Tue, 5 Dec 2023 18:38:31 +0400 Subject: [PATCH 10/15] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA?= =?UTF-8?q?=D0=B8.=20=D0=BD=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=D1=87=D0=B8=D1=82=20=D1=82=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/structure-data-in-js/index.md | 148 +++++++++++++++------------- 1 file changed, 79 insertions(+), 69 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index fdb9318973..7de7c142db 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -13,103 +13,113 @@ tags: ## Что такое и зачем _Структуры данных_ — это способы хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. -Представим, что у нас есть список из 1000 имён, и нужно найти определённое имя в этом списке. Можно просматривать каждую строку списка по порядку. Это может занять много времени, особенно если список очень большой. -Однако, если хранить имена в другой структуре данных, например в хеш-таблице или дереве поиска, то можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. +Представим, что у нас есть список из 1000 имён и нужно найти определённое имя в этом списке. Можно просматривать каждую строку списка по порядку. Это может занять много времени, особенно если список очень большой. + +Однако, если хранить имена в другой структуре данных, например, в хеш-таблице или дереве поиска, можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. ## Массивы [Массивы](/js/arrays/) — это одна из самых распространённых структур данных в программировании. Они используются для хранения коллекции элементов, таких как числа, строки или объекты. -В JavaScript, массивы являются динамическими, что означает, что они могут изменять свой размер во время выполнения программы. Память для массива выделяется динамически, и элементы могут быть расположены не последовательно в памяти. Однако, массивы предоставляют интерфейс для доступа к элементам по их индексу, например, `pizza[0]`. +![Массив из четырёх элементов. Идекс первого элемента — 0, второго — 1, третьего — 2, четвёртого — 3.](images/array.png) + +В JavaScript, массивы являются динамическими. Это значит, что они могут изменять свой размер во время выполнения программы. Память для массива выделяется динамически, и элементы могут быть расположены в памяти не последовательно. Однако массивы предоставляют интерфейс для доступа к элементам по их индексу, например, `pizza[0]`. Представьте, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: ```javascript -let pizza = ["кусочек 1", "кусочек 2", "кусочек 3", "кусочек 4", "кусочек 5"]; +let pizza = ['кусочек 1', 'кусочек 2', 'кусочек 3', 'кусочек 4', 'кусочек 5'] ``` Теперь мы можем поделить пиццу ещё на несколько кусочков: ```javascript -pizza.splice(2, 0, "кусочек 2.5"); -console.log(pizza); -// ["кусочек 1", "кусочек 2", "кусочек 2.5", "кусочек 3", "кусочек 4", "кусочек 5"] +pizza.splice(2, 0, 'кусочек 2.5') +console.log(pizza) +// ["кусочек 1", "кусочек 2", "кусочек 2.5", +// "кусочек 3", "кусочек 4", "кусочек 5"] ``` ## Стeк -_Стек_ — это структура данных, которая работает по принципу LIFO (Last In, First Out), что означает «последним пришёл — первым вышел». К примеру вы моете посуду и ставите её друг на друга. И если вы захотите вытереть тарелки, то первой вы возьмёте последнюю помытую тарелку - это и есть принцип работы стека. +_Стек_ — это структура данных, которая работает по принципу LIFO (Last In, First Out), что означает «последним пришёл — первым вышел». К примеру, вы моете посуду и ставите её друг на друга. Если захотите вытереть тарелки, то первой возьмёте последнюю помытую тарелку. Это и есть принцип работы стека. + +![В стеке находится четыре элемента. В самом низу первый, над ним второй и так далее. Пятый элемент добавляется наверх стека и удаляется из него первым.](images/stack.png) -Стеки используются для извлечения данных в обратном порядке. Например, мы хотим сохранить историю действий пользователя в нашем приложении: когда пользователь выполняет новое действие, мы кладём элемент на стек. Когда пользователь хочет отменить действие, мы снимаем элемент со стека: +Стеки используются для извлечения данных в обратном порядке. Например, хотим сохранить историю действий пользователя в приложении: когда пользователь выполняет новое действие, мы кладём элемент на стек. Когда пользователь хочет отменить действие, мы снимаем элемент со стека: ```javascript -let stack = []; +let stack = [] -stack.push("действие 1"); -stack.push("действие 2"); -stack.push("действие 3"); +stack.push('действие 1') +stack.push('действие 2') +stack.push('действие 3') -console.log(stack); // ["действие 1", "действие 2", "действие 3"] +console.log(stack) // ["действие 1", "действие 2", "действие 3"] -let lastAction = stack.pop(); +let lastAction = stack.pop() -console.log(lastAction); // "действие 3" -console.log(stack); // ["действие 1", "действие 2"] +console.log(lastAction) // "действие 3" +console.log(stack) // ["действие 1", "действие 2"] ``` -B этом примере создали пустой стек и добавили в него три действия. Затем мы удалили последнее действие из вершины стека с помощью метода `pop()`. +B этом примере создали пустой стек и добавили в него три действия. Затем удалили последнее действие из вершины стека с помощью метода `pop()`. ## Очереди _Очередь_ — это структура данных, которая работает по принципу FIFO (First In, First Out), что означает «первым пришёл — первым обслужен». Её можно сравнить с очередью за вкусными пироженками: первый человек, который пришёл, будет первым, кто получит пироженое. -Очереди используются для хранения данных в порядке их добавления. Например, если мы хотим сохранить список дня, то будем использовать очередь для хранения этих задач: +![В очереди четыре элемента. Слева, к конце очереди, четвёртый элемент, справа, в самом начале — первый. Пятый элемент добавляется в конец после четвёртого, а удаляется сначала первый.](images/queue.png) + +Очереди используются для хранения данных в порядке их добавления. Например, если хотим сохранить список дня, то будем использовать очередь для хранения этих задач: ```javascript -let queue = []; +let queue = [] -queue.push("задача 1"); -queue.push("задача 2"); -queue.push("задача 3"); +queue.push('задача 1') +queue.push('задача 2') +queue.push('задача 3') -console.log(queue); // ["задача 1", "задача 2", "задача 3"] +console.log(queue) // ["задача 1", "задача 2", "задача 3"] -let firstTask = queue.shift(); +let firstTask = queue.shift() -console.log(firstTask); // "задача 1" -console.log(queue); // ["задача 2", "задача 3"] +console.log(firstTask) // "задача 1" +console.log(queue) // ["задача 2", "задача 3"] ``` -В этом примере мы создали пустую очередь и добавили в неё три задачи. Затем взяли первую задачу из начала очереди с помощью метода `shift()`. +В этом примере создали пустую очередь и добавили в неё три задачи, затем взяли первую из начала очереди с помощью метода `shift()`. ## Связанные списки -_Связанный список_ — это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон — это узел в списке. Каждый вагон содержит груз (данные) и соединение с следующим вагоном (ссылку). Первый вагон — это начало списка, а последний вагон, который не имеет соединения с другим вагоном, — это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. +_Связанный список_ — это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон — это узел в списке. Каждый вагон содержит груз (данные) и соединение с следующим вагоном (ссылку). Первый вагон — это начало списка, а последний, который не имеет соединения с другим, — это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. + +![Связанный список с тремя узлами. Слева, в начале (голове) списка, узел с данными «Люблю», за ним «пить», в конце (хвосте) последний узел «воду». Последнего узел ведёт к null.](images/linked-list.png) -Существуют два основных типа связанных списков: односвязные и двусвязные списки. +Существуют два основных типа связанных списков — односвязные и двусвязные. -- _Односвязный список_ — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на `NULL`. Элемент, на который нет указателя, является первым элементом списка. -- _Двусвязный список_ — это структура данных, в которой каждый элемент содержит указатель на следующий элемент и на предыдущий элемент. Это позволяет двигаться по списку в обоих направлениях. +- _Односвязный список_ — структура данных, состоящая из элементов одного типа, последовательно связанных между собой указателями. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент указывает на `NULL`. Элемент, на который нет указателя, является первым в списке. +- _Двусвязный список_ — структура данных, в которой каждый элемент содержит указатель на следующий и предыдущий элементы. Это позволяет двигаться по списку в обоих направлениях. -Связанные списки используются для хранения данных в порядке их добавления. Одним из преимуществ связанных списков является то, что они позволяют быстро добавлять и удалять элементы в любом месте списка. Например, если вы хотите сохранить список задач, которые нужно выполнить в вашем приложении, то вы можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу в списке: +Связанные списки используются для хранения данных в порядке их добавления. Одно из преимуществ связанных списков — они позволяют быстро добавлять и удалять элементы в любом месте. Например, если хотите сохранить список задач, которые нужно выполнить в приложении, можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу: ```javascript class Node { constructor(data) { - this.data = data; - this.next = null; + this.data = data + this.next = null } } -let head = new Node("Задача 1"); -let secondNode = new Node("Подзадача 1.1"); -let thirdNode = new Node("Подзадача 1.1.2"); +let head = new Node('Задача 1') +let secondNode = new Node('Подзадача 1.1') +let thirdNode = new Node('Подзадача 1.1.2') -head.next = secondNode; -secondNode.next = thirdNode; +head.next = secondNode +secondNode.next = thirdNode -console.log(head); +console.log(head) // Node { // data: "Задача 1", // next: Node { @@ -122,71 +132,71 @@ console.log(head); // } ``` -В этом примере мы создали три узла односвязного списка и связали их друг с другом с помощью ссылок. Первый узел списка называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. Последний узел указывает на `NULL` и называется хвостом списка. +В этом примере создали три узла односвязного списка и связали их друг с другом с помощью ссылок. Первый узел называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. Последний узел указывает на `NULL` и называется хвостом списка. ## Деревья -_Деревья_ — это иерархическая структура, которая состоит из связанных узлов. Каждый узел дерева содержит данные и ссылки на его дочерние узлы. Вершина дерева называется корнем, узлы у которых нет потомков – листьями. +_Деревья_ — это иерархическая структура, которая состоит из связанных узлов. Каждый узел дерева содержит данные и ссылки на его дочерние узлы. Вершина дерева называется корнем, узлы у которых нет потомков — листьями. Ключевые термины, используемые при работе с деревьями: -- _Children_ (дети): узлы, у которых текущий узел является родителем. +- _Children_ (дети): узлы, у которых текущий является родителем. - _Descendants_ (потомки): узлы, до которых можно добраться через родительские связи. Все ваши дети, внуки, правнуки и так далее будут вашими потомками. -- _Siblings_ (братья и сестры): узлы, имеющие одного и того же родителя. Ваши братья и сестры - это люди, у которых те же родители, что и у вас. +- _Siblings_ (братья и сестры): узлы, имеющие одного и того же родителя. Ваши братья и сестры — это люди, у которых те же родители, что и у вас. - _Leafs_ (листья): узлы без потомков. К примеру, ваши родственники, у которых нет своих детей. -![Визуализация структуры данных дерева, включая названиями элементов](images/trees.png) +![Визуализация структуры данных дерева, включая названиями элементов. У дерева четыре уровня. Оно начинается с корня, у него есть поддеревья с детьми, родителями, братьями и сёстрами.](images/trees.png) -Давайте создадим дерево с родителем, у которого есть два ребёнка. У каждого из этих детей есть свои дети (внуки): +Давайте создадим дерево с родителем с двумя детьми. У каждого из детей есть свои дети (внуки): ```javascript class TreeNode { constructor(value) { - this.value = value; - this.children = []; + this.value = value + this.children = [] } } -const parent = new TreeNode('Родитель'); -const child1 = new TreeNode('Ребёнок 1'); -const child2 = new TreeNode('Ребёнок 2'); +const parent = new TreeNode('Родитель') +const child1 = new TreeNode('Ребёнок 1') +const child2 = new TreeNode('Ребёнок 2') -parent.children.push(child1); -parent.children.push(child2); +parent.children.push(child1) +parent.children.push(child2) -const grandChild1 = new TreeNode('Внук 1'); -const grandChild2 = new TreeNode('Внук 2'); +const grandChild1 = new TreeNode('Внук 1') +const grandChild2 = new TreeNode('Внук 2') -child1.children.push(grandChild1); -child2.children.push(grandChild2); +child1.children.push(grandChild1) +child2.children.push(grandChild2) ``` Деревья помогают организовывать данные иерархически, обрабатывать информацию, искать пути и многое другое. _Бинарное дерево_ — это структура данных, в которой каждый узел имеет не более двух детей, обычно обозначаемых как «левый ребёнок» и «правый ребёнок». Особый вид бинарного дерева — это бинарное дерево поиска. В бинарном дереве поиска для каждого узла его значение больше или равно значению любого узла в его левом поддереве и меньше или равно значению любого узла в его правом поддереве. Это свойство делает бинарные деревья поиска эффективными для операций поиска и вставки. -![Визуализация бинарного дерева](images/binary-search-tree.png) +![Визуализация бинарного дерева. У него четыре уровня, все элементы связаны между собой. На четвёртом уровне снизу узлы с данными 1, 7, 13, на третьем — с 2, 6, 14, на втором — с 3 и 10, на первом — 8.](images/binary-search-tree.png) ## Графы _Графы_ — это структура данных, которая представляет собой узлы, связанные рёбрами. Графы бывают двух основных типов: направленные и ненаправленные. -![Визуализация обычного графа с названиями элементов](images/graph.png) +![Визуализация обычного графа с названиями элементов. В нём пять узлов и пять рёбер. Узлы обозначены кругами с цифрами, а рёбра — линиями, которые соединяют круги.](images/graph.png) -- _Направленные_ (directed): в направленном графе рёбра имеют направление. Это означает, что если есть ребро от узла `A` к узлу `B`, то это не гарантирует наличие ребра от узла `B` к узлу `A`, то есть `A` к `B` и `B` к `A` это не одно и тоже. -- _Ненаправленные_ (undirected): в ненаправленном графе рёбра не имеют направления. Это означает, что если есть ребро между узлами `A` и `B`, то можно перемещаться в любом направлении. +- _Направленные (directed)_: в направленном графе рёбра имеют направление. Значит, что, если есть ребро от узла `A` к узлу `B`, это не гарантирует наличие ребра от узла `B` к узлу `A`. То есть `A` к `B` и `B` к `A` — это не одно и то же. +- _Ненаправленные (undirected)_: в ненаправленном графе рёбра не имеют направления. Это означает, что, если есть ребро между узлами `A` и `B`, то можно перемещаться в любом направлении. -![Визуализация напрваленного и ненаправленного графа](images/types-of-graphs.png) +![Визуализация направленного и ненаправленного графа. У ненаправленного графа узла связаны между собой линиями, а у направленного — стрелками.](images/types-of-graphs.png) Давайте представим, что у нас есть несколько городов, расположенных рядом друг с другом, и между ними проложены дороги. В этом контексте, узлы — это города, а рёбра — дороги, соединяющие эти города: ```javascript -const roadMap = new Graph(); -roadMap.addVertex('Москва'); -roadMap.addVertex('СанктПетербург'); -roadMap.addVertex('Нижний Новгород'); -roadMap.addEdge('Москва', 'Санкт-Петербург'); -roadMap.addEdge('Москва', 'Нижний Новгород'); +const roadMap = new Graph() +roadMap.addVertex('Москва') +roadMap.addVertex('СанктПетербург') +roadMap.addVertex('Нижний Новгород') +roadMap.addEdge('Москва', 'Санкт-Петербург') +roadMap.addEdge('Москва', 'Нижний Новгород') ``` Графы используются для моделирования отношений между объектами, поиска путей, оптимизации маршрутов и многого другого. Иерархия друзей в Facebook или дороги Google Maps — это графы. From 43feedd2e257d55923e444849c2fed204fca8622 Mon Sep 17 00:00:00 2001 From: TatianaFokina Date: Tue, 5 Dec 2023 18:48:32 +0400 Subject: [PATCH 11/15] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=B2=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/index.md b/tools/index.md index 7cca849888..5408b265e0 100644 --- a/tools/index.md +++ b/tools/index.md @@ -31,6 +31,7 @@ groups: - name: Алгоритмы items: + - structure-data-in-js - algorithm-complexity - name: Фреймворки From 49467e23980e5fa75a58d4c9792b4aae51f3d7ac Mon Sep 17 00:00:00 2001 From: TatianaFokina Date: Tue, 5 Dec 2023 18:48:41 +0400 Subject: [PATCH 12/15] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=81=D1=82=D0=B0=D1=80=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=81=D1=85=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/binary-search-tree.png | Bin 24334 -> 16916 bytes tools/structure-data-in-js/images/graph.png | Bin 19137 -> 12168 bytes tools/structure-data-in-js/images/trees.png | Bin 32435 -> 23969 bytes .../images/types-of-graphs.png | Bin 23943 -> 15411 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/structure-data-in-js/images/binary-search-tree.png b/tools/structure-data-in-js/images/binary-search-tree.png index e19a8232b8dedbc9d0cb1a621685c18b4e727389..db7dcd5aef09a81db36677ffaffaa9740c805b79 100644 GIT binary patch literal 16916 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%0D^C^A})ZWR`z~ znl~d-3sunyigz9qXCfczhiEwGp(c{=5S4%NuOI(lGh{Wc%|F<9)L$Tkz>b!O2&}7j zGHE5i%x!32BdGMHZr^b25C00l7p!POLJ$6XZZH&@!d*Wt!{d&79@2 z2(v4G<#N4q@|yd|pQhbKVZJ?2y6m#NzoK{vC$~+~pEB2`@Uz*m_uFA?#{(0hyGbB- zWmt3!WAx_*xxc_w0&0^JMsVSzQp2gBE#{h?n}eLLm69-&U-I6EcJB<5Qxc~qsI-|r zwbwhH#pGr-Cx>adaX~N>qd)bIrao}>uQp)X?Fnblk^ZZ$wP5JY$yR`B$66XAS^991+l)vPM3h-WS ztW)MW8K<4k>7Xfo%To^5>1m76Ka1No8nQOc$US56bl=PfgJvX6{0v50?=$pji>*k= z4;z4YMv#QZGsE?lZ3CSgJtNeW!)FK$>(?z-sjdm;SkDU0fL zBR>d(nIQ9auJzPpXC?FxREn;R3>HJD%g>7!>E%{lhkA=jO|mMeMFpHpU?f$bB+O8? zo`0zwU+fqeLI~#r5Y0G$Z=;jfK*q<>4`jmSqqWEf^6Nc-P|zpOutg?`J#p(dy`(W1 zx&pk#vvtcfTKsPNVvuY6m~m#!pzt$@gZT05+|_NCdm9d$2HI@N9GaZKOMbWV8dTK7 zTy`v2Vmb03jLDBiwF)JX+jI(@eB?nh>$w#e3Aep{vyRs$Ci7u8X(O{4E1Y~M$~6f$y8Q$Tn;!gLqRO`kM=UayX(>2j!n2KsfbWk0N# zp(HG}%TG2DgtvOPd81MHA5#ni#e&10#gE>6fMtA2Q4Y2-S6>6MuN)HjSI)O`>`Itu*C1tfD#>~9>WhnIH(jd ze%q#HHutS^=WMdVGNud?o(Pqoh;B>^tXS5ijb_)ZmK4z#3`GT9w&jF&s8idDkDR0C zEaFhxun?{1y~4Q4ShYxLy6qi5-x%CKTSl4?X0KWZ(N5WGS+Z3K;XC_HS~YUOdfp|n zbto=Bn1m3Ic-u${Vro^@cFwoYl$A@OF#4cZZ;w`K6Gs^jgc5puD%FOdqjpUm={SbT z>84}%FGYUI{_+(Lu6crWg@5|;mH#yBqs?6vRp>FpSi|BEH(Qo_$< z%b0PI#ka$2ir6xe1HJRaUznDCK{lJxFxZh$*6Az(!B96@H>Z+E=DY1zqN={j2UI%_ z{y=|t-T)`6A>%ZW?JogE7OGMnp{+~>Jao_vR`#R`7 z;aI59MJ+NUaM{U?Tx6qlC8&G>-psyW_Jnm;;0u#jb~nua^7Ly3To6Am+7m>%+*zgM zX+c`4kzaTJS|XGVeJ#Ld^`X*~>X{Bnrc2H=>C0B66{7b{T!!30OiA^YG3?215{7c4 z^sAqyN2}|%O(;S-6%WYT;Oa38*(*mZmW&VCPW?G;r6^Q6RAF+C-vw%r@NAaPxPVGz zVYdz01cRaZ>sc1Q@(9l|X$ZeNBL@ghJ#OLC3DKmZ9i9-2$~fdttUx^!6toULWYnM( zhCkD{p_~p?d6c#?PdZmw{69ua4Rln&o(ZWubk=DwY9a8M68**tD2LQ(y6m6Agdmd7 zz62YO>Nx?KR4r~UTwhVteJm-mkE1_X*lJ=G{?3HonTx{TnqTbf^=>-nb*^k700>U< z5O?&nzx-TpaA_iNGU=n9Zp66#lHs>( zgJ-;R^p5K3XlZwTBbike4KvV?g{)!vGvK%mc%AdFQ?v1&j}E;iM28%Wz2BA3M&&(E zO~6pDyn^a-w$0AY`p)j@?#q-z#?tH39c*z}jqei)tl|TtQyR6z_$~F(sGL?kGefiiUd~6r-)5gS~?)udcNmW}_nHJ}C_zwqO&9M;naf+$C1jWgrgNd)R z`?jPj%st91_YwcPA=-IOG1?9yz>a}!b8RMht=QZ|_x4Lk3^$uua-W({^8p!?R^`LR;$Bn3s-1>-U&TB6+`*wLYy7ezN(1zL#ga;6+Ke^ z)FGvi2>}L$`r4G$phkBuIDN=rD4mL^xD@>oaIh48%;REX4R1Gyr@8v zW43n?TJlx7vzAc@7cJK#&H0n~>WLZDa%|F%$-le4`70(8%L8=0 zs(S~1i$_11ZV3|svGV(0d-nxwZ7c7(SgfS-DDEhC+^p!zd~etF5e}M#C_{;g7&d^3 zLoSm@O^4So$uu&1t6}%C<)T90|ECdCvrZ^P^SGy|DzL_raQ|9^$Rg5+mi-@vkaCU!X_;)~PYCJr7QQ01-ixPRE} z{j6WQ%9!J*E+NOiO-%pG;1yWNc7I`6Nf8gcq^lw0@ESw@2TYdw2j!5OC40<*VJm85 ziuhT*b;Hvq#TM9*qV2ami7p^k#0~pg*mJlu+SdA&1*0>&!U3_L8d}dA2&s{ za2b+0H>lS;_~rkKMWlW{9@M{`{;DVW^gqd#h#23t$D4V*UFT1*dA^V%V&VtPI$&So zcY^W99LQ57RFxpKu!M*h**|9j!d@#_MO+Jtsjbr7oYz^uJ|Y{X#vrAx>bolC{qH%aO`6R|{JKKV&cwjMl+@*AQk{7L~Xu#;8`GI({E1W4RQGrJ6 z)z!&=0{hl+h*+vO6i~9+PI>*6lV1YK?D~sd_|8Qa)c^TuSLuCT)=y_6icaxhwL`Rh zjpP4=xPM=frX+(ORWm%XMyiVW38|?0rXg#RATDCIN^c^CSdaPF&~k_EB59-EdqZ&< z2rcyGh{|B!InA!)f;bD@_bQhxSLNT@Y70L-4@F=QqDCK~`^G7o`|2zxxiYIPcfXbRB-VO{>FBI`%v? zNET{QoIku3=>GmJ0G;9z+a_4Rm?i7qULd9K#_t#s{LX*;_-u!^P3Rs=^RF;Qm zs8>!8IERZEldnwopk9+f9RQJ^p^eF}hkBU@S@*;Quob_K>bp%ijNjbO>4?9m5qW68 zL-f-(gOGY2{p2cep7$PoKb30%9v#B}%5|+*bnQe?lS?N~s`Is>M%w_R*zy!}GhZ#m zy{1bUh!JjT&;bc&Yohzyj}V8$>QSLfq+_P6E{7v&Yv(0?fR2tLAKr-ymkybo#H2yS z`2q8eW$ZYcJ=ifxkjIUyp#m>iqDmCIg6B#TM@ADFD#|E{ z2O#vx*cbdRGj99**}rZ%7v{#Pti!XgxgHsCqKyskcvvYA{%pry6f^~X5lla_v6Ta* z3MwfE%w}0IhC8-!cxNss6+~$A=Yz))pFRpBL54*{ID0aep>h(6K2G0T!J1h2Ce>+pR>( z)_?Aq_37dG!D!!VsDjBdX$%eJB|FOHigP6B+dn@2*?3WVM#xJ zBv7!#(s2b3eAWh}0;Xkg3DT3(Veb9edc!AW^x*we$nPE6I3U^jZwDr)rJ$Dwt^6An zV+g??R7-uOKsTd*{%`*J;+0Aqm$lu1-V)Y@g8q+~1idKExkm(p2fRDU2~a2&69$jQ zXh)5g`<(4X!&Iz%yd%l91v+H-Pm(P8X2U|^hZ(4*U`=doi>noBjcEIh3;$(CBh?!=MyuKW*`meo(t?NXG?~tFajT zD|xBv!o9)oI*|4OVwg&z-uJZ#NH6z7X59l`e2x@L3$dFY=opmu@c5QE!w|TS1;V)g(6#AxSlM;=~b&pTsOrfol2|+}O(FU5Y^#O0InVikN+XwBh?xafi4)kmvp(elCuJne=b} zemCi~;*fwbE{pfQ7VnI?Z^ZnJmF~26GgZA6y9)Mi-vI^4?HV0xbcRo91n=MZ5~|<$ z^Qf7j0Z0-F|R>SGezRHh`UJzG``)PSI|9pjcx^XK8Hpd{KE)t@cpzM z@j{9$bvq~4F)gOs4UC3^x<{>&q7UX}jghJl!+<|GslC0%cpt<<$3|=pdEJV_ArWGgj)=Af@)v zP?rJrg`H4`(V;w#ku)r9)p*BRBfO9jbC&^@^r1i~6{6(1p9!Q0Ctbal8j%Mh5Rfr@ zo`W>UZ~EJTi%5+!^(7m;@H9yZxniXQS+8=C#+p_J7W^KKD4TW*2*l21%x(!U*X zQPz0iJDdkiXEP3m^hc_Gg{zxGJjyoYnb2V8q?G3yFsrE3JN z5-Bmt#;@&TcAOdK5Npp+MMnX7uZb@f+eHaE3WNI6(jERPmlv!BRvAW{$ESKV8r# zGJ0kP+0cW>Kc&e2n1}WA9q6CtrV&cvX8nA+Q(B()$EBKOEe86&Jz%Dxi{(8N?-(ALoC0d1CJmchQeE9u-u}%P4b|>VgK=SQ3uv@t*r7gYwMY2fK-o& zlV5bVHGd46qM`RU^yO>rBOJ<0cDl4IBCmf<}9cig87*dEIhD*xu7 z?<3O-nP=U(um>Hr#6YvX?nH+aA{DcK$?UaH zGcrJ`&j}0&jqD2i#mCq>kSjXh_=|l(YnEI5c0jaQ2MqN!cQio_DPR1+Z|Eqv48nW0 zW5u8L&B2hVyR^51AX|5~sqyK|0MOVhhsi7G!M8^;$ik z=N4VaNq_MHQo0T1+nd%4t$a!eCM5!B^)kKXeMvBjhw&o2L+(8M2ZL$}INy#t(p{VE z+3S+wVe*FGI*~F3%UZ>W6IaI?aeNqbogjFt%eLct8&zHSXi+}AV&|QC`rHrd=Ahs& zy@Xx@+ArpC*W~IPg7c96x7N-@D0xnSaUHbDv&|F6%qpZE{t$BDoeSx{fpu>nEb@u4 z!1)*04Q!w(N+@Adf1Tn;TJ}B2oeA4`)ziE)Zy|RsEuw@Mp=KUYG4ax0gROLfcD||M zqJQYa=hg;P8;;9fiie`xXXnWsrI}_ZD;(QfD`>i77xqSa?KR>0w$WN?Qy#da=D!!4 zDKM^qZki$6l5+afydE~Jg4XrQ1sS&EaKWbwJB6S9Ymucj$uJtpvTTqnwr8Y<&LY4l zfb$F*Lu{JD(sPjhXSVC``1fL;%G?~88f?o@QB-Zsa=HVe?S8WR@aAtQ>gEU#grun2 z4x)d=ERTnA>w}u>$blV3kZQRP49C8>L@2z9da)!*i_P&7YM_FCjL8^L%C|h)wf%V@ zekJ@QTZEE=+r`lX;(#Ml+*>hNjac?pp=Ey=1ch=KbIeam$i5Zh$H)F5`B#+HqLe6z zN^4aNvO!B4J1liaF(=1*8quH*il91w+z}qo1r_z?!TRn*ctUcJs(t>X;w6flDNgA` zq{)(u@MdlFBV5$DcCv5cHB!V;j}dHNV)){d0)=u1O#I>c&^+Wd!ke_5I|nIZX0mDI z0NKN~)#k_Vd^gt7=p45H6@4U>hgz4$3#i}bUytW^?rc=2V`IuudqpPqDJTyqqL2)= zr}1ODXXeNt{AS^Jp*0g_$>>7*NoJ~}^yDx{AvU+c9W zOC#xt2`d&GQbQFf32wN!sQN`n#1{kf?^8&%Ss0K!1`dd@~=K#|4lu!FWw@$ zYKfrP*DJJwY#4n58F|c@87HGI%F8`RQ$`MEiP%YcPIG9dtFasJ7iO z#QNN&0r}-{WJKf3-bay&nqw%untdT|a9TQ`?su^}!uCA}`TlS?bd}wBwW?j~b<2|l ze<)@vmF24c({w$AH}n38h=aTg9)@4bC=LWMt>E>B$(e3{#3ubSUbB{F9;!j0I||j> z1dgp+FE2wwqp^>zhkM#^r*cLz5MPEb4Oj zK-!5~dNnHBUQ+Y!41uI-6hl?akCD2vFm#7fAJ)~#n1!K1LgMr?9GBIbD4}>l zL^&HE^JBTN*^)=NtS;h-qEqCF;Q0q-%AD?8aLWAB zcaox)?(p@fhal3U!_)WlTI>^Myl3l*V6IJvp{J%j{cy1q0eUo-)fpW4T zd44)ymBi2qF|Md}{a!Lp6c*?H-y`IqbcaOJ3DEW9VXLHVcZNf+&?OX(0P#1<( z9ld@j+oY|xlki(#6BWtzZ2z=W$l9W**XPAC)k}imC82lCkEU|zubwPJOeZ%Bn$lhJEfEQ zxq7#SJVFtz=OsTX7sK^FX}g}~1u~Gt=M{W;AT@dSF-|7s(gm|ficz9AN~N2$%a~)5 zR0`VfrZ>F4or#}}zEc^F3Q7UUF%QK*dOwFD*`jGHJuqU5h$} zxYiYwM<|P`I{M{m1*We(k-tf$C|clawyfwf4=a-_s=^;ekl3&R$V0UDwCsCSjJPQ? zoD(fY6+ZM#1R*v`&qF6p8FuiR1YKWwfG1fW%TKd~U0hM2V{-5Ph%@w&e02;tJ_Dhj z(>?n!)uZ;AGLaXxpYPN4D=nATNT_V$GelW3H}p$VUXROe(!Alc#$pLvd5Tuy&B(LP zV@7u`ZDiBi*1Y1+!4L4#(?wlzd*LRU3$ck)dX{kTS4~+{z;AIe)sghy92R5D@H>}t_`;m5)F z5C$Y`9{yvKRH4A{_t)EnPj?M|s!$SqFONc%lMj6ilMSebvVERJ- zJqg>%woNHchE+Ib$@D4?zmH0TktuwiQ-SjBhADkgTg!|)in;=qG5bRaX{C;J85f#K z3_TtiMio}ybWCMx4V}S--BTN_k8)HyC^Pg6BkeNxR-oH%{WcF@HPmjvX3X{}A${L@ zV_-bqWBAnA);wNvjOd2n)QeMegmOr;xg1AzL5o7n?Hi6j;5|)KP(A;Xn8yU)I88ss zzrLrDs!~`YBu%ZPm2aGWa_Px@s<0g=a(rFe*T6~Rup?b{wZV$ z(K~am%UoCI7*UzUonhTHK7cilp!5B(TuR zjMXR}ln4gXMHGz$9$I;smL9C$Tf}XhzHkoXsx)8u#YQD2Qlur-;zb%nUvou$#(-s2 z74CHcA~EF`1*q1CHt@c{7r*!FH<_mt!r!FEJNWBfE7$~^*JL>&to)vd9sXR02ft6` zMYtmmsS}>lhKDO0GBRU{@byd*y~Y=hVdzQpSFMi;)+a_QcSa10W|G@48*3rC$ekEm zNm&9Pd5({O#-?T9*r86##$!mXV@E8IA;r9eX zhr7kUV2eC_7R2>_RI@U4P4MBB=}&u222>Uc@QRD_)7HA!gDO~V=##nI5%3E{uHHJ234*=1(HVlRTcO1D7j^Niw06@EbYa^V50RXkY3C6e8XlUrU zcsRgsz$v*2XlRURDvENiywUeQ_dC%mw=EuI$9s1tsE@EJ_Kw#os^&AjKZe(p#m8rk zKs$P)E4f{*%yCH~j~IjaWMAOaByQ?Qrx)O|*Tx4^v2<2{pwJfiAj<4WVZi!@&?di~~8dQs(Xa6Z3zkGerZQBq90l zm#KfQvW^U|6A_A-S~gIi-ODl1H=Dc zz!0p6)7{PSJ3QM&u)p0%px&`OW1zIORpz$5=S)ftTMqjl0m;$;=YatV!9f}QR8LU8 z#o1N5&&}$GU#?@w$zDQ$F4V>zyAXFiK)vCfjgA%85z2^;I?8jZREU6`Nd3O0 zOYD@JsAxUO!>JjI=$xu+IW`|Ph9XNe^e-+sF8^pFk0CB5M&?JKVmyb4$Ue?NcAeQ@ zsSqmEyqhAJczD6Mog9Q6vP0CvH!+_-Z#<*3*tGNV^xP!c61T?sG*A5am&vi{1K>d- zjDHWtQ8xtKc5C?@`gCn?)3ltW)^np1Y>*Cj$$C-C%G%)Jp%&=d*ReNia^)U9eo!#P zRE$)>Ii`7i<~XX+!*9O$qN_*!Kqb$(t;G-jaaI7hVlsDCPgMy@z=ZO@u~}qC^)Oq0nb^to)T=lZ3rvPeRy z0Bu-S_xZUe<2SRk5v!0s#Gf6zXSWD@M@J?^jS6sT{KJ^QCNjJgL^npFGuW!ph^C?c z3XPkswc}DcQ4yL`eSY;#_pRCT_oLe8raenrSA*mE$2+JOwK7r8bXgS>_^KZ2DWAK! z$Uv&nAmMgr&mc;5=mnctooIM>tM`fqO+p0lg1Qxe5AUUsx0jcWuVVSNh%h0$3a&XS zo7;O+b2EYoG(>x&t}T7arSR9M5kapIm}{}_5$IIK8K`Nf8`AYf;V?)NGvTGRtTg2_ zC(jV?amQ_g*1jI?cD(oZEk#oCg{WEH{vWp;9Q$<10&il7*HCDT!-`p2iEQjo2l*|X z7`DX^jKnCLxB>9tE_IkwammG<&t^NVg9H0L(r|qAXUdpZlCZ=^^FiY96AK3( z3z*YXc(6SoBO@N3Zo3&8j>KS4oH|A+-CUD!L(zMGm`~#+gwac6zstNwpB36qksoiI zud53{t9aM;@PD3{mJmAc+xIQ|u(|y(&BU9}R9UiAd4T8xU3t=B&YsHFyU_jv=F~70 zZYhD8=s{9wpZkDi%0Az?YO>93@a3#IY5dXM!yb9wY@5X69j^P2Fd!)7ln({{JItuT zp^5~piFo|Yd5{<$=PwK3k$yCc(a;Wrm54F{gzz*4z4XCSOLFK3PUsv5zx-0r!6jx%OiURWZ=n1R z4^cdL`W`@@a@rma^Bf0%c<`M-&YzNW5lY3xnXTJRaP+v$syN~4zk^(kLg6Kj%4Wt8 z{^yVI<<7%Etk1W^62AhE7X^cYw2sCu5x{sK(H$73!e&EpL1yLFyVFadEWwZejS$wC zjRwSoIo5HFN1S$47 zBOIl{7}_&?y2hjAw9DOMYH`uJ@)v`g;Qi|o<+naQZ1DKKy*)+nNL3pE4-|t^(`HXy zNY7mmErOo+u5NyxzC8T3AoXy7+~wXeYf)a&rdd#c!YcOu>vOXlW56$Px^TJx_)iw# zKWfgi+MjNgE055rcD>i|zbA8Bjjj)o;$a56#GH(us`2Nmwz8f)IH11Gel3=}Fq;II z32c&Nq$`6pT$J;`@SAxoL^%(9zAwnaPdRRPfPntXaUpsn@Ll+rSu>WypjxqInzhV< zP65t*DX^&p64v~tj$p=^8i3^<_W@^n*pX+0bK=X1Ph}&D`D_(&4yTiPI^&K1Yxdd< zJ1h(C>82t5?5RudwDR8g7DO2nk-05}A^mlI>S%bN{v%7(My|Q;{cxEMKe4bo7 zJTG$E^#ifyr+s{R0p|m@>VL*jjZ*!lNvQa%r!ppSJ*g5?PW*Ocs&o80s3BzZlu55| z<+{DE4eLO+eNKc0mtAd?v<-^q0nOef3E*m}4@cRw94gJD>5%;doBHyS&sQeEye2(~ z{Zq4R{QBKxd7Ka=E`@U9;>@%mu^(|U)*Iri>hkle z@BAbKz$j2|R@!ogKz~iKg$9_|CXvtC)Q;6(FXamc%>)vaj|+KQwt>I~G-kW9bUj86 zTcm>oWqbru$&NQPy>P>D@IP3UZy6rm_KH$%vj6+a%Z{+VqKqUE@`~AHWmQ4@%d)O& z(a|CuQcg)JBnI0dt~*0CmM961$X2f_{MaroA^A!^cXj2Yy_xn#N#!@+g0Vniq}9iT z2l!w1bFzT^*XBRtrZ0u5=BFj$AroXw5&#svqr02W2MpE9m|D`Nuq|tzEH>1d7~9-@ zC|aV^ZW-vBzy65`P>MP5we7AUD50YO;m942-uSUCoh{)~X<mytJ{}&BBG*r?EEW{(i?R%o zvH-w^yz1@XM-KCs)Po215~E)(-m_9gu_3)rqAgIQay=OTy{2)4g$|D}5uUM8kKuW7 z7C>k6@e!G>EFA6|66?%xB7;Q3yamFEul$EO@Uv=o{K0CorD-Y*$~cY?IMQz-FS9>* zFYT!Uu}^1HdB5&!1BS05DW6}ygC^^Aj@qSAwtd{Yb$%9>MbcMf8NNt^=DLu7p zSx;1EYUT}oe_y!tj4|nT;N|-;Ee#$!Ix}>fKI{MM`L&oaZPygE%~A&bBs9-lE8N@d zE9;5P-Cr|;MW~<&@CvPl``IrB7lCI|mDX7JPh@}<{fe)N__v}@RNh(*S4It}6-C3K zoZ~0)mY1)yR}slYEu?@M{DR%x%`2kE*Dx}Ddecv%tQQn~{J%%_31y@<;U&7=#8_L> zN6j#@0fz%+@EQUK)0S=Z_;-}JjK`n3o24xM%r{RriYOup@JO|dJIqevSZoO~fdKgv zupt$X^-%sl7e&s0<)3e=LfmBrZiu<)_A7^u&H8m{@EcE-6LTgNXi2v{(sTBS2UMFh zHKFbO6>A?^=sIM@|2fQI{+AtnPfYXe?ni}HA*>)48Ttq79(wWKfU$SFHY+=}knh?% zg2A4O5M#k4CHe1fZOTa;3~lZ;-4x}G3xz$XZP79LmlFRk0Z9pvaDWpCN^Q=%*FKoa zHzvIgwN?tPnH+6)8=@fP$k>tI-GPZUHaG9Y#-+y9L@h=Sq;u z5C1tA?7E0tW(VRUZvv_G)J7NwCp}ehEPAP7QjK}i>hjclq92C&!R!}(Cx;eq-ZES) zQ{PWU2>hdPYcn!( zV6NJW1sewm)$q!Q*cXTi`%M?%WU8_NL|UB$`o7?K&_zJQJ>O^J*?!3jx5jMga_G}h zLYylg{tXElPDQcUTgD;RrtMoQ5$mvSag!A(HF=@kzIif5+D96(gRD`JNhCyL=~6-p zX;1X5OeMjy`LtUTsC1R{1&uZkmV^-I>vwWW)o^YF`a+^`sZ~hLb=wTGOhD|}?LIc$ zzZoDIs?I7$LArF0cxz>&9_n zYZjq{)@6^0V-W?(S;$AaR9Sf&86aaYW#jqLF@o3J z*5Akj)cs8M|7Tgx$v!!2Amy-8Ib%5b-cI~D;^76|@e6tcge{Co@6XzsmwjT3p;D3P zf&XaloER{S;9v`{>VvRY*rnZX0EH0N)w@w*%Wj1}lU4L<=0hN;~RMMnq3k9}- zK+tr};(Ww5(Nh!7BD%ml|De!s0jH`sZ0hs)NdTmrr6Cl^izR_=QYSK9>|D8ciS!Id z*M$I{js*Ji(kV9exnmzEi^qqwk(%c15@>0Rww(9NAgP^r0V5iwnW{Jr9g9_Y3BBSB{WoSwFxe4T04>&M0PkFu!y`+8O^ zEvBB(8+WxF%BXd8JO|+Pz5`R%7(?CwPN8mX8nFCb|86fzzqQTEao!kw*?fGIJ945Q zi0ExR>Sc4U9m3_(f5C2;^*!tcIW`}RWXWz16eaVrSRq^Q8sfv|jufYu_0`yD$R6<5 z15#ugE);*shvHzCn#;K>JiBY6XmLZQoI$h{YcaKHGx#*!|tv3 z2A?(VdRUlA&;9LRZRBTGFzG{{y&c!e3g?Mv?=b!3_l6D5woBD>Lu&!|Q>;V3P6~lg zfRRzifPYvI=TXJpt`w-}jq$zi;re+*%h9r8Zcygs`6uz4>9-bR-?w5kblVnhR@qLB zY!)JCufJT24ms_)xZYk7mCq@)PIoKS`EVHhdJuryDMDBSKr?K~tvom%t-c)1OMECf zMVA0nA4M?wm*I_(f93QX5R_wL2wvL^s+EC70Uv3BA#t|WcI6syY+mugY@9t}(Z7oJ zx47@&k{O-n0vPnbBV`9KfYyP6uqFi<8^^;WR5jSqDR^IX!Pe##y{LcL`90j(hDBbd zC71i{lb1mJA)iZL(RO8KeieA*C7G1>F|5OZ!cm;kc>Dk8GB%GeUlYDoiNbTxgwm4> zW>0^Xm32$GL*zM}1m5YAI;=@YhPg+wZDSu-MFRwcl^sI>Y1Zq#RNtZn4Ipj0V(?qH zP6*rb#@<=1fNJw@PPatPBpsxHbe;tuAhhauQ_^uoTwx=Plr6IA0!=YZ+K1cQm1U-0 z;;l%BwWP`>zazuJv{Ykb$jb=m8>-$R)cKOU?UZGqnwo3c=vJ>?oa_!4;ziP?v=x3< zY}zyyZd)!=2E|?*Fd*j#EWzkZm#n=Z!86o)-u2W9SVS8x0gqW zGyUE#PofW=QAhrZZ1EtrsirxeIIvv;`ea=2Jz2w_G5%U%My&(omrlJx-1W7FN3G4j zcroM;_5BW2)K;8Ox>FkaYZ98&C?v}Xu`DCB+bWBe9#SoB%HYPDD&Y!kWwbZqk>y(#c z+be%gSr>Slo-;~$&;sHn2P#FtM>PZm8&DrI5oBasguE`PaZU1lwM(G$hJn5A{;ZtO zvzpgn`uNIGbgI9f%a+b`iB6^G^i)mj4k()5pYcut>@7qY5b#7y^dQP5!A)#eByyDx zIZFYMP>3cCD^+m}I`*q)P6mRyZmZoKxLLGoF$V_t4X8dvhkF|!S~A4IdNf9KDM zyPmhU!0++{7g2dON(Ovq!MO8!rMN>?*CX4}>AvP^$KR;(a{J0 z8zR4sy|kAz5!i~kIcB;pqSD|1^|{9V6`-QgDd+(KfVc_VyHrJ?CfUgVvQ^MStKdvyipo-%#R};kRcMu*GvT^k(qqiDx#xA z|Eip*$|d1=cgNt#MjB>uK4r18!Vn|X=ZhHTk$P-r z3%9#nKMgUuoaL$ZwWn9=Yf`KMUZ}2HN{q^DC66p`IpJZ{%yz`>KYZu-L5ETs^j>nD zO@lu|IyR`|9qEbV!B76=+^k8z=7Sf7K^3GF+#Hp^-40)nqlh~ss6*C)@REW=v>{Q* zCbK2(!#*BfjH`CuZeM7>>CCmS(}gs*lgfj~#kj0P>{)nt|MhaGwL_=%Yxs%yK&h5L z-up6&o-@}~`a)7-ItN+2=L42s2U}Fqxf!gUYzO*#>B_nfR;a8a*uN_K$1+&pQ4mh* z>s;DjR{sl1FfcG{1+?5rn?&$mSyFfvh#kEC>wIVx`C}?7ktL?MUp6ZXFGZkLS5KCe zAid`i+hlT2zBu##b@N3z3|3orykAIt@kHTY;Sq&S766^WQs|#()wbG1@IM;tsh-G% zbnx~N|5+XyUiGBu4-idOL1tT18>dtTjSXvTdg6V#^rU<_yy6*J0(=a3vqTJj1tQUlt_iFqzL; zN6gL`XV}4F16cem7NWrMQ-mUjEzMHd;P1hP+i9jz5c5t)nx6yk&t}e}B{-&y|o!M~q z%NunlUmK<+0nXI`iUAoJ`L(z(pOw)mW81fZEiioBX@AwoB}AwS-+DUu6iifQiSUTW z3F2bT1Gy*DWxiYpKo-OBuk4HNXKCFP*D+=zQn4BQ3#@g*nI)SCt7o6EfeZ!wkHLkY z|HkGxOr~FYSTizJ=wP40J@#IRu4paw#I%3_MG->=p+lUE8&A_s(ysJ~N(dh^+1NoO z)j1c{_p#;j%^FoK!w)dx{s)13gf_3i;F8zKWRegOnqS|8waNVCNNmLh`vf)+YSaHF zt;Nl@R2aOj&trBlSn}MNkgyEB5_pQajqP%=cgXWoe^Jvs4qBf_oL|bEef0wkLmo4u zF?jDK`f|O_EaMNJXX(P5oW2k)lh+vsMqJkF1`ng9?M)l))}j~3hzcM6Yh4KL=GS@~ zTAMp+X5!?PUKqcl#G_KdSQ zw#S^w{qIKSh@SeqXM1kj5G_1M)2%zX*M9c~6EVIQ^KJI4X4D@JqvtYMVFXbG1UNK5 zJ2Fh@o<6_7{EBqCzu-&icGQ6YRq8aL$PKHmQ9x6kerzbR4TtwE+9UXPDXi-4(D~Yn z^fAJMv{YWGbjn&#!C@^YDb?%a7YC{JGGa#4Zx;?LO4g7b7-D_l^{y`p!lul0`RBfy zMlYq@1O>|h=R%|J6vG{ESK%DbFg?2B)SkJJ7^fT8&fxr&JRDF!lV`|sgB(;X{z7l#RghC!-72$ve1Vd^g1-@hN zdpfKOsbULCem#vG!qJTf(N8UA{A~kY^xF*s36;T~IQt!q_2+RdPP%S$xo|++z_B8YSqtYIxHXYpq#Q@3*Nsxm zf`@Nb7BYI8^>IemOMI92?dODNXJ=KYaEDa%+{=u~gzfpao{I7+U-d zp*6)9b#aZPu8!|U01TN(b#-QPai9B(joNSsFghB=dIY}nEhOnrSmw{Ly;GJq75?x# zD>RPzAD9;lm$oP=h*so_t) zTgp$Vi+GaD(r6P%ee*685D{>K|i81m6L!4LA9cA3Q#Q`*1ig)+;=I%jY zywDjN*nuXZz$kAoX(?BkHD6zf^2r1Bz*0}~p}rlk%nY$76pS>}%s3oYV8sf^7?fTt zM}A}m!U4ehrBNL|0h5yKk&i}ncNGNUGFD%diH;qtV*@9-NSnGxfLaUtr9%Rx15ObW&$0j#3ca^dr69hz2Pz^KhPJlPn~0hdzL#`f@dV!AfzQjt?4CBH zfg?KYVV7?YTtv|n<*$q;zWtR^kp~bA@@sWVlpzGa0%fHp2`x$m@|nIt;3Iao1AXO9 z8#rT;ndj9J044!LR1}1>f^}Hevs#-usP}Jm<60SZT^)xWfd5G58Yk3=FssOAhVT!Z zIhT`^C@Z!LbJ{$RQPPB7(@qq+eg09tHsWeyX^{$>nq*=+oOQoL1`L=!0^$UF2NEco zwlQ0R5+pZYK5qJT>EHE`8Y2j|mx|on=vJ+1an$<9DVH-5cy+MB=m<{Wd9_$_kFUv? z$On`D!ZqiBW9?y$d`l|);K{aRt^hCJ^Z#+Z=r{?hERM#J`740RI(F!+9JpiKbT8{go!CP?>9ex-n7v{MSu2s(&Ys8@zpa zmb_ivMP7rl{OL&(ctNH~?%Sv$MdyYwe0);A;~-!fjrCWg;@?B-#Q1Cf;(CSaU^STM z_-{!1PB=`@F(E`OCZqknWFtN}L#J=lPf;COFGojuoS>euKzCcHLfY$#W>^>GDVIn|Dolhfwk54)&6GY68J#1U7&5Cnofj|1u zh^~JbV5qf`6&Xh29_Dj$8%Ww-m%^*@sdiF5^KG;RU@`tDeb*kLPXLM{16nE*l^`|m zk~jk-3Ar3&l^0hLA`!sxaXkW@B(_3%&F`-f^)^XN7s%pkC{&cjuwRud&K5~@@)gOn zJRpqNU<8g(aUH2~=K3Ls1jfuLZH*E=ICr~4X{-ufm!b5inj1%y%Fw)U^3bs(0^5b) z$F4I)tBxP1TI?VpISIBq6xteNDOTQmdCwnEss}sk-;@5349m9OW$q=BPQ!Ip2c^W!{{Ba!Hx@C_pS6WWe+oMsZw73C6@2l*hD1&gTycrn@W3FV(Ag`W$#3g#(~I4Lbc4{1};PD8rz} zKIzQGMd}mlp9GpkE5!esfFZ1|Wdg_&Gcv2|xEDBOyev$6@80r|IY<<)O(ty?zh20t zQU-=ow+ucoU?|6fYKCeOy!HwIMr2FN2A-kPLVVl3(B;EDj?Yf4ku!V+FYM6JO$BV_ z2Ctox6j1QE7wHnm_4K3H{e84FU7&?1Az@;|dSbQ!yEh42%<)wc|a^~#R=(}E$hnQXwUV9jQ4**(w8~gXo3bVdPgxsV2US+ zBJamsi$tJfB;3ta!@6JxTub*A1P3O1<|-Ec2aOXc%g{;1B1?k+L@SfI-t$vVBLo6( zuMrA$Pe(9sjp72l1xU18_?RxoOuyjH#a-28{U)dHTOPrum5azMv5-(l{xK|f zbb7U&3tvYl5v!#le?@n`Xx57KleH&_3}Y?w2h$u^1zOMq@We?J#)JGI03a++`maS3 z1+eltIytZ_(y%MO!FG-rL&K zOZBTOlz=dbXW-i*JAuE((I!n!*jaTfaBV}3JnT@>CgDI1w=rI%WYIck7cX<2DD&;n zdRk((9v;nfNmx!RFg#TIflH=x6V>w=S<&hfNvwvI;TZMu1N5>L4!?AdR2eNqm9K>K zuz2XLP4y0xUzJB-DUxUTLg1kG7!$EW*JtKir!%rXgeFfshlmz+(I$T?MJ=wTwC8T6 z{U~QOIB;sLmCt1g+ZSwgdBDZUG|;z``~A@O_~{2!w^*mO_WFsT3}+nk_eH68>>+xm z?5g8#gQm`Bb%N_(g~NX zb%$%Rv`@cpAl3{ODotq$oAs2NOmUEk+#n$zKrJj;ZR83Q^R1bw`?kbpx+w#*ERWeY5SFK$GR7x&Zv)0 zR|1?79J-|^qN^fjs0}aN&_geoY2nNW7ikN87_f3_6-e9QXraF(3EH4QiT7{@{+w1> zRx+1Xx);Fu5nRK9G-*?=0t(Ze>L-iXn$r@bGSGYq<|w6Q`fa`jWu3 z@e&@$O^zuayKG-)V;z6FmCk+3a+4Zi-|A`gNWAoGKrhXYd8xp-mTynWfrkH8q`y8= zos>k zHjxf-)PupctF<~n^z}HPW6htAaaastG9m5ib9A1suNq5Pj1C&7dwYs46kvT81N{VR zK;|$I^NesU4&dvVyD z$;`4mo;^ZV87SFFq*wYo9A3`zDO#t(;2M7(n5Eh7t3th}#{^|kF7_#uEmy4{;+tV} zUvh@3EL2mY;#53cN{Mc?_*>R(x&!)IL;WmFrvV*q3=`h!ehqT65)?4) z%bAy#eZ5?(d5g%nuv5wV{^FOg){Vbgv|l}CCNql;AoE0n1)@OAaMW`x6vqab&==hN za6+}4{mnL*0wi6xb7EwZC=vc^MBnZ1@-HM{`?3sX)t*Y8Vd7sy&&5m%;(0=ZxcwXA zo0E-<398}0%&$1Fu9$(zcv}hSsb2I_^6Au$uJkImr&ZWbSs0>mATO=98qFr%y(_wSJBdI-NUH-+UAl*RxG5A zavS-t6RC0{TxT6f2orDiuJ-=dYuX_+!k6`HU$4E@C4n!u38PuWt1T4-y1)2Q4c9

;zE@o^oW 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 Cgx}5p diff --git a/tools/structure-data-in-js/images/graph.png b/tools/structure-data-in-js/images/graph.png index b320fdfc22422cdb90baa60f18c8783a2a6bac36..422403f0ace7796efc9ed21a330304db0b6e65db 100644 GIT binary patch literal 12168 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 P0sg5fYAKZ7GY|b=BzpR0 diff --git a/tools/structure-data-in-js/images/trees.png b/tools/structure-data-in-js/images/trees.png index d7ab87ff0be246092b197470101b2df8f14e6dfb..03a85bd6d340f5593778c4f7a9b9cb540b51f7b0 100644 GIT binary patch literal 23969 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 literal 32435 zcmeEt_g7Qh^R9|7iqfSCAxQ64KnNiy0fLR96p#mib;GBJCKYR9+XJ#VwbP#lxI4_+!bB6A=w#I`q zXQ;qu&YZ54VAkVHekc+tqzVjnN-!<4DOwaXyLNax>c4vyb zVHTBD)S%H97-p8M6cGE@?3Ow1d=lZH zWr+@VW4NXyqo&l)j$WcZw1OoE-J(l}_|p?ivh%!G%nj?Do2Zt{{uKE&kgJAJ8QVpM z+tSDRQ#Jg=*K|+LQ2*!e!_(iE^1iOIboDZ4sQ&Y3eTI0e4IR!-+kEDKfAYO&TBtfW z(a{$4DCPfLh7o*`A>_jUJ_x+@KhJ{cQA+>+S#ln0J9G0ydbzFwBzD0^F3FzSO68A@vH!%V4nFdgrhFPQNvCiv*tw z^iqO1oX52%{WqsS%*jX2acMe+7M|XVkIKL+s-8+Bj6JLu9iyBMT5d`}1t3M1Cm{T- zwAh7^v%p%taxd4<^!B!luwRHHYZR1!yD0*dfK2+59@zN~eHEu``ng^}b%DNkOsiWb z9g-$xoaa;)=C%i806|mzplRYSEV&7!ez)ljv&Jv80zKvzei)Iiaex z)ATZf@_y6dT*Yj|PSMkMb8G%2b;#k;XvK?8;S96;TiLviiJ-V0Da+dg^G1Kc38S%R z9Yfn>0)gi3+}v6=u76_-KUL!)U6gK`1rL&a(P$x!3G!23bmb6~?z{_ZBKd5{g%+E% z*NpHM7cqK{1u&KOxZ3XTRs-bIIsD$H^cTM0JK!Meic}RyX}!NVgpZinx0{6oa68l?t(nxz8(AEUhnWd!HzXpYIa2a0KMi1fV-LCvsu`p&#ij6`LxvXeaODEe zm)6p9OmRC&NV4x-Ws4DD69cTy5QEnrkuev70X9)i|*NkHdfhyem}o~!FvD-$*)Ht?ExV`>Ob1e*(X=0(s-wv{>L z%Q1^SO<#{sm(r=-q>VZS=XDquPzW^bBV>;L(0Fvg9tRtpTWev&#Qx<_gvh0ql>pky z3^d#;>_PJKcMnXEBIlR`OG6OIUZq-Q3#uvf95OCrR+u(A>1+ssft&u)GV-#7ukK_@ zupZLkJ>P|rT|EI}+7l`C&UQU5gG(3JbJoj=Tim=i&<1;t?z9RUm>@&Q+W`~XcJ=5s zKHXhT1}Fd}Bogy?gmMq4Reo#o%VNF~DvsPjT*E0f)|Dbaoz869eC zA}_rFO#aht454DTzhC6&*@2}+-Mh&1G?$7Afz04hoc81fyr87{ql2xkzg)kG>>s0}lIe$2%hz{qinWA2?v_8{V_|#z zMc7hQ%#AYGN~V~$z_Z{ueB-FjGvxTXAAUn1u=Gz%v2jyHni_FCj5K}lHI0#ybQl`! zCi_?1TfE%Hyn;=gYhSKj3`Go(rgztAPvM!dJ%y)Z<<}=`4wv?ulNj+eCh$y`OV^FP zQyJK(PMu>574?%Rv$O@!x6h9l3o1EhBW&zOo7YCm7iIe|qfZn=`=ucv;}qv7nzEggK{( zoBzMo|M&TuUCmCHxe_FGU39%IhEtZ!VaXDWb%`MVlZ7SwzV`N~xVwID?%T65JB?LP z$B@5uzB;u^&H&QQ#Ae@@XE``zshAn-ET)n`s1pZDvx|=IcD%^QpY62u>(+s;l-iZq zc(qww0tav~Pkze-B1XprtL(VkVfm(XJOY0h5hLN|zBOu$38?@#Ic(L3UG`6CI6|oGSszlZDMR-)POI6OS6apM|b-6 z2SBA{Wzer%ewtZ*s~oPBrd>w*>XNd!*?3cWC9c67e1M0ZJoyCZjMj&Z0Jo3TI;jC1 z$?3sT_e84t!yjgW2S~!UXHvF9gL}BV1%!8?@9Qb;cRMpwH>@bV1ICD>c2vL2SS{x~Z3Q7`G-b$mdQ5!Zxl35fM{ zS9_dHRM23K)}&$@H$FSY7CX`_^kp+~uR*;OxL>hC=G1(TQIzl4B)_YYz6TKugb7`w zi^&vD3U=z=L1%#T50<$W&)AonLov06uT4Fw7iC#ONq3a=>3kc%naq`Uy(i%9m9V-h ziTkXJam{f~Ng1`ZwNvlgNpC){WE%(BE0fJl|KM-92nhSA#ZPvxN}{tH|0L99fSkC) z*FREtBoE~!<~Z4w2YFPSAZ3M$L}E?|p9u3MFNP}XbVN{f7X7ti3I}qgMEs%h1kVvZ z=4pb^$F)GY30*urw<#|E`bh#wO*iRe;RRtR{K{npCw_d^w#65NgFUQMi`Rad7u1Qz znd_Lo35}!dcw|d`NmyWT2~v8mi4>tE*bih%BLJ1tx_r`q`Nqx-n7tM5?zXCyachA( zFLtU*+OgpNup_kOeJ%RW1!`39OYV(l50qD)XUH=hiQknLiv8eFlZw=2PJGU#sSdR| z8t;62RIhV@N~@e`*mHG99xQsQ(b@l0xIMgFTVqD{aWZ+#dSk!PV}I0(_GGBG8072b zl~(1pKag^+ldv>5@QL{egftApvVc+JDc|U>n{{vD_g!nMGRmdK5mN!s&%R_O0(WkM zQ$AG1sC@cky$rNx|bJYeKT6|X=lnaNW#csO=rm1ZISqk(@Cx@PF2Nh@{k&oW~T*r3Kd(l;03PmJ2D)k+H@GPpH zkU_iEF}ZV8>GPu9jyT;rYMkHB4To7BagOzG=Tqb=Gizcu#S6L*{G}$Q1V|8<2F+U> zF&$UHeLO)Z7!ifo$+$m>Tz22b z%c>Kt@abOWjm2UuufuT{aqrvTo^Nv5KDNH>c$VtO=3}fwNQTm9b|&Y8@4X5cr+zst z9};G2f^0T9QR46GxGu|x5MGYfy)(C)p<4N~WZnV&C;oNu%$=OY9WIQ;?I3Zv>`cSQ zKF70nG+Oip5G&=qS>JGYSpju{E$Gvw+*av#;OBzG%uW(B+IQ!%CemRwqR7uNLthK} z{axqy+U_MqUsx|RNpHPB$7G^?Nt z;nx@z8hQS8mQUXli(skgZY-nbb(YWl6y!<&cOry_jSfda1yl{=OC*du=|;ad1%M?7 z6ij~aK2GZug9m51ilP>L)toO?~B~+!6AfX33`xc({w+|FcU|{PT2C&lA%RorP zQMlAA#wgKxYe9tyr>3IdF*vi3&G2da)~`>*`o4^$+n!Vvt(VMhB$EQ>e55~PHo2c4CpAci;9i1aOW*f;%kRs`m{D(4kBPMw zE-|zF;x=5RI6zXbXIGG$MwpVfXYijqRBu0D=DE+8q$*F7=3eqZ>eO3Zq5{I6W{&=Z zTngx_-)nGNrw`e^|CU-b8a&eT?cf?BzcV+FI`6l)0-s?i@2*KVh9)=XX~4 z^lX6ta;WsV0{&O}e>fV!2rJLDAKM&4=t1dOaUc|8`WsBE(gQ1~+Fgrw*S@%1Q=L3s z`PE86*T;OAuq!5skLE3b#PGmoBwLxp>&qM*LZ{!sJ=YZo^-m5>_2;%|)QNO|I_JwZ z&41T3gurHT1&<-Ran37Dby@Y!Y5msL^(<8@uy;H^`n9^!4|Q!I*yvsO%2yT`mEn1i2(JYSrdc`wZ~c$uccd8hqo z(NC!b_lJ$!@12*1nuto7Yb(r^3W$gQCwut_r~Sd-rC(|FZdX49u8v)XdAT6AuwyzJ z6MH=y9WERkia;1luMA?Tv|?8TGOo0?=6Wp1wg}N;Lkevuq+u}U2XN>WFfw7_m+5CX z4XiOn+?T{60}WVaAC~P6eilI_6Jn9&l2HHq8fqWr`n`qPdx5Rq|KD?Y{Pg1s{n)Q1 ziyzkeE86iGAes4Hr5Omf*o`f_1O&_xK>p3D7^4X2*kxKzg)SyVPIDG;W24M|32EAz z&kw~d+RJd7se2{>igcO<F}6Xs|!8<$U|iBrGVCu2ur-nFat*##`)Ux9 zA%GYj)*l&wZxdH*fp1SXewEd4Yh7dK-Ny&u_@73v&9c)*1L;356-0k&sQMDy-u*xv z?UrB{lZ6jY2)fv(y^-P5ISm(8`_&7!{eP9&6aAMhm~;l>Q0l7-riuKH9}fheo)d0c zHYD;2j9RH&aH?)*H;#SwAKG%A95`4 z{CgSC09#a$>)#PU49D%5Aa`Mv0XFtPHfQRg79P0Or|)L*=8ca`e-LnP3P7$Ce$0N6 z5(iCv8=R@3+;YJ4YQ6txp`;FgZj5*A6gr3h*j*$ottfC7-{DN)M&T@;6(!C}HPJul zvw(sc0Gycy3m*rEG!;DBJp{^dAGt6Y9vEF!ALh8pP5VsnNve zdAJZa{4i=I^N@E*(t=G#D=`Y)IgB5Q8Na%f#NZg`E?(uRU0-itJ`$Oq^yX{V0f038 zdr=>It!{?kuJ@(i$AY82#pUCIPC94P=I$l-hIEM;-~buTJM#| zlulveflO1*#_ev)qQgH8w%~7?hgcxuD-YLEm{ql`5rU7zfI0>(oIJxP1yPF z9YhT6p*$^|*drM-?h=TYUYlU7M|)F1+NX)!R2Q{}Y*@;n}S_mRYtRHYqU-#$9s_g6uV{D2A zoqaMc=-q(m7Wkg_7FNyHGkh-A?^P4;UoNS9Nn3e3UW*NO0%fIl@11KKDgk8%iTtbyvg!tAKQbPw9L4u?aDNO&HZ+LHw&u>7h^Vq4yQj%LG0eG z_iuOx1_&7WJOBK{nNg?Xc>f&?mL5spu#Ey-ANEI5$t8xQ2AO@g^&>2ei>gcUJ&3M$ zCl$xSjnmtP$ftiBiUwzjfBUG*@lEd^ev)OcuaPbPtt_j17Q(p3f_1&8n(CV8>^X^< zWYPW23T~B>aT9|2g|*g0Q1OZ?RUqMg@z%5dIfuXbpJA1zx@>-=((Wq6#flT#S(7O z#?PWMsi;#H`(6;*l4+c7z!O!xJA9a)Rs$VlntSB(Fa#%=a>_NhAC^7L6%pKb>z4AJ zigDlT|Gz~n+|c_Rod zck%~26=z$SbSzW}HRE1Ad$Yd29Xj1fP#-lD1Zyd?O__5}n8iXX8Nn~!Kirz>KR`U( zxV2?d=tSYLR`v#ntBZfH7(^Pn3zO227!$t_6(osb#<#3QcE5!tr!!>c+iwA+OV) z&xvSPOKq=SKNgLALd*KEY-AMUaDxLCEi@F1q7}I8^wHZT4wD0<4X?_Z6?? z7_$EH4M;;!l*rUu94`L#O9;Xr9OzRwEzl)vetZquHF6ivpz6IBJe8^w9++5m)l1O( zRj?aC^a3=QI#Mq0HvvS8-a}zXl&`NX(=e{lM_e zzL0L~r-s-lO6+kKsBDahDBG|CJnnLR3F1giHS?E_Z~nG&jq1Z8V4ICQQZD(z6R{|G z*n09rn1-5N6}OH^%6!+J7drZTm0RpFSCJ-#m4x)t?5OyFP3z%Bo9q|UY% zD{1wFL!e=7jXk z%?|!Hgfe}&dt%u`rn0fdlIsCt3F$v(G3kSzhh=D^pci|+gq@#OvbJNlwy=;4&E-;h zptPd~IIepm$TQw*&EUr{UKpi@zboD)#iZ+7<__iyCiLy^j{Sv_689{7WyOQ>c*dig zB;(|kbeVqXQ)9>g3Qw1Lx%fwW-wcl7pfl&=I%v+HDdjXD0v%WoIix=?cy7PMLJo1#WlT?Qhq|I9X0b z6uxl2KD~hZa{cmfwH+79t=E0jkt10RFmhr_oHbxMJ@jtea9sE>Wo{)xh&704TKDBx zJ5{@2yt2lZWT{Wzr*^Fi?{CBO=lk84BA3+pCsHTierx|G15AE9U!A{1%NuKbU6FB& zTK{N`bt8*Xl|?dWiVG;(F>z`hIHI1K+Qc(vfi_)Soh^rx9r$Xn;Cmu2Foy6zc^8{h zV@F!5mD4gs?!fJD&#HcVwjU3KW4-|Fvlh!gx#H)T5z5KKP|MXSSOY&Rcqw@8(k8r# zo(48D_6oCr^MB6+u^i`tRsh-4CXI&8fA<0aY%(10K`j))K$ly4;KTkL8z%iz&o-TTw~nvdkkER_cPm0o z@*zWgI^P%nJaRoqSfy`f0r!dh#*nPE2CYMH5=A-ctlLK~RR0;;rz9?@4Le82-%3QY zFULiylHFmX`2G7PP_2?>%=Q3(b&Xv$zQe}jlQ#ZX1R|g$01{GWwH>-!u3djG z^3}MPyI@!5qyhKNuzj{s8mqD-@k)MjHy-)|HB;wgA(SEPROYhR|2*)4@nA+!q(;b^ zaRip9w29&X-yGYTgoL5B>T zCmSb+@(+EdI1JCLIgzc;?P+Ph6##$4;v9X6hA%w6sN zv?!~!*Ioif$>JWhQ2qLK1e8M51Cjcm584nOzIl`fiN$V%Hj`Pc{Z2+nR$g&1xlld0{ndcpcvgD-tyXSa=VM}iPEVQpZ}?|ruZv&lh$;5SM3Uef5`MM@Io zWkXok-?9>x;6Y8XU{n%q(W|o2_pHY@A+MR#y9gCJe3c$^wRz1&cJ^qNZ!_c8`*lMYaejvopIU-Glo_c6H$cqL# z?kQppeqAOy9u$27Nd=CYL=5yQ|iVB6O`>y^!5a%*cw3GMTL4BRXx%=6OG$LYQ!$i=OHi zV88~)e^c3diIi9=bIoh2Y=P-+P|WWR5DlkBD|B8mZi^(5Y`eACvD|j?;5F1H1QQ{p zrSjutSj3$9jc!sa;-U9sy%plLm@qq=F1)wwD_5cUuyU2`#soM@&X?(O{n-v^?%2;5 zOyL#oNPoud9Ky(gwQkkbYfJhr79?dJz(uN%MuHr>GajR4O#=6yQ#$uTbf3P?fCZ`g z9uJ2;-I;IQHEr@hygKy)%9VFw4$Q~G0Z}6--&)~{MSj^x|KhqDC?D*#M)@`iP>Kez zpFk(u@ER8d;iVEqjJ<7RQMxnD`MD!=;mS`8XNI>rDz|*NLF*y;C<+9_q-s%@ldAhT zn^JU}OhjC1Rj>;9*=S3+viJO5FjR5LqS3FL`4vAir|sMEcCQS7thzExDv|IFW27ohSea z+&?5~DBZclK=TH3yzqUY9f&7yU3eM!JU}z_e%_dX^e8V;zp_f!MddO>#A{bBx-mWJ zZJ^dyU;=i2_~#%Kv)ac3t_{or|JutL6<@(k&i7o2=g-5{7%BG!g7Zgn*7HVhT_a}3 zhJC$94vk684!@EkVL^F#_ zx{MmY_iN3*@B2G3hYrjm>I2@buPa7=>3|thrf}9B<`tAlq3jP(SWH=QdZ6-{r3uQ- zs|l#+X@kw7b^CrFW-4k{ih9rqr&WN!EugEW=AldW950K3ZPChjZWOkV>R%zJ>^`fK zYofBa4}z)%X#ib9NstnwQxus)M zRWqWNFnOCQiBp;_{N_O(yM}CB0}^9M>+37Jx&d*|vbeq5<{Zhn#*wavvwP%clP}b3 zQ@v^4_@viV}4i7iXtuNKHO`%tN#u9G}wncVr#1VL*sK*OvTEU%nYjLxhDzk0m zp5FuV`zB*{G(h09v7VA=gA3@bPoi0Zg`;LkC!b0)JAYShNaXT(K)M?TR$mV&`@z`V z^bGyQc!X&f`tZ4O<2s~~{lPzYh^40QFxsn(7UMqHYJJN?WA;<`2thSt{OBpgUe`Yv zcJ@w_B(*%R=~&~&@LXH`xhN_crj;F_I6Y8vh4~+%Y(?78V#EVT@zCdk^GsYv$6fJn zwWH7fkjH~84@f|Mb`w8i2NvB6A0j2kb(<>8 zctWRIye@t7HLo_CYDo2%h#wvN(;QYc+&@DDcV0E!e?VF5JCZ+w{%I+D!AGsz;3~B@ zia05KGa!m+ZsCU(HyL|9hvPg+K08GgCva(K$!a5L`(n2-RA^|9{8rlhu}$_@|8_;% z?$V{RQz<{QJZhZ7`#w*qlyPNrZ$}T|NIxqlrGfGh3F5anWnlf}P3zTpt6yu7q~%Ek zuHNfSLTTc&52t#x#+^eH50`>Y9tct=7AGjJx2@-4mMi)tJuKbExZV|4Ph9LKNGL}4 zu@2E~)R-}dO3!%IMC0~Yhu{IK#_uhT3Y?x^-Vif2c{J>MvOy>+)S^pl;tcyN5?)Ei z?H56HnKpvjDO(%&{>VN7C~ObdbmS6bS?;@OXp$<{`@Jo)o#4dGl~O*DjU$m!UU0fv zpw)Kmj8kMF86@tN(W-fx_PCR$2%7foqhCNyU}0s06m4yE_~;h>B4Y+=lD zqf+%!E5#U1bZ<(<rkn>w{B3QGCfNn(Ltanj`?IpL2)R1pRf7qm&i~0MRXO=v;XYXg)3HZSp`lGSu z7!@g%5G~aS!+&x@(aXbvTuYDV-&)>J6)(IT=u!K?Tt;-7sI6&8?GGX~JxCJIwlGc< z)+GCbvSDCS-VnHV$?-*F7=?V8TV<@0Dj~%Z{1scI{fh7EhliQR=Fz%C%|A9GsPgfwRz5_x-Ci5tP&B%sE}BErMUL@9BRuTt=lJV9QzkKR@O3WQXWUTL$K$UE@dhcKWu?lXg7Nf`FY z3{CXX>n){4P(nolv2|s$@p?@v&5)9kOuq>=Xyq$BJxTG%ARh=~J}c(gyz-q?ZR_@0 z3vk=5bxre9N(;RGG0V~<_W6jgrR@rr)J(2Xj}p+@;ajAQLIZF2 zlAj`Dvo{xOTQ>Ln{2Llq>j!tBnEItr<#6P0*O_6j)L=P0z49_=BMZd4%)gK8`DaA- z^FVZZou!xhBHj}E)h_vwgksB-hUyoOdrQc^NXp~A0-I3GuU}s|mD8#u9kspd%~lpo zfMRd0f7*Aq9Gh63ck6ocKj2u3g_N>WTB{%Q!^{&-JG+UYUR1h=xpz(4I#T=L$k9P% zT3AXugJ`k>!+teS3wB1wo+oqq1Np_hE-jVW0%I@gIr&FGV`*jx;+M~j1rS;dX7m`j z&=`)ohkN+TZATmgOO@qcC~>D$=U1d z0xDRNYsEG3H;^Rc%(CPNKi082%w6i}z^^0VUj7ZX4}fkeWw2FZi(-a?VWTwAZYR>` zIX;u2TK)l327Y+p%j`$!wzMpE`3Xw9?VC+0hBBymc|t-+ze*0CTNWJ{r5PmcF1&t{ zgNljtgnA)UG5vJiw5P?|xhZ|>FA?6u!Nq{aEP&)Uj?&c{e8h;Ee*8;r`I!vj>ji6u z!T~qpNgJ{X(c3AjQ4nE*(5g0sgh1(RC9%4SqSsM3o3!lWL-ope=%^QXyN`iKwAk#)rP*+FY3HmdKl?#G{3K7T*PClpWPRM|&d zXvwE!7YeM>(JX!^CW!Jj zqxe(;a1wJ@hxEQk{Xq^4n8O(Ihepg}{J%9Ha^!R|9wZpwmpNrI88;RfIIxY6fW|#H;n0s_o zAd#n`A_1LsP2DA-Rrq1_huZ;fH81F67Li7nDpV3V`mv!ho388!sgtF=CXBy-{dHQI zrfhENCF_WpxFE0p7KD-Nl+=iNEhXF_4lj~#yMxiK5Xt*6x&50hS+cWWvf+WI#9&47 zc}CsR=eTE!U0+o=9E4BEt}M#bzQ)2pwe<}hGEIy0h-F%W+Ig&$H|2$G8`(PIupG+EdQhzof@<#FK!fhWLYb+k__lqL9e zM*$W>zjVWy-$RL1EfxyFa%YxJzS~vWAfw-yPfZw`e&Vke1{D5nj3UYJx2sN)@%>*1 zPM7rNy*ytBe;J;xo?VmwmxTrSybKn~;?BgvTsAVb5f8KAJDP(w`(e(L)9`qDy6q2N zZds2lZhCR1^qBgGpVdH=`9kg=mr45K{{a$pZdXX%nRA4G=g>iea()(`gCJL=)RkV$ z@pSMg+BkHFxCWRadn35>yeu(w<8Xk~Q@`{i;+ro}C|;JjusI#G*?jZI-;M{&({5UM z?iIif8Ei_fp5QKUajg}0+(9-9HC@?GF1$71e_7QkuP9<>!)=Sw0@RT7ip$N4+hPKC zxv1^LRWj-JV(F}&D4xpX40?%D%sH^D^3_nWKI^)$wpu)~Q81&*z2T*^e}B;Cj~pM- z$i8pq+YUx9xY~Z@_7!+>CA5MYKXRRZf5^_gp^R`~{*}As^`%!@S(?=IS642k?b@7p zim`$@1HEQR!gkEOAD~4$9ugD&y3NyX`8}e%cP+wE1}-lZRZAsJ{Cz63GoI0&02Bce zNOFkR5EKDlE3S9&JmvXBk}20?pWNSfq6TS>`C3Uk-O=^UX<87as8P^17cC>lC@&6p$-l?nmqhGmE1T;XA+9C6$G7 zK}ULpYvlC};m;bXOV8Hjq0fPSo`<}=XoFXBo*LUnK*IcmPcv3bH$M-z>ZHt-((8D) zyO7V2sGuEw2YS!C`PD${(pJkIS$By5f65mH94)4AC(r|a93OOABrRX?H0pu=S@Zd) z-@6>!yYm8cIC7^?R38&~{VGA!TW7HyY}6>0!M&36@aBH!vx9dGywG(?prb_&c=?Q$ z5Jw4B%i2CSrbt6YNRy?jfbeMJ%E_UOJ|_5=@I}micL4j+1JVo7N)E~?7A0~HMFMhI z!>75tbo%^?(-K8vInXh z_*VnUceP6TTrX7vR%eLxe*d-`AHxXq!14O!>Vv3Pv(2mh#5b_gKvu3P$>H`%8L_XEFJ z@WEtxYVDj_m;<^UFn)n$OSRNQ*=T=*K*(sx#_oKLm!iqC48cYTRO5V2P}lx%gMG3o zzr6S-_(*Y#11>lPQ%yJZz}c<;>779vju_?^8;(7PvtNDoevgy=vcRoR97I-RcJMIF zX&cWtSC%Z>p<)*Ij{m{rQ?PDn*A*EJ)zRYL`R^1$5GR{@v`V9Hq~ki0#gyq5AU*Y6 zLo&-BG!?)i+N{#yImFXtHB}@u!ckjI!MBiGY78s8RZJ_c=DLH}6Ogj>?auDJzj$B7 zgk5#GKI*n?ESw-THD(nbpTxYq;KLufzTk7*c?m?oFCBCZ5i^2xXWxd@wsX+?*ZXV<&)Itj1zzn}b^yOV9WfUKD?vE{q!6}kgq%V%^URTSw?FkwK;bAGp~JPyc}A3vtfH^EaDipH~ajwUn0S{ zY4b5kA|h&?gHU9Cw-0N(U!+?d*fAC1z5JMa9*7Y#VpvFDz+P;$PghMjoSf19 zgd^x9*!I#;ai(Da)YtLTvdC)vS0DMgO7ixd_hhnlc`G4c;RxGF)ufyz zL%?Quz1oaVJWP2DwBU4vAV5Uq;fC-)NBeXSQP1|~gK`0w&ikY9<#hO1fE$Jv0f-c5 zsw20g`waTLWdTH{?lEmI2%GjI9#CA20CUgJ4!%GS)(J&pna|y3qU#&c zi+K$>owvJR5Po9#MAN&OT5^1^5lgJUW#x2JD4!J?av|tH%DziPh3*-0B*tqgb6_!$ zxaSoE3=h3&gEzN0ec070w`o|vwuEmA>(b$4!W_?h&OpqP=O>Q$<5Zb%l@@6qWfQw%U- z1q`QI*T#gvQOm}brmQTZx|51#VYp#5Ta(2NiJe-kLKIS65NitCoKA zHHP*U-GVRyv8{>T20oCiCo>}(6U+$oHttD(2`E^EA1Z%CBgjpoy|pbdjPPZRO?3md zp>Sg(#R1WH3PJJrE_wihz*$qCEbbx?0D{+|BzDm~!@m&FUd6w>1LePvx zvZ#6Og@B!kXAa57I%$vw9Z>rL;pkL=g}-NTnTRijlHq`%FB;)n!b^WYok|-!HNILx z(CLdB7h^SEwuSSvyNLx`lVC68YBfVEHyI0eIgYt6VGIPH9+s{5`!lStTjV#rNW)4u zD$=~KUum#>_>2o5ds?}H34U3rN;G|R?+&oL>~EzW+HKea-ywk4CR=8KCrDksns+RI zwV%c-B}@HxC6L30;3tvV3w^CAEi0g_c)6%J*MOlNId~z6wR6;xk3Saaken12*Pbv` z_NUmx#1v1j`hhZBtRu8@xY&@t){{JYSk;g&Y_^SMf+M&1GYl}>qN79 z2NcKCW4(wmBr^5AmoY#+9`s9c=~>j1=k3l-y6C#~O}8oXpGb}1*g2xPEzrCso?cA6 zi00=%E+h}hBQ_{t%v;S2RXiq?Hu#f$@$j|FteTWqN+W2u5`BA98r=8 z%mK8nSBddn=8;98JPcaMwR<5_Jf^z%pBWh)b947UIU!V*`*%bIm+(hnv_$+7^g+N7 z4nWiDy4E0;r$Bj1yR+EjU%MvqfC+J}v^l=DXd(1G`Tc_lCT~az8H42I8i~zD%N7tx+G<24%gr{P@@JlKN3C%>FNTm*TBo#?qe% zSJSVXSrT>>vD|)141esx4Mn0yV^KgcdW_R($=XUASMm@z<2oI!3@o>lxQ1$NchY8f zA~f%`KQKH5VczeWTEWVQkEOs1)QOpEPFkv-$76~vH~m=#gD+w#Y#XAyEP+=mvz7Um z@Bx#l_Mc{do$BKy&Iyy4uD}_wI1Lp$b}+E8xzREs^TvW5j1DmCf8OLEZd~;^j(Y=e zzJTS8Snt=vuA5)AIhY*O6VKu&w{_QKW0mcMFzesJ|D#ya`w+68)bfZ9Z zLV)3Leygo7Jt_*DcVp?fD;d(u2%r|zE(HiTc)6GB0p%0@Uq#0&GkO7ae=K+1=sWT?f2XNRC5wS5f3m$WNzu@hoL z&Wz^H!hsiRi=E+z?obE{dQx%XaM-DJ33&eO^tn2dAHefuxLbGp6E8Tkk z`EXz&_ITPey~Ugr)T=&=&I=V~Ti(*r)9hPQN zs|R~jubHnggKD#PVMlen9obnaUDC-?cAN)KGHL;vat)e;ybD{o6Jx-7!TLjh!fZ#3 zlM!l~z#!;%?C<7GxZYEtTeqSbgmQ6TSThppwV%j;_iPncjw>uxrSH6Blb>nWdqpUb zq;ie3sC<1~HAV*T(`0_#-YdVT4g&iRU$f^Wel9)8>s8q;!{*oTfm_RUfDW?9$Uo`w z5W^~u_6T2<|?$kS1&}Ve$KO@U!9HVN(jde!wgp2_?B%ZMmKEg5r-X zK8CpvZw=afw%QV~oScbY5z+prD5zvMPYFS%x<+`r+(H}i+XGi#1KOq@v#|jQgq`7{qY3vk`Jh_&V{dy zG|eoa9Z6m~YkPkt2Lm4q`|V?=IK`z>{Kiav%4(@Pn+_*C`l9@@E}|(Y@PCOj4$|(3#6}s;Dc~$8=#ky zxv5-oUT&=l>`@CetSlV}e%H&MXbiAfjF`!znx)l!cwu;G6!#-9DM&(}KIurwYpWG5 zWyqji5Sn(q(%dL-U;Uh}qSp~;2LG|-M&==yiZE_dbrhdD$8bs}wtr}S*^X;E?p8A) zbhF)fa9l_&yPWys`T1^%0omBYRvD7}u#xS6Uz3lF$$oYHa7S6OrnU(VPPj3fg98fR zI+BVMM{y>(E%wXL&-q@pn^@E{0+B`xy4wq2a2{)u??tDU6=rSxN2Ju`y_apqrJU>p zUYKhadVaSmKw4`L5G@Yc@Q(Dy|Jt4C{hIo~xwI0SS%g4IE zr>@r>bEwwfrZ;mS%rpgx#Av;(XzkAeN4kz5{0Z*rHFbCxlys)Xd)`Ayqq9Jf zdPC1z3vAxHB}R1_P7U?67Uf+K(o9U=lm%s1>72Z@>G}Q-fVM2hh0N7E*HXvgg<o0mp(2n~fAVR4I+ER03Uo31SynA98YT$6 z$-md-TWFpC?2n{)aujm4wbpmc>j5ct(!ZCh&)!3x?3|)((X@FM2(K0zJo*g;S=2i3 zOwR=EP90~&`AyLfk_)ar*iv^fajq?JJq(Nr_MPWBRU^$0-)?fO zbS!Z@!ab{l69;75*e_NJLL3PVN%U;=_T(2p7f(F>*g$T&ze1l@VUfq;{S_12sqRr` z?n<&=J9>FEY~ic9a0I4th|25j<=EHFIY1i?f9qnwbAvx?LEj7>P0(wlg7-)8MkvgL zj99}ON!Yzux^WVA=sY&^)hX)#wD;csZ2kZLe^p;qtxfH%O3iB32tlc;QmbZbtD^Qu zh*@g16jjs=MQyc8>`^O-StCY8W5r$(v-q5NzMrr6Pv1Y_d%3(Xm;B%&$vG#F^El_+ zANTw1e!X@19!RWa$#OK;NR22A93=xu)0m(%sj<3Jyyp0|h*$-RXNG?ug)*K za9qmZpsD33 zZwH41GHpJ>LN5~F*O-Y7V6RCr24p7DHgWO4A^AB`)>=}cbY9+>n5muxo?R2L8s?h8NWK-3FL<@>1YmnOW~_yj<#Vn~`FnYJa>gzwv$u zSHmo`Y-GjL25!A+m+4Wb+RAdAZ4g;{g_eJqpVZU;4rwwtJVxBSm>PJmvNhY|SEB4S zgl#h8hsA8aH-7Mp`teS|&(3K~1RZdzAK2xH;=ldrvCUA?qaLon0bCv>26p`BP0~yn zwRinYa&=RRts)QtylZod4{k)-jqk|(n$LtkrD_V2JjfxqEWcLAr!OGjk=b}O&(eNN zLjoYFNj{2eva85FkljWf#UC`t_bH2S;=%gro!^`q=5xU-c0f~9&#*REf&V&CxAR5} z++lrfpel%Rsa%YU#m~Bw`WLenuG)Zg>=@K(A55CytBT6GHecRat~aIbo1+=19NZMu z=-C}Hiq{?x@V`Bw)aEo2&H?{^{<`PfWdGqm3LsOr-Efn!;k!i=d$7u1McQ018a=+1 z=Odn6s;VxHF(1grQuPiF1t;(O4d0Ctqpm6H{k(ol;1JN_u9O!L`$_k7Z>g@2^K?jO zOqd#TR`zzwe_0$O5#j?>CzAKIJwhR;em8Faovqv2{3i4xpoDDoBd_|Oo`J}sXD=~P zh@|DdB7p|rcyk(`c>Ucw8l+{XzoI7C8whkl=P+>*pZ)?IZ(;hWJF>eOuOSOuyMA{7 zsFfQ$Ol{2ka61`$kZoR9a`nfCEd@B*A>4?ppi$rb(*}*SsC;Bb$0#&q5ENt(Gq?Lj4lOFb8~*Y`l9=0c z*8?X^xsA~9PGT-oJRl#ceEh9(w;|~>(B@uh!U$S1J3WiXl?m9zwtQL6NH}}-bcZnT z+(-=-ZLCThT(e82R!sd{1vz%j4%n=#GOl#54ByS}R|+*DvwjR$ZFhUh)Pn|XfGWuN zhp-{@_+~%m(NZ*?i^b7O&(`NF>K)3$=vTIfL=RMT?czwiCQJ~Ez_D`9}={p)r;qu6wg?|HnOZ+xQ6eGC?Ksw=c8 z>)>HR4kK;zZa?L~F4K)!p0@c#?bU?BL>>cG7_WOao}u4JaLQtBojcsNd}9j+dE2Wt zb`8Ge&DoX%+^)Wesa37DKN797GX5n zsvA#Ka3!tP+A$91?dv~MnwD+*YX1QZ2Sa(x>~N>Uoj;1#L^O$tsmI369t)k1bjei( zZwWTWhJ^&>YtPlQgzeO4pL}NiJS6M4Uahaxe-CY2qFt{{oM=W4uMHYu+CK_c-D<6> zfK*T@AdIhDns+YBgSCh3vi3Ft@kjH|S2E(8=@H9&q z*AN(!9CvEzyVvj}D*=mPDzh9ogq&JUabbP!@P)X&$+U8dp0N8?@UfL9=^Q4Z} zLYSwb=GpG=pr?w^-eM5D3xlZqXj+N;Pb_j;|JmUASc^v4X|wD14LCmFbP#to2x)>g z&jtl-ijSB0Er$shI`53$z@bb0Hp5)YO4A6Y9?Qj;vi+p(PoxbiA8)739<%$lWMr9w zB8(3YaDk~9PkR-K9CMi;YhAx=X8>iDBI|>@#CCp2OD!5j_@r{EV4mU`aCCll+y@o) zm|9>z0i_#4J`)%OIEwoM`rE^)#RFi8Ysp7Qu>i>HhDe@iLta^t6YRmwm}2mUXShf? zZcadcG<{8GE*4r&SX0Kj1De@K!%P+`KAVRP z`0=%a1|+=DwS%Kh+)5LB zTleiz;U2u_yT8vHQj=UX*BChse80`qF6GXi7IWpHxuQsB(H5B};*RN8W^y*pwgyhU z`a!ZZ=1g)-=c{2Y#%9uMb*l`V1{{Cn{e0`z_kMVu^Ecs!!mS_M1UL&wLrX~kAy&Ze z)=+w(u|pVFZfV5tLtnELPw+wJS;JGR%5)3a_Ga(=R5Y~|Hi z#Fri630)f@bu7N1r&x(S&Be34E$}CL7OAgifm;Vuh8{BO2{LoT-?rcTfdZ(_G*5Wt zBg0?RA)7T8zpt`Wt40IeDl&1f4_BLvhx`XWLwj86zchlB7W3bbb;yUQWrn{PBYYyq z8+8p}pi`1t4puhoZ*E=>Rv)NFJJ!ahd-iW!+oI>G(@nziiK%zd*GvSd?*009%D z-j6s_O^?zh^EeV!=?5XVK0@uALL+$D=&oaykQPk{*2PbUL)!vn_%phjpbW*xR3CWw zJBPacVcZ3i#Rr2!TD+8P4q6NJidOidr>b4KiBA*{4C*I@(mKs{kG5d4Hr*GaGmzBJ;Ol*}dM(KlRy|VCd$wE;TvD^v}X@AXp)Pf&757 zoNgf)kILg3-+*-teE>F&Exh0Pq|(8B&>z!OUDqfcJ0j{^566&^EoYI%k;)l}@|8Yd(MkPzvAFjCd8w=6qkm2BaUT@-33 zMO~+!Y$$2%p4tS`{Y&OSn1Jd!Q#ilLfy7$nJ!r<_1dM}bj{mj2W{X{l4xFD`5{*5Y z7mn@jf1y}q>uYn8Ec0ROCa`E^hLBvl(b494@Jeb5@=;~{cg!}q)Xo9v&Dj&KT8um7t{4@Qp?wzOUm|7dSh@nx=*B-@%(f z$FH2#%MfG}y-g5PyNlu<>rY478lpI5PPm@6wOW!W*cfJ#Mr^L!-@20;l(wJ0r?KKp8igQ@UuDK8pqY*&KO!f9+CY zlENq{jLL(l*AMgH_W_!QsM>Mfn0&ifv z^=oMrc|Z_Mb`$sP>hA4i^o%f*^c%?E0Y_#$>xr0%MWfz^=rm;F`!cg?6Vl8-JCUsd z&`RB$%v}Y^BAdrcb5-g43|_CU!^_?vea?BaeuwR5cvBt(ZYkx5sp(4AMNuc)7i-=* z&ft}1_;wdc%qAejfRR}ARfA1;>mJ>Nj-JJCd1q9|cLvr@9iP!G(hmlX^x2i?tna$^uP zViHrFK(fEF72kFI*_-&&675=BzlggIdV%VH%PjS)EQdUoSYcfd8Cx70ho$ohl%m>8 zes6cfN=G;$9L1<%s_9buT7#suVBReGLUu$`b8$$iVB~0oZ>wfJ@9p{yU^NejcM>E_ zHRNup4(mjTNyVsAc}x#HO2MN{R_C@8flZ3H3&${MzADvtqUo0|rY2{KV;m!~u8$%B zs+Zh8s`z`hO_$28hIDZ}Z<7FmP`$AW?kEA|2AJeC@oUE}$gUO?(t zKO741NyrS;j^*`y_ ztEBP1^3&@na>r3*9&DWoAEFOmOmC`U2r~g;&<#g%+y;PjK`i+#+lG6?mvIeLfO0Hr zo7`xwreEuQ^WfThR7+6J47u(rBZ$IYHD{~IR?QEEZ-DaPl?+^^*K*T#zc+7rMe5D1 zX&NryyubTNP$p2fOY2E8f=7X2C3){vd2@?k2_;eWWuY3e)*p?O(iU-aejm$=tBqY$ zXkJ2eAa6D7I~U~2-iFUmw?YZiRKWGkJr~#hHedPI;b@Kazzt zi|6IAwiJveR(d>HZrASZRG3qh_4eZWV}q=+4~IIIVSPuRo{ZCoCnfUa7m+PJI4J&T zHb$G+NrqbW)~r}5caGfdb_bCJP5epfx1g-)_Ulb#3y|e_HlVGOBU4rJ8)0THl%KQW z?Vs?0lhWNj46`%5aN{b!i_1&qft<%6D8{pHK_K+D4pKB?pdutR%w=?vwglvS9(fM#w6dT=XH0My2{qyU9i> zn3j?8Qm?-e+_*E(TAxsyEoi$QxxDO>ChvS?d$PH}PkhALW}xk%h7V zy~hZB89_R0UAk!_WgDR8)B~v7=)s1gDn*hov$dE2s8F4=Rc(m#6iCTdr>}QFy7!bs-$8ppWvz9E%|b^>xC6vMAE# zS17*Zs=l@IK$(Jv@?PBC;pgcztPQU@Ys5}^@+xyTie`U+TwXT+4bznu8)>utb@E{I zx3~9PtmOEgyoCT8ZsRq=2))u!vYrEXQ zuabPRX;A+kB@qjA?b^@p_vKJ7BI?C*?2t(v+PBdMuAHhS-H}kuH-fz-TpFY8h@l(< zlqRSwN;hW2KOoB<$I-CKstUG@QK!9*2M9b8Kqt+X=A8db2{Xg##NR`yE8R7z-q%vS z>bvL`-N1TMQ`n7sbtE03{Fy$P6X=H$#}FQ*WNo^&itRC&adI@nJc)=?B;M_t3s)~u{>oJ!#y1coaO59P7E_p%mF<15~Lf zW#AQYN6&uVCw;TGa0%})a8-tJa?u$m1$rth6+}4eBnW=@*Z{ZkBzQ?}z|&pitoSUEOpGP3iZ(u1N7QJ{Sh{EGFl0`iY70 zIyu+@@zFZVy`1+8X>WB0hVt z4Z*RXapUOTx2_?obIjtq?>{8-3L<)4%qR0qW6_hWdNXZJt?oC0Um_#@U5?-2(&k!o zPiTv_LfzA59Vuanp)mUhRKDsEb2caL{IK))uTww~CcIdVoXxI!z4wTCqThgA0MJB|zpc5%UM%_= z5WltoB;OUypT9yyA4opJrAa>e)(4&HQqd_gbxiRzkUgW>-vAT``&G=WzN0pVScyWX zQG>vAE(5)!hi0A__g-^XGsx7p`Gls7#uF>q4JnGzc4AgOZrV+!d-cvM6KJ}jk37C_ za-l1ltvGWHT_)h#MA%PleBPc$V4~hCw_$KSA@Y5Ew3u zlitmqK(|vRV&oJ#y?m@fLICjLDH(i!4{8985W7)FCSVxAX-M=4kSQOpFfl(nOZ8ll z*^x5Y=NzdtE8Eh@bkkJwNQFNi=TZOMugpw{Qdgu&;fok5HvLTh5@J5oXsupp}x zsxm&|BHy#Wy)+e#Pf893>%WwXI5w2*awa{Wttp*>Xd34)&cv_hcuoZ7Yr)O!T1-lj z2WnHM4H3>2-vNm{aJz#)6AC*rxc){T&w4m<=hO1g1s*%q$b)XwI0Cia7;)rtiXV(O z_GvtZqsJ*0D=o?43?E{KNQi>2I_Sn!>ZupJKKuaFP$~4J3Z7ozR*=k*x_#){43jw8 zaCI%&WU^?8$+2nq;qO4m;0JjDJjfzF+nk3vs`#RSE9Vo}TFr$(Ex5PXcQL=E$;5%1XoqI9X>}z29>)kO z=m_QLxEe~N%+ztBMVmR{FA2|$)h5Nh;T=gU2tLlyK$f)x1l7NSFTNIeF*@;C-OA~T zbPTEk4TwPiPc81`WrM|rPYrw;JUN^f)+LvtuGf;KH{Tkah6Tw=nxMI^3uKNUb%b_o zuvTiF1MR6B3U$?Hwf-Mx8`wA80x7_&RuRU(Px!_S3xn9!}vqYK2dAL z+u4#>@A7H+TGDi&JKXZ5u3dHiNAk|us((*qCOUqgOtfQs{>KAgzE|Yk%co1$=GPf* zMQT07AXv4&DoP)&N_+&`N7Wu_1^a0v&Q@&ejH8faQBX@>4V*inLdPyP-40Ih(lv0wKHJaK%;W1Ro*h@Rn~`{4YQxZ}L-w|;XHm*Av+?A5jVMq+8KCFXo;8!! z6qbJ_zELL2U8JFWvT}xZ;>ygN?XL=+fHXphwFuDGH;Rf7p*KDo42R8Q_PurcuKAn6 zUes^cdxoGUG4In;w|$_DBJ%5&hqVe8>8l`{tQ=?gTkS~Ukp>4GuY5$h$iX$gL&J4{ zdq46!axB<0n`2CpeFVNkH}>5Yml?9UX2o%JHy(0oRd)b2Sp-z~a8ma@6=XmCw8gU7N-Q*^MG>N znCP|G9Z)lmr+=m*84x-k|FE7Z=-*PMY=mE)jbOEw{SzYz;DHm}3O;}73{gf^veS~2 zL|t|UAjPuOQ;!Ei$4}z(%t^FVg}2@Ojzm9(nEe zmOO0}y~}PqPcq|ZN9PdYd-V)iye0|mqvSM6-jK%yTJA9Mm-#EH{(p@v7bXWGA#1fF zaq&zN*PS~KUP2TRt&9*rntYAD7(|Jx5G+uoV0f?%5J=sB>lAtGfy3T(jMX+&oG(^8 z7LIU7Ji6S$C7R&LgIgL^$)|V45uP?_o=iz>^9fa(YlSS?EvK{QZ=U>ul$xS(4xj#OxvJ7M@ArAG?W%%(=tw-2<_I3l3!}@mJ4ofnl(p>1K21R=iJ_eU zum|_(NfG|e@gL4dWoY-YWDVoc>99CT*W$etz@nik5I7H5NrlW9iIvngeDtCpR}RNO zn#vZ}vsu}Dz%rTnLAw=e(v2I`lghR#i<*n#Q71l4SCmZ24rQ{IYvA*eWii8qr7;bK z$CLM#K|EU-z$yvUkMo?-84E0xgJ{jDd^z>k`n5Ez& zg~F=Ef4Y?tv2yRCrK8Q}62+6d9pI2spHb4({a2i(FQg5BPYaH{BKR~vu2ndT*|u+S zU-PVLm#36i#rg?9bx$u&g%^aR&V*4|UXl zJekemSb9^UOHJKV$?+t=*s)^PYd=JMeT*1*iON!%k-S~|dM_k6@ZQ}}`-n+4$IYrBJ~dV8UQ#-X@B@|&F&%J zYVw2=?yt=>S_ z1X;W{pyXY9^5+UbdAvkw3w&~~8!MPr=%n@^z&pa$5|Cx$fi8{O-=J9a9vf!n3y>Ys z(pR&vugfeYn&-UT9!ay6R6u6y^WM}`+l`X6<{~8dhgSNE$mjn|ER5ZDW#4$8L|v$h ziu47DuM(3xyBQA<%)h{%;x*}XPQjv`}|JJrc1&HvPY zO97s;N(%+@wp3uL!$UjjT+bJcly__a0^Pr)|A*qd0REGVWvIjb8E>p2(9ALs2Snx} z?FT_XnZa%9p%&ck+o{*(9_d|Y46vtyZihYq?+@w*FcJWM?dg?QnCMRV0j9??A~NZ` z@@}7&esbg9-e@6~lLyIkK`WS$!1)sbsk_2sS*V}tS2O)~|VWWQVyO$)}0^JsO^ zfisj0;2XUXNK_wGrf>fb*pNbOR*H2{UX=yQYr!XCuf zheEU$d-8FlWElytjL8J5=1!KRZMgt1faQxTUy^7WL3#hHEXB(VOvbv8gElYOi}vun zVefz{t=Pe6wsZhEVzF_`^(KL@+3q|hhs&f*MQVCK8eT|g%QdNAh#1=?+DA-ckheMu z-x19tpujwlTz9+V)9}_NXnmHE)R!v^^N?0ev@)C)mVy}5xXk~^YsR-^-8h>acC@e@ z!O15=%d>O4AvAWX`gB(hOsjFSW+n*3S;<2FLtGyG1KoV60(f%h@R8E72U4qM@R`1@ zd(<859ZTUMhOCNiz|1utZvN7@<{RvygI@cz1dnpSCvWu7Gc%I`eG{y}nDonBr##YB zu#@1nLs0#smFuJ9w()VW{PL{2&s8jTLysVRIn*N^$&Rujy|7dG*B6DC6krZN*KqZZ zyAPI9Gf{TAlRU5YD$N9~J_<8ti+SuBa~08v07em5is=qx%X!rA=-<7oa8(j#Ih(6e zOy6n;d5hWPel)jpo0W{2-k$^s272i#lcYQ~ctG>IyzOpcXTDGrO zQ$Xo*)*lXy6jW|Dtk}M%PA`{AzdJzgZ9{Z=c-Jl=^`zE9=rObLpb{GZQaS*HRN>$w z&gmz#Tx+uV>o!E6BGCU{+R2}T0WRiH(L0fR(>a?bTLnWjl`tS*MlVIgL&B0P|LdL8nzy|Ix+dB&Ce90+M>!Zqw`||elr`~!bOk8e%vQW1#hvl;L@Ah&I z{ax?mqp0oVHtbg#iXSwe$`%|=u8s=N-Xxo(I-<$w9Sytod81HYoLvNUWm-1~IG_KT zDX|&@`}j<;9EZqyHx;%Oz~#X&f&PzN7y9m!cmAJ8iQd`eHxVJhE5JP?!As_nBdENb zX`hvq)C}@z@$OdR&@A#NRJX4ukJaOWWOyCdsx7cN#Kmv6HwCWVr+0@8$m#~QJd!%o z*Po7(3Ve4K_%4o{1=vEniG1R>aav{z^b>!M=F9jSq`C5)hs_YGq{z;chOv3 z8dRe9lq2eeWc5a->!jf(%VzTk02!QXWvHeYzD^#IXwAq2ToPec*D6wuXOYB!BN zO1i&_2%Izx0el2%;)yJqg?K!9COcares64Hdw-;orfrOnEHwn{}fih8QF5nHHcyUDAq~iO^Js#Fmal+5M z+Fb^)IpQ-F&SkCn)SOTRkdne0L&;> zzi+aMJ+di_e&J7~P3MSRk`!EHV{od(+=fs_T=!cfG-&~DKr?`<2$O&VWj_IK6Uq;> z^QeY-()J}jKVmVr2(M6Yl1jP#Yi9&kmQVO~^qk2khmYvXVTSm-H#TN#LK`9`J`M5Q z3}33&^n=@QLc@UN*|dy0umUpDGgYm)EmLG zRd7S>w7pM{Dnq`9yB4c44Qg%JD+27B>?7`s8@oikP`qD;sW-c-T4lPA=-|tw>ZYXr z%Gd+Zr-OjRgDBE@A>GF-FVfg$Y);IYvl;-i>GD-cqpxCFv|RZv*oxEKnWi38r+2JA z!V%zSfF!wW3iEo72ZW#Lapicnf~hT(`cjdu@=*Tg>nnT%njxNp- z>qE=#&kg4vz&hyLY^D>AoUvK*pGB!hxnEZfXdHEmb4|SVM^w;f;*xQqighPFk1}uC z1>J$1ZFDHspF6Qq4ws970}ZEFWB?^cy1l{&Uj7&PJWtJ;BEzLQo6^Tg6pz{m>4VO9 zjEp+Mm-GdvvgbSJc;z2Aift)W4dRhTk75opRecUIUB-cr@5nRUW=MArcPz2G_8l$E zUa)w)oYH4rs^8M2^`Bd&2LRWnwqDG%bPI$0Psf@plawS|ng7l&)(mAS287i8rz%wQ zcHwC%-~n;K4MY|#n$I&B9ssb6`e*$GK1}*7Y9txrWnZ^L%=^N9FX1QLP74VJ0|xoq z6UTe|2^(fi`ww{OrYo&X&EXb+{lk*c@5fN>}zfPLB?a2=p^!rW!pHw(3YcB}!%vu%_PMq^iN?SW&67XSd{)sSGN@HN)7u z26AP+a=A9`8UO=O15uMtI409hI-I`6toK7M z#$u=f+T6UmzaNl9H72GoRcU2x*#0+iI{I$QoRm;sS#2QYR+J})xpR^YTR6edNd;Y2 zqyhMB1V&%@Vfd6fq_6qBR25!0^z*0>i*Qp1RZh8;NS@sY7Ttk zR_elOPMNs|hxdmou6FL&BbF(xfu?NbsmE}BxL%KZp2bm!P2pNE z#_rJgH&K*PihWY`f$Q!3rov76Z82QYO*vz)YllRYO;`gJHw2wDV#2oQF&Jn;Z@xrs>_T8`2 zRuSM0i2v;Qrrw(akcC$5N?aIb!ImRLSi@&oH8N69-T#TCe!p<0%@az+gOKE+wzr`_ zZ$-#M8y`rR>VEL4<8bTW8InqM{Q_|kMW10o0SEG|xjPlrP5U>{FfLcNvwd%_k!gn9 zDZ`VS&hgb+A^A@^_h1&G$SV;!gDI%$k=j-zFolnxwt;}*03t&^caNw-l@lo9y#L!G zHhx1RLz-~;;iSr($`)Rys;KC2=;ZOS_4Cpn8M`qY0@K4PIhE_%*J)3O#Vxy4CI;iE98RKgbz z(GgG+%zu2|u|+{Ou4}d1Z8knknO^F;K)|5T6-f~x@m`5FiH63^M-j6=m`53V*yL-m z0_u?F#@_%)1&R6)wYa@#07$Q#gE9{y}pXk{~fLeq-lx4ZJWd+Le2iHt8mPT!@ zh8C(BPE&Aqr zXH=LxNLz8Q3@mYrkMZM*{hsfo?shobP#(VhRre0oO;@MLpm)NRdB51P)?j&JoX}K8 z|MkJ|q7NTVAd`t!hV6n4qd)N|&|0;z(*{>@+(TK za@JxP`M4A)y_Z>+#!|TTufgv-g*+o7DRV;GB}V&j%>@&dmY}NumuFT^dUZANzy@}b znq+pntX`t-DK;h-Ayhp>n0OI`qGU?NZ`>~8}%V5kk zbPONm1+Q5mto`9nX6>KcWj$;1R~MGOZOubCnbN%B0WX`kfRH)`&7-jQ-n_{s*L8p1 zx9|sXMb=8p#6Kjx0TfC2Nddm{k6#Tut8Skn#)Zpxj0`OHjmApp5>(!E6Mi23VRip( zWtk4FRPq2%0Ks_?!3DV^&ig}4-$A^3sj zQbRiKRIYb_zM8K%Hnl<8H)(+Q_zLAT&AkM_uht>Kn|Hs~k@}*;%|S8_oZY{W$mbP2 zNS{9181=tGmwB!71>ZX{KE5}%Rau9a-uacWFc9EPKbg~Xv2^}B=M{!&@NE);s%yIfLQqySfLU_`+r{l zH7B&LM!EVb0cZVxUY7nBtIliGM3cP#zU@h}11S}yahX?p_8-gC-pLCL0*ixx z-nItbAzsS=9{0u3|7&n8V%YFEkL{eC;9K;0e}4K z3i&v;>(E!S+jE!w-?#r~;Qv2dA^&gSfd|R|jyf=T{%_!kGw1(i{Qs|SHHYUUf>~m# VvD5YOfEoQIbyclLrOK8e{|`w6s#pL3 diff --git a/tools/structure-data-in-js/images/types-of-graphs.png b/tools/structure-data-in-js/images/types-of-graphs.png index 1c03de643a68521f8225460ca455da13a48649f0..eef3809b64cd80eb6ec8468be588baedd332b5cb 100644 GIT binary patch literal 15411 zcmd6Obx<79^C!;YEVcwmV1vuz7Th5?0fHG$dG*WL5p)|>fkn7XPw9ySFw5)u-gqJoSj5)vi=2?@0cfQpbH zWv^i(At48=D{IM;zo2@4eukt!U#3<*FEC5)$!~0I+B-N!L`L!P3-a;_mXwq-FtYUb z51gHym6VqC4-9C&)7H?`^7RYY*xZzskxNg{NK4OXYHAjqkX#5&H!(G*U>4lyV&vtd zHa0OkJw4Y@ct!uQY-VPbzg}cFw(x9>iGhxqHEbio6Wm`yPr>k#Es#r1NP?b*-rj_U z(TWwU7d1OOE4D1d%M5Av45Q|u&9`>{qHDpG&JT&=VRnJMpk-kV-=yZIT@1~j7Si%k zH(-xHqtyriD>KrWW~9UDJ}GFH#L|_-zV@@Fl@@u)!vuNLEdf?$piy*`

Pkq0rIcS#Idw@=lxyCVIBruMOOK!HFVWyrzd|9@sx%s7}8P7K% zMyKY{z<8*HVxoy1?>8Z~__ODO#MyeryN6?q{r97RakuMU@gvU)#m~2WQ{S(f?pL>S zFA985g8oh|!3Sn5x@VuShO_Dh#-cLfiW7q8zUX`kIGf;$AU}DJg!INnQASeBbLp@< z=wFEfb014Vr6~WJ|Fy&9dQIX#nnTYGKrQY6@)7drJ!nT5+Qa##>BV87u}s*Xw#LH% z;umz-2~MV1dbI1AJ97#Te|i58N7>am*Cd-0D6C@Oighb1J@NGq{-30DrgXG`F0tJ< z)~1Z(gUozSrJAuS_H@_XIkJgD#ZLfNM(J_sip&!4OEraO$%%b$0~ci0(xvq+<78w@4hd9FS0!YdZFuFB zG=MBVGQcC@)s3}b?*vL!0__eJKh$R_29joDc5q-(IpT-d(4H+x@BjJYdnZ?E{ zt(kcF-~)x&pHY7VkK8_pWutTT)EWZjn22j@TopzmXeNb^-s&y#*`2{@m|bR^N^jsi zBdhE4XdlE<1BR)yAU5}IEXx`e&n~64`GPsQ(B%f$$0DtV^NRhJE7uYQ7Tm*VR-zSJ~K9mC-yPo7iw)& z@nEs{U8{6^vD+Ljp*ChbNQ7WU7odJ20^US zeoEBCA~jOO?LJ19z;|SM73;Wfctri!I+f+oRwjosD}{XN&=&>t(K)_~Z+%yCVCo2n ze`nC*k;{#m9QtG-SAu;rI72>6vZ(J0HBoGebou?lqOGh$n&?e13gdpVilSw%*S8c& zk4NWG*;_hZMp%4Y3{eEOB3hL;THPFOy&l?{^5?6#eA`452PXbBkSP^zkv@%7V-QXn zj80jXTuzun>I2ifw+(QK6wHSDbLo=tm(OpCpvu>l#$$s+7Za%uke-2&1=$AEL?|pb z9b`(|vRDj`9LEO!Eq!c`(jc^KfwAm|+P(h(NIJ0e~fOapI9uf2u|M|$fPi@b| zVKGx{oA5xsQcQzg75Pp7r(Nw6ERTT;@-uTv+!51Km2L%C-aX@0M-4{p!KNGHWTc*U zyUm%5`|YRlOrLw)k;6|nxg37_1cljQb8C4%3V}Q;-Vyvzl-i80$}R0AXLC^bT8_Wd z&90d!K;(M?^G#fHq$3boaRK(=@>AOHkC+nESwdm_l3z~}665;W3neZ>C|KjWVDnKf zUl{R}1xQV8i)ERTNtOMZq2#>cvp)3mz5Flaq6Tz`JEg76T`8jNqFzHZ`($o&@0eXF zRG&Z0OvTG{(4WNWhT9)%(7s(Ty=Y|ct6kB8O(;jGv-QG}Y(l!H+#NTtGWKrjhyIS4 zQ~SLsYl}0%@(z$x+tQOb$t0nD<_N7!BQ-sdH0!|ybCSks3QwdkW_2WkWsu%A#w;d- z+2+D(dW_Fve+vsWZ25}YN_|u7(_z#+jM+uZz4qzPS8V{x-Ekk_Y~cs(3TZRx9l^xr z7}?ZO2?yq$g({*vdMsFhjg~N!h9E=XW?o`V5#V0%_zez7kcK;RmPJ0aWA8^$xGUb^|5BtMd!N@^Nn zKHA#X1|T*ghYkp>1{EO^5{o}veOr@<3d~!e8%wvNmwI^L0fmt=2U-twNaMOioB?ac zn!J@tY-3I0`6Piu|L3_ac!a$8jpFT0K-cL@mirBWQR_Q^S4UD+-6+{S9|-`!+rC& zx;aZb9)$v!h0P#x4+{_?THF3kQyIP(Xl~4TH@AvsJ*{N7RH);d$s_=;R~Jh#K2X#4 zTn2VsyJ!jCT9gl7fajizrQ(Z0gLIxk5uN<3t6f}iSGr}jgy8~sx%9gvkE|#SL ztgpY@?4@863KdkJRAm+7z-T`U0h{&hf~Lzj!~*2_{jHZaPn4ZHj8lL}9Aw=a2ZmuW%Ib=SR}-$AUJ7U$@^=$@ezLwY z{#z)s_!Yplej^Gr6MJj}IA}{v5W8zNJ*&y4dY|Cno@Nr6+C-|%g*ram#3{QbgD=g2 z-lXfth@wOvy#cfn^gRn=WNoZHYywmj;`CB}ME9ZBZ7i$NttT&G>0CQojglL)DE2Qrui+h4z@}5dBzP*5T^md)WJ@XdRE$*PS?+gzkY(IH0$W?qMk_3VK6s5vXBa7KcX<00I=xeTz zLLVnj0Hnj$SOX0uCf>75J$Fkb8fMjzx~k!Xl{+(621WuNY@QBMqUmn2U=h>t6uBrf zG$uWWe3a23xZZoaRhZ0B4FaMq1DhA@oqq(LKM|R-GxT6b7qtn+5HiPu>zQhyFow-w zGlHS7D%Re^be2YbrJX)Sww}yBuQoQ`?C*jr_O7hp%CKUR-ae(WRa<=+V->pEL9st_ zRl$lJOlV*Cbx-E#bM#b!oCrtAsn?Y%YNz;)S>nuur#?du>qvr-3*%p!H8$CyPKI)g z^l(B^cal9knNa8~tL&bavIxaoUHO3I?ThM;NeA3SJ0e_x;g9k&;LCc~T6GwIK|_WG zozzVRz=k(`{%Cl#MWa{`(z6{SSBt|cYYhSVwKhxlR=G0EO+L(4J0vd(N61=(LSx;2 z6NjJeruWwaQ2%mytMcDjrNwLe`KrOJlL={`^yzzSxRV3e0@f@`)_Bvoi_9$%jw9#E zlC~ay@cTfdFR zh9Zxy0!>AQbTQi9;ebV!qJH;3m9L~6hE5za6|RapY_t}YVWFnp%%e)d+1FYyP6K_$ zVR``^+1rx(tBzqs!q0!KN9nq8!7M#xhv}ME-fft{T`}D6(=cz!SdUPTx055(RdWaduR<#V~HNuxji#97Tc6Or4Cm=B1tvnPv~T$uGi zTjO+X!Z@P{t6{qjEhb1nyN(Dse8LNI$4fsi15|hXuwyA!%iVGYex@S65svRD^vlF~ z$@OyDfL8W4#5?7nT8$}#URRaAZ5%gQ(vXIYc%4=N7V!|W)FmSbc?cOA9`ow08MXnF zWF&%>bs}oGVJI9D#Zg7#ZWW#Kw;)fl*G{$|)f}dZ!!{wqKG`AcgluM+)L(c7x;(m8 zcQ9{T$1K3nFd>UC`DWHJ|K#dq-7m&+yRJist)(Ghr!cQsE8#P}Lo zKo54Am=2|z$^gsU7Xtk1^h}RDo0QtKLaXYINOevgGk3(v@QGF^3e0C_Kso#tB7pk=g?xumTy`d<+76q9m zdPRt(^+&Ao?f-QHPjb9Xu-1ebuWHZ9w~foW1vl4WD2jG+`F*z244;(a2qkpywN>Q3 zp^Sjs%E-$j!Q?&=9>?C1_oK6I=NEwwWB#TvQq$6~Xo%4FoFfV99eq5A4nMXNws zerDNJgauCL8?oC<8xPV5X7Y$WpX<2S;L*r#W%_`ZtLUcP(KdqDa_ zfz9D4A$5Lm#Z{|yq&dHW_NnjAk#OBRQ#JjTaD@>+00x+Uw^xX@?N9*L0;IG zl>oG1;o<7CCBD4>1o{7ZUPb*A{OcK!|KHHXKI$BPYMKaPBO?vWumGf2UWJ<}E@wfE zKv@lv|D1^d3&E(!|F&y1&+~HX|K*LLHtB!Y4wG6~PLk$JK2thFgu-*HE-o%W&Ji=A zXL|1OM6yrEsShIbfdKT9;Qw%k87ThqU|LnUSgYm@BS{ zdgM%$q4(ogXs*A2%Uv@@U5Krx|SM5 zJx@$0A!|@&dkcj$-Awib>k|XQ5oGWc1Cj(}GFQm{&?gX@tGKJHmy)aF97M6LyUZ+E zgaA{Rxd};TZK3duob|O9Ah5BtPr*|&8d{1F^#Upns~$t61x6lqY=;q$vJKazd?l#6=kwH~C#4{rP7@Y(&%(b4lv8I^1c z{V!@cc-H{C2Dq~bvpqw!{-c+vMn)afWO--9?Q}K@IM{n-equ$Sk{&VNZJ6_V;AX~- zJ`u-ui3__;^Z{+_;wnN?P+u!?G*k0U%$Y&JJs7l5WBBJjXNTbHz+w1EHu0>*d+)6W zUjLHZ6dc=yBF@A0k30oU2a-Mz4HM7wQXxYQs%@0zpM&$)O$JhGmhwSdk}7|DqG0P@ zK^gx#l8y|Ob94qE*n(aeWv(FshyG$8YKG7o56F%0`+xuX-iRk_N+nJaZLB|EgoQ^+ z{YEQ;Hxz(Y*Oj1SIkZ>0RwT_6Vr3)lQ%j{0Pr3KetbhLf^Qtvb+wD44);$fB5pQtXn70k@ph~7=9mK6#k!%ZvbnVR%#?t z2;(eGWKuV;`K-|a@=u?o6rf1P?YV^KOLmdtO4zhc$i7!&QmGMzBvSuW=18R0V7l>! zqV0NLq(Wb@1EOrRX7g5XsxcK1|&3goidlqG+f!@mX(d@)dNY#P z=+BOYc?)fAfjS3AA-T{qu7M&I*}}2+KR+e7&yXPURH5ZVe^?Y&R)>SX`L1j!2g}Dz z5{lGGI%mCG>N;JaUH}cuCHbUvRdmWi3kf`7;ZxGl(`oqBL`K7ul-|G0W?+Ydu);C_ z!6b}uQwADHSQLU^L`K8bhYrxpe-0UD8nA6{_9a0YoVJe9AaJZ`UXlGCf+QF(_0`Ge zPA;$umn?-TT^YU0$>L3D22=i^tRqIm=!Ai{eAhAB-1A9(=u1%d3ns`B9hkH0Ec0=W z_91-F37D(=wZ>>HA0G$1>%agiBW{0r%95s%gd$MTJi9kEHhu0jTXsu@`{nH9v$;6H*$t%xjPE_7Y zsyNdUAXmH-moL8ODe1*;4X5s|*RNkYTp8>u#=Q6auo6txd{~uHUp zyIq|&P&f$xu!4F3b@6SP3y<*VCqbW_cggyWi(g4!gWG5a5_piqPUhptJt5iLAXQV= z2#lT9nk}F9yCGNF+y0Sblw8$aoc)|#MFDy_j#SoDx+l?5lH=CldFw8_i6brLt}^gqy@-A)_2HMDt-|=1r`Q1G%znur({DK{)<}Mkp2PN}m1P zx9us*7(v1Y6Md#)*qgpCV|0*}L-c9aU& z?DdO&xd3iEIL((jrRU=uVV?X_%oAt%pTapx*%@C9UpvNFC3%j?n`Ssf!v{jH3cCD%H6}`reJjA*cIW>6 zdTxbAw(21*EOJxI2r0y#GB5pyPQms!W%26bP5pTI)(WobkDRn2VTedNGD(YFg*R6~ zQwghLr6U2!UzEO)MxlX$5P7Sv_j>Njy|u1*49z=&gv8B@IDPI0?*g<^ZzL3bU3__G zs1Qk#$x`Q;w$p3DFg*Lfpscb3U&N^|UFQF5|A!&~JC7Y&Vr4%zM2Nm{TEAr0bXC*_l;dyD+PFyyFUQ;mpJWr^@hUl3YO@9_)>I*rqy!|x_`*9zm0N)_KQ@6wQF*&*^4WM_=oka#+c6sGFnT$+wIJ~BC z=;7p-q_R81s+@ObxxeEYb4thAUSE+;LjN=_d|&xNc7D&9g+(0O&?PUdbB|&T$l!!-wcFRo!%2 z=~)l;d>h?rdyIoMEiKomygixg(h^}GuUZdG_D`s$~5~-pw=0PXT<;`qo5Qf{Z&6h%Hi5;L_g@KDC9~FkVTNvhem5n4N{`;AHtfn}+9dO<0s1S7 z!2iy^a<|}&#?K(T=ue=8(58#mVG%KrIF;WPN;>`5qsU*ihF@>-!}qdZ)ro@5YgX`3 z52pPE{Ufj*62joOx^MD$c{c<6Ctz9M*{o(<4%A>)u2J!pJ{&^t!N z!37&*iilYVLip{#pvey{mS*{U9l>QD{36uX6+WMV8y#lW5bAxiHvPl^zYwL1%UvF4 zWECT?d9dAPRDhk*{D#vH77!a2l#>tiRddOI&xT?4ixrjkv?L@~w$9`ym9#IW_UN7U zZ@#6fz7?qc<%3M{*(cLzgXZr7_Xotz$awfXI(j)PyX#t7x(0i`i5^jn^3ls9%17l<=5p9_OS(5Qz{l+yg{ zD@?eFY}YK*Hr=PL)>SH>Y(g56oBu=W0e6^m*TtV@pLnv-mHnk&-2mFySdrv&PXt;i zkY_>`lAAj^D?{5To%GJQrE$sN+#M})tiSk0X84Gab+6YD`X@lfw}M5| z(uK{o!9Hj@FCqoZ`0ZO@P|0iCZ2m^+k6XT-PGT*8&fcEwNM|m>NeFIiQGPDe=LSI~ zCO-cmq+h`A|C14F1L~1mYM9AVir8_S&yM70uZtT+OxWH2k2JWOw=*vs4RlUHp?xpu z2p5!4;*u{Xr`@Ih6q!iOzHI_&fH)$;L1$~7_6Dty+TCfl_6hFUKgNRvIy(}EE#4Lt zz8%PHl75k&Qk7Pd=DrPcku0x0z)~AY6k;XJ zq2`?dEKXE6J=E-j;j!h7@d+;PX9+u8?Z~WO7^)jO>wV;Va(rcRP4qQr z6E5oP&O!&q;!~$>%0dK`0W*E{F0`N@i4`$z)NhTxPu=FD%ZebYCqNmNzdws`yfZ5Q z+2V2Xdov*cbKL6U^78U{Bo(esDl9tio}aDSP5!y>=B4U>&gf06hnhgT4I^dw^PEBM zGbc_e4qPFrK840BEtwC4E2W?xI;3bY?1LK5|C4p)$Y}uD)`tkAWGgGE5M6%>r4JfS z;*vM=zWJ>v>hS(YFAj;ZZ6+>InSaPA-?3bj@#6&&l8cblSjc`&kM<|DvU}_l8|aR6 zVJc426H_?j`aUbxCB}TSeQHEXDvl6E3FS2A&s$uo`R1{0PcD!%kLLC7;*Vt&MY(Ts zf;Oqc1u{qPSW<*sYI~t2nt6WnLOQokokX=Aw7>upIbP7F8>Pe$w1N{F`pnxn^Ry#J#5jVmzdWC_cBZsdHAn(^KNVr~vRq4>_t2zxk z3|bc;IA@g5YMBm|(+cuipGEixT6#pYrPTANWZTPcvyLPY^9t*Ig3?lU`4Pg!eTwe$ z&V#bC4*?y}uOn=KhTMvSO2g(=O<#zLTE1iP~RjL zpX1!beJhmY8<^+_mnIiv1`+@Kfda90o26bvNposIHIFT(S;kJxPWQE0k} zFJSLtvnKuiC#DSryImNN7Ex`~LLddA0UFx99<4Lky{lPk(9qs7`xgpL)~IYUyL%2n z>sbGL7fV4rDWl|CwK(?_-BppyAeakRa4cN6L=sYsB!d8;;`d1B8m2;9AM9S}{pUt$ z4~fg=ESW_JaA#9+Kg$fdR$j)Ea8JBPMDwf@4CO|8;c`ZXxlYS8a&&1y1w+Ej^LV>O zkqA20jXwy+t< zLgJv6qQ6oKXgM7e=BZTu1e!>@W7wtJ_4Ain-&XozSAn^naZV%#hlRZ>IOwW6G{Yb9 zNhq)dszzZ9xD%?53^onZtFsgIq?uf`K5w4q;>JW(&Ct++KyVV5SZL3{DEEQM{DL5v z;*D~&xg)w!GFF5k^}sX`=gP2Uh^bu~s=nQ>f#@Nh-vUGTCr{73P6L z`ug2seQI!GyRAxxm?Wh9hh_E;NoTCz8c^WsYuAsuF8JqrjpfkWmwD3CV!&2O4!JeLwsTatecLv=Mk>a4b~kWY!8l z9*4WyfC`p_{wBLg2vdbceWHj8wpHi-gMEhvPIEKnPFQz$(q+Gmqrova%A(Q_mk>^I zCX655Khp8H7N+LNh*he|9v~yTzrR29YUV8C#IT9)*139&L&S?)Y{5J6N>zeZx5skBCJ0{6p$U#$W?ZDL< z%0D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 E0|GcA>Hq)$ literal 23943 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 b^YuHOh&;YQOGp8L^;HLKoqns`k4^j+5FRct From 36d69944354c03f28bceebf4334e1127d2a6acfb Mon Sep 17 00:00:00 2001 From: Svetlana Korobtseva Date: Mon, 11 Dec 2023 21:18:08 +0800 Subject: [PATCH 13/15] =?UTF-8?q?=D0=92=D1=8B=D1=87=D0=B8=D1=82=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=20=D1=82=D0=B5=D0=BA=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/structure-data-in-js/index.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index 7de7c142db..d2de63b526 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -16,7 +16,7 @@ _Структуры данных_ — это способы хранения д Представим, что у нас есть список из 1000 имён и нужно найти определённое имя в этом списке. Можно просматривать каждую строку списка по порядку. Это может занять много времени, особенно если список очень большой. -Однако, если хранить имена в другой структуре данных, например, в хеш-таблице или дереве поиска, можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. +Однако если хранить имена в другой структуре данных, например, в хеш-таблице или дереве поиска, можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. ## Массивы @@ -24,7 +24,7 @@ _Структуры данных_ — это способы хранения д ![Массив из четырёх элементов. Идекс первого элемента — 0, второго — 1, третьего — 2, четвёртого — 3.](images/array.png) -В JavaScript, массивы являются динамическими. Это значит, что они могут изменять свой размер во время выполнения программы. Память для массива выделяется динамически, и элементы могут быть расположены в памяти не последовательно. Однако массивы предоставляют интерфейс для доступа к элементам по их индексу, например, `pizza[0]`. +В JavaScript массивы являются динамическими. Это значит, что они могут изменять свой размер во время выполнения программы. Память для массива выделяется динамически, и элементы могут быть расположены в памяти непоследовательно. Однако массивы предоставляют интерфейс для доступа к элементам по их индексу, например, `pizza[0]`. Представьте, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: @@ -43,7 +43,7 @@ console.log(pizza) ## Стeк -_Стек_ — это структура данных, которая работает по принципу LIFO (Last In, First Out), что означает «последним пришёл — первым вышел». К примеру, вы моете посуду и ставите её друг на друга. Если захотите вытереть тарелки, то первой возьмёте последнюю помытую тарелку. Это и есть принцип работы стека. +_Стек_ — это структура данных, которая работает по принципу LIFO (Last In, First Out), что означает «последним пришёл — первым вышел». К примеру, вы моете посуду и ставите тарелки друг на друга. Если захотите вытереть их, то первой возьмёте последнюю помытую тарелку. Это и есть принцип работы стека. ![В стеке находится четыре элемента. В самом низу первый, над ним второй и так далее. Пятый элемент добавляется наверх стека и удаляется из него первым.](images/stack.png) @@ -72,7 +72,7 @@ _Очередь_ — это структура данных, которая ра ![В очереди четыре элемента. Слева, к конце очереди, четвёртый элемент, справа, в самом начале — первый. Пятый элемент добавляется в конец после четвёртого, а удаляется сначала первый.](images/queue.png) -Очереди используются для хранения данных в порядке их добавления. Например, если хотим сохранить список дня, то будем использовать очередь для хранения этих задач: +Очереди используются для хранения данных в порядке их добавления. Например, если хотим сохранить список задач на день, то будем использовать очередь для хранения этих задач: ```javascript let queue = [] @@ -93,7 +93,7 @@ console.log(queue) // ["задача 2", "задача 3"] ## Связанные списки -_Связанный список_ — это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон — это узел в списке. Каждый вагон содержит груз (данные) и соединение с следующим вагоном (ссылку). Первый вагон — это начало списка, а последний, который не имеет соединения с другим, — это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. +_Связанный список_ — это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон — это узел в списке. Каждый вагон содержит груз (данные) и соединение со следующим вагоном (ссылку). Первый вагон — это начало списка, а последний, который не имеет соединения с другим, — это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. ![Связанный список с тремя узлами. Слева, в начале (голове) списка, узел с данными «Люблю», за ним «пить», в конце (хвосте) последний узел «воду». Последнего узел ведёт к null.](images/linked-list.png) @@ -136,14 +136,14 @@ console.log(head) ## Деревья -_Деревья_ — это иерархическая структура, которая состоит из связанных узлов. Каждый узел дерева содержит данные и ссылки на его дочерние узлы. Вершина дерева называется корнем, узлы у которых нет потомков — листьями. +_Деревья_ — это иерархическая структура, которая состоит из связанных узлов. Каждый узел дерева содержит данные и ссылки на его дочерние узлы. Вершина дерева называется корнем, узлы у которых нет потомков — листьями. Ключевые термины, используемые при работе с деревьями: -- _Children_ (дети): узлы, у которых текущий является родителем. -- _Descendants_ (потомки): узлы, до которых можно добраться через родительские связи. Все ваши дети, внуки, правнуки и так далее будут вашими потомками. -- _Siblings_ (братья и сестры): узлы, имеющие одного и того же родителя. Ваши братья и сестры — это люди, у которых те же родители, что и у вас. -- _Leafs_ (листья): узлы без потомков. К примеру, ваши родственники, у которых нет своих детей. +- _Children_ (дети) — узлы, у которых текущий является родителем; +- _Descendants_ (потомки) — узлы, до которых можно добраться через родительские связи. Все ваши дети, внуки, правнуки и так далее будут вашими потомками; +- _Siblings_ (братья и сестры) — узлы, имеющие одного и того же родителя. Ваши братья и сестры — это люди, у которых те же родители, что и у вас; +- _Leafs_ (листья) — узлы без потомков. К примеру, ваши родственники, у которых нет своих детей. ![Визуализация структуры данных дерева, включая названиями элементов. У дерева четыре уровня. Оно начинается с корня, у него есть поддеревья с детьми, родителями, братьями и сёстрами.](images/trees.png) @@ -183,8 +183,8 @@ _Графы_ — это структура данных, которая пред ![Визуализация обычного графа с названиями элементов. В нём пять узлов и пять рёбер. Узлы обозначены кругами с цифрами, а рёбра — линиями, которые соединяют круги.](images/graph.png) -- _Направленные (directed)_: в направленном графе рёбра имеют направление. Значит, что, если есть ребро от узла `A` к узлу `B`, это не гарантирует наличие ребра от узла `B` к узлу `A`. То есть `A` к `B` и `B` к `A` — это не одно и то же. -- _Ненаправленные (undirected)_: в ненаправленном графе рёбра не имеют направления. Это означает, что, если есть ребро между узлами `A` и `B`, то можно перемещаться в любом направлении. +- _Направленные (directed)_. В направленном графе рёбра имеют направление. Значит, что, если есть ребро от узла `A` к узлу `B`, это не гарантирует наличие ребра от узла `B` к узлу `A`. То есть `A` к `B` и `B` к `A` — это не одно и то же. +- _Ненаправленные (undirected)_. В ненаправленном графе рёбра не имеют направления. Это означает, что, если есть ребро между узлами `A` и `B`, то можно перемещаться в любом направлении. ![Визуализация направленного и ненаправленного графа. У ненаправленного графа узла связаны между собой линиями, а у направленного — стрелками.](images/types-of-graphs.png) From 4f980f6a429afccf6e49951f139c5e66cebc9ee5 Mon Sep 17 00:00:00 2001 From: Svetlana Korobtseva Date: Mon, 11 Dec 2023 21:23:49 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= =?UTF-8?q?=20=D0=B2=20=D0=B1.=D0=B4=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/binary-search-tree.png | Bin 16916 -> 16854 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/structure-data-in-js/images/binary-search-tree.png b/tools/structure-data-in-js/images/binary-search-tree.png index db7dcd5aef09a81db36677ffaffaa9740c805b79..8f871d817410744da8600dc81032f5a97106bb25 100644 GIT binary patch literal 16854 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 ZF91^I^KHN`<@XI)QC3anvy{ny{~zy!tup`s literal 16916 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%0D^C^A})ZWR`z~ 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 Date: Sun, 10 Mar 2024 12:10:20 +0000 Subject: [PATCH 15/15] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D1=82=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20=D1=81=D0=BE=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/structure-data-in-js/index.md | 65 ++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/tools/structure-data-in-js/index.md b/tools/structure-data-in-js/index.md index d2de63b526..afa057b66e 100644 --- a/tools/structure-data-in-js/index.md +++ b/tools/structure-data-in-js/index.md @@ -12,11 +12,13 @@ tags: --- ## Что такое и зачем -_Структуры данных_ — это способы хранения данных в памяти компьютера. Они используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. +_Структура данных_ — это способ хранения данных в памяти и набор операций, которые она позволяет выполнять. Этот набор операций называется интерфейс. Различные стуктуры данных могут иметь одинаковые интерфейсы, но реализовывать их по-разному. Поэтому одинаковые операции для разных стуктур данных могут отличаться по вычислительной сложности. + +Структура данных используются для решения различных задач, таких как поиск, сортировка, фильтрация и многое другое. Представим, что у нас есть список из 1000 имён и нужно найти определённое имя в этом списке. Можно просматривать каждую строку списка по порядку. Это может занять много времени, особенно если список очень большой. -Однако если хранить имена в другой структуре данных, например, в хеш-таблице или дереве поиска, можно найти нужное имя гораздо быстрее. Структуры данных позволяют эффективно организовывать данные и выполнять операции с ними. +Однако если хранить имена в другой структуре данных, например, в хеш-таблице или дереве поиска, можно найти нужное имя гораздо быстрее. ## Массивы @@ -24,12 +26,13 @@ _Структуры данных_ — это способы хранения д ![Массив из четырёх элементов. Идекс первого элемента — 0, второго — 1, третьего — 2, четвёртого — 3.](images/array.png) -В JavaScript массивы являются динамическими. Это значит, что они могут изменять свой размер во время выполнения программы. Память для массива выделяется динамически, и элементы могут быть расположены в памяти непоследовательно. Однако массивы предоставляют интерфейс для доступа к элементам по их индексу, например, `pizza[0]`. +Память для массива в JavaScript выделяется динамически, поэтому массивы могут изменять свой размер во время выполнения программы. Реальное расположение элементов в памяти будет отличаться для разных программ. Для небольших массивов элементы скорее всего будут расположены последовательно. +Массивы предоставляют интерфейс для доступа к элементам по их индексу, например, `pizza[0]`. Представьте, что у нас есть пицца, которую нужно разделить на несколько кусочков. Вы можете использовать массив, чтобы хранить каждый кусочек пиццы в отдельности: ```javascript -let pizza = ['кусочек 1', 'кусочек 2', 'кусочек 3', 'кусочек 4', 'кусочек 5'] +const pizza = ['кусочек 1', 'кусочек 2', 'кусочек 3', 'кусочек 4', 'кусочек 5'] ``` Теперь мы можем поделить пиццу ещё на несколько кусочков: @@ -66,6 +69,8 @@ console.log(stack) // ["действие 1", "действие 2"] B этом примере создали пустой стек и добавили в него три действия. Затем удалили последнее действие из вершины стека с помощью метода `pop()`. +В JavaScript нет специальной структуры данных для стека, но вы можете использовать массив, как в примере выше. + ## Очереди _Очередь_ — это структура данных, которая работает по принципу FIFO (First In, First Out), что означает «первым пришёл — первым обслужен». Её можно сравнить с очередью за вкусными пироженками: первый человек, который пришёл, будет первым, кто получит пироженое. @@ -91,6 +96,52 @@ console.log(queue) // ["задача 2", "задача 3"] В этом примере создали пустую очередь и добавили в неё три задачи, затем взяли первую из начала очереди с помощью метода `shift()`. +В JavaScript нет специальной структуры данных для очереди, в примере выше используется массив, одако у такой реализации есть недостаток: удаление элемента из начала очереди имеет линейную сложность. Попробуем реализовать очередь немного иначе, чтобы получить константу по сложности при удалении элемента из начала очереди: + +```javascript +class Queue { + #queue = {} + #head = 0 + #tail = 0 + + push(data) { + this.#queue[this.#tail] = data + this.#tail++ + } + + get front() { + return this.#queue[this.#head] + } + + get size() { + return this.#tail - this.#head + } + + pop() { + if (this.size === 0) return + + const data = this.#queue[this.#head] + delete this.#queue[this.#head] + this.#head++ + return data + } +} + +const queue = new Queue() +queue.push('задача 1') +queue.push('задача 2') +queue.push('задача 3') + +console.log(queue.front) // "задача 1" +console.log(queue.size) // 3 + +queue.pop() +console.log(queue.front) // "задача 2" +console.log(queue.size) // 2 +``` + +В этом примере мы используем объект вместо массива для хранения элементов очереди. Мы храним два указателя на начало и конец очереди – приватные свойства `#head` и `#tail`. + ## Связанные списки _Связанный список_ — это структура данных, которая состоит из узлов, каждый из которых содержит данные и ссылку на следующий узел в списке. Связанный список можно представить как поезд, где каждый вагон — это узел в списке. Каждый вагон содержит груз (данные) и соединение со следующим вагоном (ссылку). Первый вагон — это начало списка, а последний, который не имеет соединения с другим, — это конец списка. Таким образом, вы можете перемещаться по поезду (списку), переходя от одного вагона (узла) к другому. @@ -99,7 +150,7 @@ _Связанный список_ — это структура данных, к Существуют два основных типа связанных списков — односвязные и двусвязные. -- _Односвязный список_ — структура данных, состоящая из элементов одного типа, последовательно связанных между собой указателями. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент указывает на `NULL`. Элемент, на который нет указателя, является первым в списке. +- _Односвязный список_ — структура данных, состоящая из элементов одного типа, последовательно связанных между собой указателями. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент ни на что не указывает. Элемент, на который нет указателя, является первым в списке. - _Двусвязный список_ — структура данных, в которой каждый элемент содержит указатель на следующий и предыдущий элементы. Это позволяет двигаться по списку в обоих направлениях. Связанные списки используются для хранения данных в порядке их добавления. Одно из преимуществ связанных списков — они позволяют быстро добавлять и удалять элементы в любом месте. Например, если хотите сохранить список задач, которые нужно выполнить в приложении, можете использовать связанный список для хранения этих задач. Каждый узел списка будет содержать одну задачу и ссылку на следующую подзадачу: @@ -132,7 +183,7 @@ console.log(head) // } ``` -В этом примере создали три узла односвязного списка и связали их друг с другом с помощью ссылок. Первый узел называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. Последний узел указывает на `NULL` и называется хвостом списка. +В этом примере создали три узла односвязного списка и связали их друг с другом с помощью ссылок. Первый узел называется головой списка и содержит ссылку на следующий узел. Каждый последующий узел также содержит ссылку на следующий узел в списке. Последний узел указывает на `null` и называется хвостом списка. ## Деревья @@ -200,3 +251,5 @@ roadMap.addEdge('Москва', 'Нижний Новгород') ``` Графы используются для моделирования отношений между объектами, поиска путей, оптимизации маршрутов и многого другого. Иерархия друзей в Facebook или дороги Google Maps — это графы. + +Деревья и связанные списки это частные случаи графов.