From c6e92174209822330b47baf1aadd3a9ad1e42c23 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sat, 10 Feb 2024 08:43:58 +0000 Subject: [PATCH 01/22] test --- task_01/src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 0e4393ba..b9aa6904 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,3 +1,5 @@ #include -int main() { return 0; } +int main() { + std::cout << "hello world"; + return 0; } \ No newline at end of file From e18de5a27a74c330f8e3b4027749a01fefc144f1 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sat, 10 Feb 2024 09:26:02 +0000 Subject: [PATCH 02/22] test --- task_01/src/main.cpp | 3 ++- task_01/src/test.cpp | 2 +- task_01/src/topology_sort.cpp | 1 - task_01/src/utils.cpp | 1 + task_01/src/{topology_sort.hpp => utils.hpp} | 0 5 files changed, 4 insertions(+), 3 deletions(-) delete mode 100644 task_01/src/topology_sort.cpp create mode 100644 task_01/src/utils.cpp rename task_01/src/{topology_sort.hpp => utils.hpp} (100%) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index b9aa6904..1c647f1d 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -2,4 +2,5 @@ int main() { std::cout << "hello world"; - return 0; } \ No newline at end of file + return 0; + } \ No newline at end of file diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index ef5a86ae..babf52ce 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -1,7 +1,7 @@ #include -#include "topology_sort.hpp" +#include "utils.hpp" TEST(TopologySort, Simple) { ASSERT_EQ(1, 1); // Stack [] diff --git a/task_01/src/topology_sort.cpp b/task_01/src/topology_sort.cpp deleted file mode 100644 index e53f670c..00000000 --- a/task_01/src/topology_sort.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "topology_sort.hpp" diff --git a/task_01/src/utils.cpp b/task_01/src/utils.cpp new file mode 100644 index 00000000..0ee624c5 --- /dev/null +++ b/task_01/src/utils.cpp @@ -0,0 +1 @@ +#include "utils.hpp" diff --git a/task_01/src/topology_sort.hpp b/task_01/src/utils.hpp similarity index 100% rename from task_01/src/topology_sort.hpp rename to task_01/src/utils.hpp From 51c3aa26fdcfd1836232bfb096132e6f0db48e1e Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sat, 10 Feb 2024 11:01:26 +0000 Subject: [PATCH 03/22] done --- task_01/src/main.cpp | 9 +++++---- task_01/src/test.cpp | 14 ++++++++++++-- task_01/src/utils.cpp | 18 ++++++++++++++++++ task_01/src/utils.hpp | 4 ++++ 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 1c647f1d..5b0faafc 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,6 +1,7 @@ #include +#include -int main() { - std::cout << "hello world"; - return 0; - } \ No newline at end of file +#include "util.hpp" +#include "utils.hpp" + +int main() { return 0; } \ No newline at end of file diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index babf52ce..e9327fe4 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -1,8 +1,18 @@ #include -#include "utils.hpp" +#include +#include "utils.hpp" +std::vector test_arr_1 = {1, 2, 3, 4, 5, 7, 8, 12}; +std::vector test_arr_2 = {1, 1, 1, 1}; +std::vector test_arr_3 = {}; TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] + ASSERT_EQ(FindSummands(test_arr_1, 7), (std::pair{2, 5})); + ASSERT_EQ(FindSummands(test_arr_1, 13), (std::pair{1, 12})); + ASSERT_EQ(FindSummands(test_arr_1, 21), (std::pair{NULL, NULL})); + ASSERT_EQ(FindSummands(test_arr_1, -1), (std::pair{NULL, NULL})); + ASSERT_EQ(FindSummands(test_arr_2, 3), (std::pair{NULL, NULL})); + ASSERT_EQ(FindSummands(test_arr_2, 2), (std::pair{1, 1})); + ASSERT_EQ(FindSummands(test_arr_3, 0), (std::pair{NULL, NULL})); } diff --git a/task_01/src/utils.cpp b/task_01/src/utils.cpp index 0ee624c5..7190011a 100644 --- a/task_01/src/utils.cpp +++ b/task_01/src/utils.cpp @@ -1 +1,19 @@ #include "utils.hpp" + +#include +#include + +std::pair FindSummands(const std::vector array, int number) { + int ptr_1 = 0; + int ptr_2 = array.size() - 1; + + while (ptr_1 < ptr_2) { + int summand_1 = array[ptr_1]; + int summand_2 = array[ptr_2]; + int sum = summand_1 + summand_2; + if (sum == number) return std::pair{summand_1, summand_2}; + if (sum < number) ptr_1++; + if (sum > number) ptr_2--; + } + return std::pair{NULL, NULL}; +} \ No newline at end of file diff --git a/task_01/src/utils.hpp b/task_01/src/utils.hpp index 6f70f09b..60ef4424 100644 --- a/task_01/src/utils.hpp +++ b/task_01/src/utils.hpp @@ -1 +1,5 @@ #pragma once +#include +#include + +std::pair FindSummands(const std::vector array, int number); \ No newline at end of file From f21a713f428ebc99eafa774359a06f72abd27f0c Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 18 Feb 2024 16:20:17 +0000 Subject: [PATCH 04/22] fixed --- task_01/src/test.cpp | 25 ++++++++++++++----------- task_01/src/utils.cpp | 26 +++++++++++++++----------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index e9327fe4..936b315d 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -1,18 +1,21 @@ #include +#include #include #include "utils.hpp" -std::vector test_arr_1 = {1, 2, 3, 4, 5, 7, 8, 12}; -std::vector test_arr_2 = {1, 1, 1, 1}; -std::vector test_arr_3 = {}; -TEST(TopologySort, Simple) { - ASSERT_EQ(FindSummands(test_arr_1, 7), (std::pair{2, 5})); - ASSERT_EQ(FindSummands(test_arr_1, 13), (std::pair{1, 12})); - ASSERT_EQ(FindSummands(test_arr_1, 21), (std::pair{NULL, NULL})); - ASSERT_EQ(FindSummands(test_arr_1, -1), (std::pair{NULL, NULL})); - ASSERT_EQ(FindSummands(test_arr_2, 3), (std::pair{NULL, NULL})); - ASSERT_EQ(FindSummands(test_arr_2, 2), (std::pair{1, 1})); - ASSERT_EQ(FindSummands(test_arr_3, 0), (std::pair{NULL, NULL})); +TEST(utils, Simple) { + ASSERT_EQ(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 7), + (std::pair{2, 5})); + ASSERT_EQ(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 13), + (std::pair{1, 12})); + EXPECT_THROW(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 21), + std::logic_error); + EXPECT_THROW(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, -1), + std::logic_error); + EXPECT_THROW(FindSummands(std::vector{1, 1, 1, 1}, 3), std::logic_error); + ASSERT_EQ(FindSummands(std::vector{1, 1, 1, 1}, 2), + (std::pair{1, 1})); + EXPECT_THROW(FindSummands(std::vector{}, 0), std::logic_error); } diff --git a/task_01/src/utils.cpp b/task_01/src/utils.cpp index 7190011a..afabe05f 100644 --- a/task_01/src/utils.cpp +++ b/task_01/src/utils.cpp @@ -1,19 +1,23 @@ #include "utils.hpp" #include +#include +#include #include +#include std::pair FindSummands(const std::vector array, int number) { - int ptr_1 = 0; - int ptr_2 = array.size() - 1; + int first_index = 0; + int second_index = array.size() - 1; - while (ptr_1 < ptr_2) { - int summand_1 = array[ptr_1]; - int summand_2 = array[ptr_2]; - int sum = summand_1 + summand_2; - if (sum == number) return std::pair{summand_1, summand_2}; - if (sum < number) ptr_1++; - if (sum > number) ptr_2--; + while (first_index < second_index) { + int first_summand = array[first_index]; + int second_summand = array[second_index]; + int sum = first_summand + second_summand; + if (sum == number) + return std::pair{first_summand, second_summand}; + if (sum < number) first_index++; + if (sum > number) second_index--; } - return std::pair{NULL, NULL}; -} \ No newline at end of file + throw std::logic_error("Unable to find the right elements"); +} From 72fb4315d79ea1a50e9de162912deaee11a09382 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sat, 24 Feb 2024 10:01:18 +0000 Subject: [PATCH 05/22] fixed_again --- task_01/src/test.cpp | 8 ++++---- task_01/src/utils.cpp | 2 +- task_01/src/utils.hpp | 6 ++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index 936b315d..3cee3f68 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -11,11 +11,11 @@ TEST(utils, Simple) { ASSERT_EQ(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 13), (std::pair{1, 12})); EXPECT_THROW(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 21), - std::logic_error); + NoAnswer); EXPECT_THROW(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, -1), - std::logic_error); - EXPECT_THROW(FindSummands(std::vector{1, 1, 1, 1}, 3), std::logic_error); + NoAnswer); + EXPECT_THROW(FindSummands(std::vector{1, 1, 1, 1}, 3), NoAnswer); ASSERT_EQ(FindSummands(std::vector{1, 1, 1, 1}, 2), (std::pair{1, 1})); - EXPECT_THROW(FindSummands(std::vector{}, 0), std::logic_error); + EXPECT_THROW(FindSummands(std::vector{}, 0), NoAnswer); } diff --git a/task_01/src/utils.cpp b/task_01/src/utils.cpp index afabe05f..7a8ff8f0 100644 --- a/task_01/src/utils.cpp +++ b/task_01/src/utils.cpp @@ -19,5 +19,5 @@ std::pair FindSummands(const std::vector array, int number) { if (sum < number) first_index++; if (sum > number) second_index--; } - throw std::logic_error("Unable to find the right elements"); + throw NoAnswer("Unable to find the right elements"); } diff --git a/task_01/src/utils.hpp b/task_01/src/utils.hpp index 60ef4424..d760cf67 100644 --- a/task_01/src/utils.hpp +++ b/task_01/src/utils.hpp @@ -1,5 +1,11 @@ #pragma once +#include #include #include +class NoAnswer : public std::runtime_error { + public: + using std::runtime_error::runtime_error; +}; + std::pair FindSummands(const std::vector array, int number); \ No newline at end of file From b3811f49127a7bc6c006133ed10338585228099a Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sat, 4 May 2024 19:25:11 +0000 Subject: [PATCH 06/22] Add some theory --- ...0\262\320\260\320\275\320\270\320\265).md" | 32 +++++++++++++++++++ ...20\273\320\270\320\267\320\270\320\270.md" | 22 +++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 "doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272 (\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" create mode 100644 "doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" diff --git "a/doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272 (\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" "b/doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272 (\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" new file mode 100644 index 00000000..1e101914 --- /dev/null +++ "b/doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272 (\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" @@ -0,0 +1,32 @@ +# **Метод цепочек (открытое хеширование).** +Хэш-таблицы представляют собой эффективную структуру данных, позволяющую осуществлять хранение и поиск информации. Однако, при использовании хэш-таблиц возможно возникновение ситуаций, когда два или более ключей отображаются в одну и ту же ячейку таблицы, что называется коллизией. Для разрешения подобных проблем существует ряд методов, среди которых особое место занимает метод цепочек. + +Идея метода цепочек заключается в том, что в случае если хеш-функция выделяет один индекс сразу двум элементам, то храниться они будут в одном и том же индексе, но уже с помощью двусвязного списка. +> Если ```j``` — ячейка для нескольких элементов, то она содержит указатель на первый элемент списка. Если же ```j``` пуста, то она содержит ```NULL```. +![](https://lh3.googleusercontent.com/Yd-JtIVQlDI9U9b7N3miEc_McdYR2nTT2ruVNPA3cQ0dJ-Rn8OPmkMHjrQGNqUh39hoBV8En3-pGpmvuLYA1OQ1pcCc--EaOQXmDSdDrKBsNYNoBYh5jzSIxY6kRLSMnlOSCrIWr) +*** +**Псевдокод операций** +```python +class HashTable: + size: int + table[]: list + def Insert(value): + index = hash(value) + table[index].push_front(value) + + def Search(value): + index = hash(value) + for elem in table[index]: + if elem == value: + return True + return False + + def Remove(value): + index = hash(value) + for elem in table[index]: + if elem == value: + previous_elem = elem->prev + next_elem = elem->next + previous_elem->next = next_elem + + \ No newline at end of file diff --git "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" new file mode 100644 index 00000000..8481534a --- /dev/null +++ "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" @@ -0,0 +1,22 @@ +# **Хеш-таблицы. Понятие коллизии.** +>**Хеш-табли́ца** (англ. hash-table) — структура данных, реализующая интерфейс ассоциативного массива. В отличие от деревьев поиска, реализующих тот же интерфейс, обеспечивают меньшее время отклика в среднем. Представляет собой эффективную структуру данных для реализации словарей, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу. + +Особенность этой структуры данных в том, что стандартные операции: вставка, чтение и удаление данных, она, в среднем, выполняет за константное время **O(1)**, то есть, быстро и не зависимо от размера таблицы (объема данных): + +![](https://i.imgur.com/yjgw3Tf.png) + +Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и **списками**. Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). + +Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение +```i = hash(key)``` + +играет роль индекса в массиве ```H[]```. Затем выполняемая операция (добавление, удаление или поиск) перенаправляется объекту, который хранится в соответствующей ячейке массива. Затем выполняемая операция (добавление, удаление или поиск) перенаправляется объекту, который хранится в соответствующей ячейке массива ```H[i]``` + + +Ситуация, когда для различных ключей получается одно и то же хеш-значение, называется коллизией. Такие события не так уж и редки — например, при вставке в хеш-таблицу размером 365 ячеек всего лишь 23 элементов вероятность коллизии уже превысит 50% (если каждый элемент может равновероятно попасть в любую ячейку). Поэтому механизм разрешения коллизий — важная составляющая любой хеш-таблицы. + +В некоторых специальных случаях удаётся избежать коллизий вообще. Например, если все ключи элементов известны заранее (или очень редко меняются), то для них можно найти некоторую совершенную хеш-функцию, которая распределит их по ячейкам хеш-таблицы без коллизий. Хеш-таблицы, использующие подобные хеш-функции, не нуждаются в механизме разрешения коллизий, и называются хеш-таблицами с прямой адресацией. + +> Число хранимых элементов, делённое на размер массива ```H[]``` (число возможных значений хеш-функции), называется **коэффициентом заполнения хеш-таблицы** (load factor) и является важным параметром, от которого зависит среднее время выполнения операций. + + From fb06c11f446fa6bd29b554d8727189192672719c Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 5 May 2024 17:09:50 +0000 Subject: [PATCH 07/22] Delete solve --- task_01/src/utils.cpp | 23 ----------------------- task_01/src/utils.hpp | 11 ----------- 2 files changed, 34 deletions(-) delete mode 100644 task_01/src/utils.cpp delete mode 100644 task_01/src/utils.hpp diff --git a/task_01/src/utils.cpp b/task_01/src/utils.cpp deleted file mode 100644 index 7a8ff8f0..00000000 --- a/task_01/src/utils.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "utils.hpp" - -#include -#include -#include -#include -#include - -std::pair FindSummands(const std::vector array, int number) { - int first_index = 0; - int second_index = array.size() - 1; - - while (first_index < second_index) { - int first_summand = array[first_index]; - int second_summand = array[second_index]; - int sum = first_summand + second_summand; - if (sum == number) - return std::pair{first_summand, second_summand}; - if (sum < number) first_index++; - if (sum > number) second_index--; - } - throw NoAnswer("Unable to find the right elements"); -} diff --git a/task_01/src/utils.hpp b/task_01/src/utils.hpp deleted file mode 100644 index d760cf67..00000000 --- a/task_01/src/utils.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include -#include -#include - -class NoAnswer : public std::runtime_error { - public: - using std::runtime_error::runtime_error; -}; - -std::pair FindSummands(const std::vector array, int number); \ No newline at end of file From f29991832ec8a4f1ad32bee58170067855200cc7 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 5 May 2024 17:11:47 +0000 Subject: [PATCH 08/22] add files --- task_01/src/topology_sort.cpp | 23 +++++++++++++++++++++++ task_01/src/topology_sort.hpp | 11 +++++++++++ 2 files changed, 34 insertions(+) create mode 100644 task_01/src/topology_sort.cpp create mode 100644 task_01/src/topology_sort.hpp diff --git a/task_01/src/topology_sort.cpp b/task_01/src/topology_sort.cpp new file mode 100644 index 00000000..7a8ff8f0 --- /dev/null +++ b/task_01/src/topology_sort.cpp @@ -0,0 +1,23 @@ +#include "utils.hpp" + +#include +#include +#include +#include +#include + +std::pair FindSummands(const std::vector array, int number) { + int first_index = 0; + int second_index = array.size() - 1; + + while (first_index < second_index) { + int first_summand = array[first_index]; + int second_summand = array[second_index]; + int sum = first_summand + second_summand; + if (sum == number) + return std::pair{first_summand, second_summand}; + if (sum < number) first_index++; + if (sum > number) second_index--; + } + throw NoAnswer("Unable to find the right elements"); +} diff --git a/task_01/src/topology_sort.hpp b/task_01/src/topology_sort.hpp new file mode 100644 index 00000000..d760cf67 --- /dev/null +++ b/task_01/src/topology_sort.hpp @@ -0,0 +1,11 @@ +#pragma once +#include +#include +#include + +class NoAnswer : public std::runtime_error { + public: + using std::runtime_error::runtime_error; +}; + +std::pair FindSummands(const std::vector array, int number); \ No newline at end of file From 81a10e7b5f2329357e607f76bba773f223803de5 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 5 May 2024 17:13:42 +0000 Subject: [PATCH 09/22] some fix --- task_01/src/test.cpp | 16 +--------------- task_01/src/topology_sort.cpp | 24 +----------------------- 2 files changed, 2 insertions(+), 38 deletions(-) diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index 3cee3f68..eae79658 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -4,18 +4,4 @@ #include #include -#include "utils.hpp" -TEST(utils, Simple) { - ASSERT_EQ(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 7), - (std::pair{2, 5})); - ASSERT_EQ(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 13), - (std::pair{1, 12})); - EXPECT_THROW(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, 21), - NoAnswer); - EXPECT_THROW(FindSummands(std::vector{1, 2, 3, 4, 5, 7, 8, 12}, -1), - NoAnswer); - EXPECT_THROW(FindSummands(std::vector{1, 1, 1, 1}, 3), NoAnswer); - ASSERT_EQ(FindSummands(std::vector{1, 1, 1, 1}, 2), - (std::pair{1, 1})); - EXPECT_THROW(FindSummands(std::vector{}, 0), NoAnswer); -} +#include "topology_sort.hpp" diff --git a/task_01/src/topology_sort.cpp b/task_01/src/topology_sort.cpp index 7a8ff8f0..84927102 100644 --- a/task_01/src/topology_sort.cpp +++ b/task_01/src/topology_sort.cpp @@ -1,23 +1 @@ -#include "utils.hpp" - -#include -#include -#include -#include -#include - -std::pair FindSummands(const std::vector array, int number) { - int first_index = 0; - int second_index = array.size() - 1; - - while (first_index < second_index) { - int first_summand = array[first_index]; - int second_summand = array[second_index]; - int sum = first_summand + second_summand; - if (sum == number) - return std::pair{first_summand, second_summand}; - if (sum < number) first_index++; - if (sum > number) second_index--; - } - throw NoAnswer("Unable to find the right elements"); -} +#include "topology_sort.hpp" \ No newline at end of file From 8f4fefdfa640f5b8aa0119a9410e944938943972 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 5 May 2024 17:15:09 +0000 Subject: [PATCH 10/22] some fix --- task_01/src/main.cpp | 3 +-- task_01/src/topology_sort.hpp | 10 ---------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 5b0faafc..c2dfe125 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,7 +1,6 @@ #include #include -#include "util.hpp" -#include "utils.hpp" +#include "topology_sort.hpp" int main() { return 0; } \ No newline at end of file diff --git a/task_01/src/topology_sort.hpp b/task_01/src/topology_sort.hpp index d760cf67..6f70f09b 100644 --- a/task_01/src/topology_sort.hpp +++ b/task_01/src/topology_sort.hpp @@ -1,11 +1 @@ #pragma once -#include -#include -#include - -class NoAnswer : public std::runtime_error { - public: - using std::runtime_error::runtime_error; -}; - -std::pair FindSummands(const std::vector array, int number); \ No newline at end of file From 4742926b9a2f591a94c1d24d31ebf0ef78bae27f Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 5 May 2024 17:17:42 +0000 Subject: [PATCH 11/22] some fix --- task_01/src/main.cpp | 3 --- task_01/src/test.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index c2dfe125..9ec81e03 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,6 +1,3 @@ #include -#include - -#include "topology_sort.hpp" int main() { return 0; } \ No newline at end of file diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index eae79658..31c34d98 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -1,7 +1,7 @@ - #include -#include -#include - #include "topology_sort.hpp" + +TEST(TopologySort, Simple) { + ASSERT_EQ(1, 1); // Stack [] +} \ No newline at end of file From da50cbb3a888eb20ca7b6455f5babe6092302818 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Tue, 7 May 2024 13:31:28 +0000 Subject: [PATCH 12/22] add link --- ...\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" index 8481534a..1912823d 100644 --- "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" +++ "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" @@ -5,7 +5,7 @@ ![](https://i.imgur.com/yjgw3Tf.png) -Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и **списками**. Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). +Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и [**списками**] (Метод цепочек (открытое хеширование).md "Метод цепочек"). Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение ```i = hash(key)``` From e7148ed63f62816c23144f79feabbeb2f6bda3e7 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Tue, 7 May 2024 13:38:51 +0000 Subject: [PATCH 13/22] add link --- ...321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" | 0 ...\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename "doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272 (\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" => "doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272(\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" (100%) diff --git "a/doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272 (\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" "b/doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272(\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" similarity index 100% rename from "doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272 (\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" rename to "doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272(\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" diff --git "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" index 1912823d..678ee3f6 100644 --- "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" +++ "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" @@ -5,7 +5,7 @@ ![](https://i.imgur.com/yjgw3Tf.png) -Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и [**списками**] (Метод цепочек (открытое хеширование).md "Метод цепочек"). Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). +Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и [**списками**](Метод цепочек(открытое хеширование).md "Метод цепочек"). Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение ```i = hash(key)``` From b21c2fb9fcc8e4e02ddf52d3cd6fe0b31b6c9af5 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Tue, 7 May 2024 13:41:03 +0000 Subject: [PATCH 14/22] add link --- ...\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" index 678ee3f6..d6088fb4 100644 --- "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" +++ "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" @@ -5,7 +5,7 @@ ![](https://i.imgur.com/yjgw3Tf.png) -Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и [**списками**](Метод цепочек(открытое хеширование).md "Метод цепочек"). Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). +Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и [**списками**](doc/Метод цепочек(открытое хеширование).md "Метод цепочек"). Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение ```i = hash(key)``` From e1c09455382bb90b981f71e76be49de8486cae32 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Tue, 7 May 2024 16:55:06 +0300 Subject: [PATCH 15/22] fix link which does not work --- ...\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" index d6088fb4..7ef1be40 100644 --- "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" +++ "b/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" @@ -5,7 +5,7 @@ ![](https://i.imgur.com/yjgw3Tf.png) -Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и [**списками**](doc/Метод цепочек(открытое хеширование).md "Метод цепочек"). Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). +Существуют два основных варианта хеш-таблиц: с **открытой адресацией** и [**списками**](Метод цепочек(открытое хеширование).md "Метод цепочек"). Хеш-таблица является массивом элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица со списками). Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение ```i = hash(key)``` From 2c7932d474d87065ee5473988d8d7666a1ddf5de Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 9 Jun 2024 00:56:11 +0300 Subject: [PATCH 16/22] change title --- .../topic4(question 5) | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename "doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272(\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" => doc/topic4(question 5) (99%) diff --git "a/doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272(\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" b/doc/topic4(question 5) similarity index 99% rename from "doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272(\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" rename to doc/topic4(question 5) index 1e101914..169e5f97 100644 --- "a/doc/\320\234\320\265\321\202\320\276\320\264 \321\206\320\265\320\277\320\276\321\207\320\265\320\272(\320\276\321\202\320\272\321\200\321\213\321\202\320\276\320\265 \321\205\320\265\321\210\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265).md" +++ b/doc/topic4(question 5) @@ -29,4 +29,4 @@ class HashTable: next_elem = elem->next previous_elem->next = next_elem - \ No newline at end of file + From b1fddf037beaaa88999055e3bfe94b9b7a0aadfa Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 9 Jun 2024 00:56:56 +0300 Subject: [PATCH 17/22] change title --- .../topic4(question 4) | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" => doc/topic4(question 4) (100%) diff --git "a/doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" b/doc/topic4(question 4) similarity index 100% rename from "doc/\320\245\320\265\321\210-\321\202\320\260\320\261\320\273\320\270\321\206\321\213. \320\237\320\276\320\275\321\217\321\202\320\270\320\265 \320\272\320\276\320\273\320\273\320\270\320\267\320\270\320\270.md" rename to doc/topic4(question 4) From f87a1b26ddf466f425b738a4f1559f898f02b249 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Mon, 17 Jun 2024 01:40:49 +0300 Subject: [PATCH 18/22] delete some files --- task_01/src/topology_sort.cpp | 1 - 1 file changed, 1 deletion(-) delete mode 100644 task_01/src/topology_sort.cpp diff --git a/task_01/src/topology_sort.cpp b/task_01/src/topology_sort.cpp deleted file mode 100644 index 84927102..00000000 --- a/task_01/src/topology_sort.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "topology_sort.hpp" \ No newline at end of file From d62c88602ca8ff91cb4f15065d52c1ed0ad7ac2f Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 16 Jun 2024 22:58:11 +0000 Subject: [PATCH 19/22] fix --- task_01/src/main.cpp | 2 +- task_01/src/test.cpp | 3 ++- task_01/src/toplogy_sort.cpp | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 task_01/src/toplogy_sort.cpp diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 9ec81e03..0e4393ba 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,3 +1,3 @@ #include -int main() { return 0; } \ No newline at end of file +int main() { return 0; } diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index 31c34d98..ef5a86ae 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -1,7 +1,8 @@ + #include #include "topology_sort.hpp" TEST(TopologySort, Simple) { ASSERT_EQ(1, 1); // Stack [] -} \ No newline at end of file +} diff --git a/task_01/src/toplogy_sort.cpp b/task_01/src/toplogy_sort.cpp new file mode 100644 index 00000000..84927102 --- /dev/null +++ b/task_01/src/toplogy_sort.cpp @@ -0,0 +1 @@ +#include "topology_sort.hpp" \ No newline at end of file From 16e5237803d73419690630da6bc51a1fb993c623 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Sun, 16 Jun 2024 23:09:31 +0000 Subject: [PATCH 20/22] fix --- task_01/src/toplogy_sort.cpp | 1 - task_01/src/topology_sort.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 task_01/src/toplogy_sort.cpp create mode 100644 task_01/src/topology_sort.cpp diff --git a/task_01/src/toplogy_sort.cpp b/task_01/src/toplogy_sort.cpp deleted file mode 100644 index 84927102..00000000 --- a/task_01/src/toplogy_sort.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "topology_sort.hpp" \ No newline at end of file diff --git a/task_01/src/topology_sort.cpp b/task_01/src/topology_sort.cpp new file mode 100644 index 00000000..e53f670c --- /dev/null +++ b/task_01/src/topology_sort.cpp @@ -0,0 +1 @@ +#include "topology_sort.hpp" From 6df1b2450a4ce36d6856f0fc4fd67adcf5c36210 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Mon, 17 Jun 2024 23:52:21 +0000 Subject: [PATCH 21/22] fix --- doc/{topic4(question 4) => topic4/question4.md} | 0 doc/{topic4(question 5) => topic4/question5.md} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename doc/{topic4(question 4) => topic4/question4.md} (100%) rename doc/{topic4(question 5) => topic4/question5.md} (100%) diff --git a/doc/topic4(question 4) b/doc/topic4/question4.md similarity index 100% rename from doc/topic4(question 4) rename to doc/topic4/question4.md diff --git a/doc/topic4(question 5) b/doc/topic4/question5.md similarity index 100% rename from doc/topic4(question 5) rename to doc/topic4/question5.md From 14a9aed04f973285ba5dc36d333b4f6606a594b5 Mon Sep 17 00:00:00 2001 From: dfsavffc <144057175+dfsavffc@users.noreply.github.com> Date: Mon, 17 Jun 2024 23:58:41 +0000 Subject: [PATCH 22/22] fix --- doc/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.md b/doc/README.md index 0221d4d5..515971e4 100644 --- a/doc/README.md +++ b/doc/README.md @@ -75,8 +75,8 @@ - Хеш-функции. Остаток от деления, мультипликативная. - Деление многочленов - CRC. - Полиномиальная. Ее использование для строк. Метод Горнера для уменьшения количества операций умножения при ее вычислении. -- Хеш-таблицы. Понятие коллизии. -- Метод цепочек (открытое хеширование). +- [Хеш-таблицы. Понятие коллизии.](topic4/question4.md) +- [Метод цепочек (открытое хеширование).](topic4/question5.md) - Метод прямой адресации (закрытое хеширование). - Линейное пробирование. Проблема кластеризации. - Квадратичное пробирование.