Compare commits

..

22 Commits
main ... lab1

Author SHA1 Message Date
a939b76273 Увеличение выборки, исправление сортировки и работы дерева 2026-05-14 02:10:03 +03:00
6554e2ada1 оформление графиков, по полученным данным 2026-05-14 01:16:37 +03:00
62795e88ba Обновление csvwriter
- Функция создания пустого файла
- Разобрался с директорией для сохранения файла
2026-05-13 22:51:35 +03:00
6e259a4770 Исправленны ошибки и написаны мини тесты для всех структур 2026-05-13 22:03:54 +03:00
b3688d3ed9 Изменил работу со структурами, чтобы они походили под интерфейсы 2026-05-13 21:25:29 +03:00
bc6ece83d0 Начало написания тестов 2026-05-10 19:16:18 +03:00
b9c4421127 удаление сортировки для хештаблицы (реализована в MyData) 2026-05-10 12:33:22 +03:00
4a214a2843 Изменение иерархии
- добавеление в отлсеживание go.mod
 - перенос хеш таблицы на общий формат хранения данных
 - удаление лишних
2026-05-10 12:30:21 +03:00
1b21f97e28 Изменение иерархии проекта
- test/ -- папка с файлами для тестов каждой структуры
- pkg/ -- папка с реализациями и вспомогательными модулями
2026-05-09 22:34:03 +03:00
7e045c71e0 Переписан LinkedLIst на Go 2026-05-09 21:11:45 +03:00
9b92dcc206 Переписан тест для BST с C на Go 2026-05-09 20:02:11 +03:00
d616bfe1fb Реализация bst переписана на Go 2026-05-09 19:27:57 +03:00
14e6c71416 Merge branch 'lab1' of http://31.128.43.79:3000/stepushovgs/2026-rff_mp into lab1 2026-05-07 14:28:09 +03:00
0e7a03e784 Обновление
- Изменение структуры лабораторной работы
- Завершение библитеки для Бинарного дерева поиска
2026-05-07 14:28:06 +03:00
b638d6c169 update bin tree 2026-04-30 16:11:36 +03:00
62e1b34fd0 Setup gitignore for data-structure 2026-04-20 11:03:49 +03:00
10f35b3ac3 update gitignore for c 2026-04-19 00:33:46 +03:00
d9d935c0bf implementing a linked list
- insert
- delete
- find
- listAll
2026-04-19 00:31:51 +03:00
c9947a713f move gitignore 2026-04-16 22:27:29 +03:00
10445d4940 add gitignore 2026-04-16 22:23:45 +03:00
5e85fa060b init lab1 2026-04-16 22:21:02 +03:00
7fec6872a1 [0] initial commit 2026-02-14 11:41:46 +03:00
31 changed files with 3306 additions and 0 deletions

View File

@ -160,3 +160,97 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
# debug information files
*.dwo
#################################
############## Go ###############
#################################
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Code coverage profiles and other test artifacts
*.out
coverage.*
*.coverprofile
profile.cov
# Dependency directories (remove the comment below to include it)
# vendor/
# Go workspace file
go.work
go.work.sum
# env file
.env
# Editor/IDE
# .idea/
.vscode/
!go.mod

1
stepushovgs/427 Normal file
View File

@ -0,0 +1 @@
427

View File

@ -0,0 +1,208 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bst.h"
#include "queue.h"
/*
3. Двоичное дерево поиска
Узел словарь: `{'val': '123', 'left': None, 'right': None}.`
Функции:
def bst_insert(root, name, phone) рекурсивно или итеративно вставляет, возвращает новый корень (если корень меняется).
def bst_find(root, name) поиск.
def bst_delete(root, name) удаление, возвращает новый корень.
def bst_list_all(root) центрированный обход (рекурсивно собирает записи в отсортированном порядке).
*/
bst_node* create_bst_node(char name[NAME_LEN], char phone[PHONE_LEN])
{
bst_node* node = (bst_node*)malloc(sizeof(bst_node));
strcpy(node->name, name);
strcpy(node->phone, phone);
node->left = NULL;
node->right = NULL;
return node;
}
bst_node* bst_minimum(bst_node* node)
{
if (node->left == NULL)
return node;
return bst_minimum(node->left);
}
bst_node* bst_maximum(bst_node* node)
{
if (node->right == NULL)
return node;
return bst_maximum(node->right);
}
void print_bst(bst_node node)
{
//printf("value: %d\n", node.value);
printf("name: %s, phone: %s\n", node.name, node.phone);
}
void bst_inorder_traversal(bst_node* HEAD)
{
if (HEAD != NULL)
{
bst_inorder_traversal(HEAD->left);
print_bst(*HEAD);
bst_inorder_traversal(HEAD->right);
}
}
void bst_preorder_traversal(bst_node* HEAD)
{
if (HEAD != NULL)
{
print_bst(*HEAD);
bst_preorder_traversal(HEAD->left);
bst_preorder_traversal(HEAD->right);
}
}
bst_node* bst_search(bst_node* HEAD, char target_name[NAME_LEN])
{
/*
Node search(x : Node, k : T):
if x == null or k == x.key
return x
if k < x.key
return search(x.left, k)
else
return search(x.right, k)
*/
if ((HEAD == NULL) || strcmp(HEAD->name, target_name) == 0)
{
return HEAD;
}
if (strcmp(target_name, HEAD->name) < 0)
{
return bst_search(HEAD->left, target_name);
}
else
{
return bst_search(HEAD->right, target_name);
}
}
bst_node* bst_insert(bst_node* HEAD, char name[NAME_LEN], char phone[PHONE_LEN])
{
/*
Node insert(x : Node, z : T): // x — корень поддерева, z — вставляемый ключ
if x == null
return Node(z) // подвесим Node с key = z
else if z < x.key
x.left = insert(x.left, z)
else if z > x.key
x.right = insert(x.right, z)
return x
*/
if (HEAD == NULL)
{
return create_bst_node(name, phone);
}
else if (strcmp(name, HEAD->name) < 0)
{
HEAD->left = bst_insert(HEAD->left, name, phone);
}
else if (strcmp(name, HEAD->name) > 0)
{
HEAD->right = bst_insert(HEAD->right, name, phone);
}
return HEAD;
}
bst_node* bst_delete(bst_node* root, char target_name[NAME_LEN])
{ // корень поддерева, удаляемый ключ
if (root == NULL)
return root;
if (strcmp(target_name, root->name) < 0)
root->left = bst_delete(root->left, target_name);
else if (strcmp(target_name, root->name) > 0)
root->right = bst_delete(root->right, target_name);
else {
if (root->left != NULL && root->right != NULL)
{
strcpy(root->name, bst_minimum(root->right)->name);
strcpy(root->phone, bst_minimum(root->right)->phone);
root->right = bst_delete(root->right, root->name);
}
else
{
bst_node* temp = root;
if (root->left != NULL)
root = root->left;
else
root = root->right;
free(temp);
}
}
return root;
}
void delete_bst(bst_node* root)
{
if (root == NULL)
return;
else
{
delete_bst(root->left);
delete_bst(root->right);
free(root);
}
}
void printTree(bst_node* node, int depth) {
if (node == NULL) return;
printTree(node->right, depth + 1);
for (int i = 0; i < depth; i++)
printf("\t");
//printf("%d\n", node->value);
print_bst(*node);
printTree(node->left, depth + 1);
}
void treeLevelTraversal(bst_node* node) {
if (!node) return;
Queue q;
Queue* hq = &q;
queueInit(hq);
queuePush(hq, node);
while(!queueEmpty(hq))
{
bst_node* hn = queuePop(hq);
//printf("%d\n", hn->value);
print_bst(*hn);
if(hn->left)
queuePush(hq, hn->left);
if(hn->right)
queuePush(hq, hn->right);
};
};

View File

@ -0,0 +1,37 @@
#define NAME_LEN 20
#define PHONE_LEN 20
typedef struct bst_node
{
//int value;
char name[NAME_LEN];
char phone[PHONE_LEN];
struct bst_node* right;
struct bst_node* left;
}bst_node;
bst_node* create_bst_node(char name[NAME_LEN], char phone[PHONE_LEN]);
bst_node* bst_minimum(bst_node* node);
bst_node* bst_maximum(bst_node* node);
void print_bst(bst_node node);
void bst_inorder_traversal(bst_node* HEAD);
void bst_preorder_traversal(bst_node* HEAD);
bst_node* bst_search(bst_node* HEAD, char target_name[NAME_LEN]);
bst_node* bst_insert(bst_node* HEAD, char name[NAME_LEN], char phone[PHONE_LEN]);
bst_node* bst_delete(bst_node* root, char target_name[NAME_LEN]);
void treeLevelTraversal(bst_node* node);
void printTree(bst_node* node, int depth);
void delete_bst(bst_node* root);

View File

@ -0,0 +1,42 @@
#include <stdlib.h>
#include "queue.h"
int queueEmpty(Queue* q)
{
return (q->head == q->tail);
}
int size(Queue* q)
{
if (q->head > q->tail)
return QUEUE_MAX_LENGTH - q->head + q->tail;
else
return q->tail - q->head;
}
void queuePush(Queue* q, void* ptr)
{
if (size(q) != QUEUE_MAX_LENGTH)
{
q->p[q->tail] = ptr;
q->tail = (q->tail + 1) % QUEUE_MAX_LENGTH;
}
};
void queueInit(Queue* q)
{
q->head = 0;
q->tail = 0;
}
void* queuePop(Queue* q)
{
if (queueEmpty(q))
return NULL;
void* x = q->p[q->head];
q->head = (q->head + 1) % QUEUE_MAX_LENGTH;
return x;
};

View File

@ -0,0 +1,17 @@
#define QUEUE_MAX_LENGTH 100
typedef struct Queue {
void* p[QUEUE_MAX_LENGTH];
unsigned int head;
unsigned int tail;
} Queue;
int queueEmpty(Queue* q);
void queuePush(Queue* q, void* p);
void* queuePop(Queue* q);
void queueInit(Queue* q);
int size(Queue* q);

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,3 @@
module source
go 1.26.3

View File

@ -0,0 +1,166 @@
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "linked_list.h"
/*
Связный список (LinkedListPhoneBook)
Узел представляется словарём: `{'name': 'Имя', 'phone': '123', 'next': None}.`
Функции:
def ll_insert(head, name, phone) проходит до конца (или сразу добавляет в конец) и возвращает новую голову (если вставка в начало) или изменяет список по ссылке. Удобнее возвращать новую голову, если вставка может быть в начало.
def ll_find(head, name) ищет узел, возвращает телефон или None.
def ll_delete(head, name) удаляет узел, возвращает новую голову.
def ll_list_all(head) собирает все записи в список и сортирует (сортировка вынесена отдельно).
*/
int getListNodeLength(Node* HEAD)
{
int len = 0;
Node* current = HEAD;
while (current != NULL)
{
len++;
current = current->next;
}
return len;
}
// Добавление в конец
Node* insert(Node* head, char name[NAME_BUFF_SIZE], char phone[PHONE_BUFF_SIZE], int show)
{
Node* newNode = (Node*)malloc(sizeof(Node));
strcpy_s(newNode->name_, NAME_BUFF_SIZE, name);
strcpy_s(newNode->phone_, PHONE_BUFF_SIZE, phone);
newNode->next = NULL;
printf("Data: %s %s\n", name, phone);
printf("New Data: %s %s\n", newNode->name_, newNode->phone_);
if (head == NULL)
{
printf("\nNew list\n");
head = newNode;
return newNode;
}
Node* last = head;
int ind = 0;
while (last->next != NULL)
{
if (show == 1)
printf("%d \n", ind++);
last = last->next;
}
last->next = newNode;
return head;
}
char* find(Node* HEAD, char target_name[NAME_BUFF_SIZE])
{
Node* current = HEAD;
while (current != NULL)
{
if (strcmp(target_name, current->name_) == 0)
{
return current->phone_;
}
current = current->next;
}
return NULL;
}
// Вывод всех элементов
void printAllNodes(Node* head)
{
Node* current = head;
int ind = 0;
while (current != NULL)
{
printf("Ind: %d\nName: %s\nPhone: %s\n", ind++, current->name_, current->phone_);
current = current->next;
}
}
Node* deleteNode(Node* HEAD, char target_name[NAME_BUFF_SIZE])
{
Node* previous = NULL;
Node* current = HEAD;
if (current != NULL && strcmp(target_name, current->name_) == 0)
{
HEAD = current->next;
free(current);
return HEAD;
}
while (current != NULL && strcmp(target_name, current->name_) == 0)
{
previous = current;
current = current->next;
}
if (current == NULL) return HEAD;
previous->next = current->next;
free(current);
return HEAD;
}
Node* listAll(Node* HEAD)
{
if (HEAD == NULL)
{
return NULL;
}
int len = getListNodeLength(HEAD);
Node* current = HEAD;
Node* list = (Node*)malloc(len * sizeof(Node));
int ind = 0;
while (current != NULL)
{
list[ind++] = *current;
current = current->next;
}
return list;
}
void printNode(Node node)
{
printf("%s ", node.name_);
printf("%s\n", node.phone_);
}
void printListNode(Node* list, int length)
{
printf("\n\n%d\n", length);
for (int i = 0; i < length; i++)
{
printNode(list[i]);
}
}

View File

@ -0,0 +1,29 @@
#define NAME_BUFF_SIZE 50
#define PHONE_BUFF_SIZE 12+1 // +1 for end symbol
typedef struct Node
{
char name_[NAME_BUFF_SIZE];
char phone_[PHONE_BUFF_SIZE];
struct Node* next;
} Node;
typedef struct LinkedListPhoneNumbers {
Node* HEAD;
} LinkedListPhoneNumbers;
Node* insert(Node* head, char name[NAME_BUFF_SIZE], char phone[PHONE_BUFF_SIZE], int show);
void printAllNodes(Node* head);
void printNode(Node node);
char* find(Node* HEAD, char target_name[NAME_BUFF_SIZE]);
Node* deleteNode(Node* HEAD, char target_name[NAME_BUFF_SIZE]);
Node* listAll(Node* HEAD);
void printListNode(Node list[], int length);
int getListNodeLength(Node* HEAD);

View File

@ -0,0 +1,44 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "linked_list/linked_list.h"
#define NAME_BUFF_SIZE 50
#define PHONE_BUFF_SIZE 12+1 // +1 for end symbol
int main()
{
Node* list = NULL;
char phone[] = "1234";
for (int i = 0; i < 12; i++)
{
char num[3];
sprintf_s(num, 3, "%d", i);
char name[] = "name ";
strcat_s(name, 9, num);
printf("%d %s %s\n", i, name, phone);
list = insert(list, name, phone, 0);
}
char test_name[] = "name 20";
char test_phone[] = "phone 343";
list = insert(list, test_name, test_phone, 1);
printAllNodes(list);
printf("\n%s\n", find(list, test_name));
strcpy_s(test_name, NAME_BUFF_SIZE, "name 10");
list = deleteNode(list, test_name);
printAllNodes(list);
Node* listNodes = listAll(list);
printListNode(listNodes, getListNodeLength(list));
free(listNodes);
return 0;
}

View File

@ -0,0 +1,86 @@
#include <stdio.h>
#include <stdlib.h>
#include "bin_search_tree/bst.h"
#define COUNT_NUMBERS 64
int isInArr(int arr[], int len, int target)
{
for (int i = 0; i < len; i++)
{
if (arr[i] == target) return 1;
}
return 0;
}
char get_dozen(int number)
{
return (char)'0' + number % 10;
}
char get_units(int number)
{
return (char)'0' + number / 10;
}
int main()
{
printf("hello world!\n");
//bst_node* head = create_bst_node("name", "phone");
bst_node* head = NULL;
int arr[COUNT_NUMBERS] = {0};
char name[NAME_LEN] = "name_xx";
char phone[PHONE_LEN] = "phone_xx";
int temp = 0;
for (int i = 0; i < COUNT_NUMBERS; i++)
{
do
{
temp = rand() % 100;
}
while (isInArr(arr, i - 1, temp));
arr[i] = temp;
name[5] = get_dozen(temp);
name[6] = get_units(temp);
phone[6] = get_dozen(temp);
phone[7] = get_units(temp);
head = bst_insert(head, name, phone);
printf("%d ", arr[i]);
}
printf("\n\ninorder traversal: \n");
bst_inorder_traversal(head);
printf("\n\npreorder traversal: \n");
bst_preorder_traversal(head);
char tar_name[NAME_LEN] = "name_44";
printf("\n\nУдаляем элемент с значением %s:\n", tar_name);
head = bst_delete(head, tar_name);
bst_inorder_traversal(head);
printf("\n\nВывод дерева:\n");
printTree(head, 0);
printf("\n\nОбход в ширину:\n");
treeLevelTraversal(head);
delete_bst(head);
return 0;
}

View File

@ -0,0 +1,40 @@
#include <stdio.h>
int Partition_Hoa(int arr[], int l, int r)
{
int p = arr[(l + r) / 2];
int i = l;
int j = r;
while (1)
{
// #print(p)
while (arr[i] <= p) i++;
while (arr[j] > p) j--;
if (i >= j) return j;
swap(arr[i], arr[j]);
i++;
j--;
}
}
void QuickSort(int arr[], int l, int r)
{
if (l < r):
{
int s = Partition_Hoa(arr, l, r);
QuickSort(arr, l, s-1);
QuickSort(arr, s+1, r);
}
}
int main()
{
int arr[] = {2, 56, 10, 5, 2, 6, 9, 6, 3, 923, 3, 2, 1};
return 0;
}

View File

@ -0,0 +1,81 @@
package csvwriter
import (
"encoding/csv"
"fmt"
"os"
"path/filepath"
)
type BenchmarkResult struct {
Structure string
Mode string
Operation string
Time float64
}
func (b *BenchmarkResult) ToString() string {
return fmt.Sprintf("%s %s %s %f", b.Structure, b.Mode, b.Operation, b.Time)
}
func (b *BenchmarkResult) ToStrings() []string {
return []string{b.Structure, b.Mode, b.Operation, fmt.Sprintf("%f", b.Time)}
}
// Создаём пустой csv файл с заголовками
func CreateEmptyCSV(dir, name string) error {
filename := filepath.Join(dir, name)
file, err := os.Create(filename)
if err != nil {
return err
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
header := []string{"Structure", "Mode", "Operation", "Time"}
writer.Write(header)
return writer.Error()
}
// AppendRaw дописывает произвольные строки в CSV
func AppendRaw(results []BenchmarkResult) error {
filename := filepath.Join("results", "benchmarks.csv")
fileExists := true
isEmpty := true
if info, err := os.Stat(filename); err == nil {
isEmpty = info.Size() == 0
} else if os.IsNotExist(err) {
fileExists = false
}
file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return err
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
// Если файл новый или пустой, записываем заголовки
if !fileExists || isEmpty {
header := []string{"Structure", "Mode", "Operation", "Time"}
if err := writer.Write(header); err != nil {
return fmt.Errorf("не удалось записать заголовки: %w", err)
}
}
rows := make([][]string, len(results))
for i, res := range results {
rows[i] = res.ToStrings()
// fmt.Println(res.ToStrings())
}
return writer.WriteAll(rows) // WriteAll пишет всё сразу
}

View File

@ -0,0 +1,25 @@
package data_struct
import "fmt"
type MyData struct {
Name string
Phone string
}
func NewData(name, phone string) *MyData {
return &MyData{
Name: name,
Phone: phone,
}
}
func (d *MyData) ToString() string {
return fmt.Sprintf("Имя: %s, Телефон: %s", d.Name, d.Phone)
}
func PrintList(list []MyData) {
for _, el := range list {
fmt.Printf("%s\n", el.ToString())
}
}

View File

@ -0,0 +1,44 @@
package data_struct
func QSort(arr []MyData, l, r int) []MyData {
result := make([]MyData, len(arr))
copy(result, arr)
qSort(result, l, r)
return result
}
func qSort(arr []MyData, l, r int) []MyData {
if l < r {
s := Partition_Hoa(arr, l, r)
arr = qSort(arr, l, s)
arr = qSort(arr, s+1, r)
}
return arr
}
func Partition_Hoa(arr []MyData, l, r int) int {
p := arr[(l+r)/2].Name
i := l - 1
j := r + 1
for {
for {
i++
if arr[i].Name >= p {
break
}
}
for {
j--
if arr[j].Name <= p {
break
}
}
if i >= j {
return j
}
arr[i], arr[j] = arr[j], arr[i]
}
}

View File

@ -0,0 +1,47 @@
package gen_data
import (
"fmt"
"math/rand"
ds "source/pkg/data_struct"
)
const (
MAX_USER_IND = 10000
PHONE_LEN = 11
)
func genRandomPhone() string {
phone := ""
for i := 0; i < PHONE_LEN; i++ {
phone += fmt.Sprintf("%d", rand.Intn(10))
}
return phone
}
func RecordsShuffled(count int) []ds.MyData {
data := make([]ds.MyData, count)
number := 0
for i := 0; i < count; i++ {
number = rand.Intn(MAX_USER_IND)
data[i].Name = fmt.Sprintf("User_%05d", number)
data[i].Phone = genRandomPhone()
}
// Перемешиваем (Fisher-Yates shuffle)
for i := len(data) - 1; i > 0; i-- {
j := rand.Intn(i + 1)
data[i], data[j] = data[j], data[i]
}
return data
}
func RecordsSorted(count int) []ds.MyData {
data := RecordsShuffled(count)
data = ds.QSort(data, 0, len(data)-1)
return data
}

View File

@ -0,0 +1,287 @@
package bin_search_tree
import (
"fmt"
ds "source/pkg/data_struct"
)
type BinSearchTree struct {
root *BSTree
}
type BSTree struct {
data ds.MyData
left *BSTree
right *BSTree
}
func NewBinSearchTree() *BinSearchTree {
return &BinSearchTree{}
}
func newBinSearchTree(data ds.MyData) *BSTree {
return &BSTree{
data: data,
left: nil,
right: nil,
}
}
func (bst *BinSearchTree) Len() int {
return bst.root.Len()
}
func (bst *BSTree) Len() int {
if bst == nil {
return 0
}
return 1 + bst.left.Len() + bst.right.Len()
}
func (bst *BinSearchTree) Minimum() *BSTree {
return bst.root.Minimum()
}
func (root *BSTree) Minimum() *BSTree {
if root == nil {
return nil
}
if root.left == nil {
return root
}
return root.left.Minimum()
}
func (bst *BinSearchTree) Maximum() *BSTree {
return bst.root.Maximum()
}
func (root *BSTree) Maximum() *BSTree {
if root == nil {
return nil
}
if root.right == nil {
return root
}
return root.right.Maximum()
}
func (node *BSTree) PrintNode() {
fmt.Print(node.data.ToString())
}
func (node *BSTree) ToString() string {
if node == nil {
return "nil"
}
return node.data.ToString()
}
func (bst *BinSearchTree) BstInorderTraversal() {
bst.root.BstInorderTraversal()
}
func (root *BSTree) BstInorderTraversal() {
if root != nil {
root.left.BstInorderTraversal()
root.PrintNode()
fmt.Println()
root.right.BstInorderTraversal()
}
}
func (bst *BinSearchTree) BstPreorderTraversal() {
bst.root.BstPreorderTraversal()
}
func (root *BSTree) BstPreorderTraversal() {
if root != nil {
root.PrintNode()
fmt.Println()
root.left.BstPreorderTraversal()
root.right.BstPreorderTraversal()
}
}
// Search
// Возвращает номер телефона по имени
func (bst *BinSearchTree) Search(targetName string) (string, bool) {
node, ok := bst.root.search(targetName)
if ok {
return node.data.Phone, true
}
return "", false
}
/*
Node search(x : Node, k : T):
if x == null or k == x.key
return x
if k < x.key
return search(x.left, k)
else
return search(x.right, k)
*/
// Приватная вспомогательная функция поиска
func (node *BSTree) search(targetName string) (*BSTree, bool) {
if node == nil {
return nil, false
}
if node.data.Name == targetName {
return node, true
}
if targetName < node.data.Name {
return node.left.search(targetName)
}
return node.right.search(targetName)
}
// func (node *BinSearchTree) Insert(data ds.MyData) *BinSearchTree {
// if node == nil {
// return NewBinSearchTree(data)
// } else if data.Name < node.data.Name {
// node.left = node.left.Insert(data)
// } else if data.Name > node.data.Name {
// node.right = node.right.Insert(data)
// } else {
// node.data.Phone = data.Phone // Заменяем существующее значение
// }
// return node
// }
func (bst *BinSearchTree) Insert(data ds.MyData) {
bst.root = bst.root.insert(data)
}
func (root *BSTree) insert(data ds.MyData) *BSTree {
if root == nil {
return &BSTree{
data: data,
}
}
if data.Name < root.data.Name {
root.left = root.left.insert(data)
} else if data.Name > root.data.Name {
root.right = root.right.insert(data)
} else {
root.data.Phone = data.Phone
}
return root
}
func (bst *BinSearchTree) InsertAll(data []ds.MyData) {
for _, el := range data {
bst.Insert(el)
}
}
// Delete удаляет узел по имени.
// Возвращает нового потомка для родительского узла.
/*
Node delete(root : Node, z : T): // корень поддерева, удаляемый ключ
if root == null
return root
if z < root.key
root.left = delete(root.left, z)
else if z > root.key
root.right = delete(root.right, z)
else if root.left != null and root.right != null
root.key = minimum(root.right).key
root.right = delete(root.right, root.key)
else
if root.left != null
root = root.left
else if root.right != null
root = root.right
else
root = null
return root
*/
func (bst *BinSearchTree) Height() int {
if bst.root == nil {
return 0
}
return bst.root.height()
}
// height возвращает высоту поддерева (для BSTree)
func (node *BSTree) height() int {
if node == nil {
return 0
}
leftHeight := node.left.height()
rightHeight := node.right.height()
// Высота = 1 (текущий узел) + максимум из высот поддеревьев
if leftHeight > rightHeight {
return leftHeight + 1
}
return rightHeight + 1
}
func (bst *BinSearchTree) Delete(targetName string) bool {
if bst.root == nil {
return false
}
_, found := bst.Search(targetName)
if !found {
return false
}
bst.root = bst.root.delete(targetName)
return true
}
func (root *BSTree) delete(targetName string) *BSTree {
if root == nil {
return nil
}
if targetName < root.data.Name {
root.left = root.left.delete(targetName)
} else if targetName > root.data.Name {
root.right = root.right.delete(targetName)
} else {
// Нашли узел для удаления
// Случай 1: нет левого потомка
if root.left == nil {
return root.right
}
// Случай 2: нет правого потомка
if root.right == nil {
return root.left
}
// Случай 3: оба потомка есть
successor := root.right.Minimum()
root.data = successor.data // Копируем все данные сразу
root.right = root.right.delete(successor.data.Name)
}
return root
}
func (bst *BinSearchTree) PrintAll() {
bst.root.printAll(0)
}
func (bst *BSTree) printAll(depth int) {
if bst == nil {
return
}
bst.right.printAll(depth + 1)
for i := 0; i < depth; i++ {
fmt.Printf("\t")
}
bst.PrintNode()
bst.left.printAll(depth + 1)
}

View File

@ -0,0 +1,15 @@
package hash_table
func GetHashString(str string) int {
hash := 0
for _, ch := range str {
hash = (hash << 5) - hash + int(ch)
}
if hash < 0 {
hash = -hash
}
return hash
}

View File

@ -0,0 +1,246 @@
package hash_table
import (
"fmt"
ds "source/pkg/data_struct"
)
// HashTable - хеш-таблица с цепочками
type HashTable struct {
buckets []*bucket
size int
capacity int
loadFactor float64
}
type bucket struct {
head *elementHT
}
type elementHT struct {
data ds.MyData
next *elementHT
}
// NewHashTable - создает новую хеш-таблицу
func NewHashTable(capacity int, loadFactor float64) *HashTable {
buckets := make([]*bucket, capacity)
for i := 0; i < capacity; i++ {
buckets[i] = &bucket{}
}
return &HashTable{
buckets: buckets,
size: 0,
capacity: capacity,
loadFactor: loadFactor,
}
}
// func (h HashTable) getIndex(name string) int {
// return GetHashString(name) % h.size
// }
// func (h HashTable) Add(name string) {
// }
func (ht *HashTable) GetIndex(name string) int {
hash := GetHashString(name)
return hash % ht.capacity
}
func (ht *HashTable) Len() int {
return ht.size
}
// func (ht *HashTable) getIndex(hash int) int {
// return hash % ht.capacity
// }
func (h *HashTable) Insert(new ds.MyData) {
if h.size >= int(float64(h.capacity)*h.loadFactor) {
h.resize()
}
ind := h.GetIndex(new.Name)
buck := h.buckets[ind]
current := buck.head
for current != nil {
if current.data.Name == new.Name {
current.data.Phone = new.Phone
return
}
current = current.next
}
newHead := &elementHT{
data: new,
next: buck.head,
}
buck.head = newHead
h.size++
}
func (ht *HashTable) InsertAll(data []ds.MyData) {
for _, el := range data {
ht.Insert(el)
}
}
func (h *HashTable) Search(name string) (phone string, status bool) {
ind := h.GetIndex(name)
buck := h.buckets[ind]
current := buck.head
for current != nil {
if current.data.Name == name {
return current.data.Phone, true
}
current = current.next
}
return "", false
}
// func pressEnterToContinue() {
// fmt.Print("Нажмите Enter для продолжения...")
// bufio.NewReader(os.Stdin).ReadBytes('\n')
// }
// resize - увеличивает размер таблицы
func (ht *HashTable) resize() {
// fmt.Printf("Resize table!\n elements: %d(%.3f%%)\n old capacity: %d\n new capacity: %d\n", ht.size, float64(ht.size)/float64(ht.capacity), ht.capacity, 2*ht.capacity)
// ht.Print()
// pressEnterToContinue()
newCapacity := ht.capacity * 2
newHT := NewHashTable(newCapacity, ht.loadFactor)
for _, b := range ht.buckets {
current := b.head
for current != nil {
newHT.Insert(current.data)
current = current.next
}
}
ht.buckets = newHT.buckets
ht.capacity = newCapacity
}
func (ht *HashTable) Delete(name string) bool {
ind := ht.GetIndex(name)
buck := ht.buckets[ind]
if buck.head == nil {
return false
}
if buck.head.data.Name == name {
buck.head = buck.head.next
ht.size--
return true
}
prev := buck.head
current := buck.head.next
for current != nil {
if current.data.Name == name {
prev.next = current.next
ht.size--
return true
}
prev = current
current = current.next
}
return false
}
func (ht *HashTable) Contains(name string) bool {
_, ok := ht.Search(name)
return ok
}
func (elem *elementHT) ToString() string {
if elem == nil {
return "nil"
}
return elem.data.ToString()
}
func (ht *HashTable) Print() {
for ind := 0; ind < ht.capacity; ind++ {
buck := ht.buckets[ind]
current := buck.head
bucketsStr := ""
for current != nil {
bucketsStr += " --> " + current.ToString()
current = current.next
}
fmt.Printf("[%d]: %s\n", ind, bucketsStr)
}
}
func (ht *HashTable) listAll() []ds.MyData {
data := make([]ds.MyData, ht.size)
index := 0
for ind := 0; ind < ht.capacity; ind++ {
buck := ht.buckets[ind]
current := buck.head
for current != nil {
data[index] = current.data
index++
// fmt.Println(current.name, current.phone)
current = current.next
}
}
return data
}
func (ht *HashTable) ListAll() []ds.MyData {
// fmt.Printf("Size: %d, Capacity: %d\n", ht.size, ht.capacity)
data := ht.listAll()
data = ds.QSort(data, 0, len(data)-1)
// for i, el := range data {
// fmt.Printf("[%d]: \"%s\", %d\n", i, el.name, el.phone)
// }
return data
}
// func (ht *HashTable) PrintMostPopularnames(phone int) {
// // fmt.Printf("Size: %d, Capacity: %d\n", ht.size, ht.capacity)
// data := ht.listAll()
// data = QSortElementsHT(data, 0, len(data)-1)
// for i := 0; i < phone; i++ {
// fmt.Printf("[%d]: %3d : %s\n", i, ht.GetIndex(data[len(data)-i-1].name), data[len(data)-i-1].ToString())
// }
// }

View File

@ -0,0 +1,169 @@
package linked_list
import (
"fmt"
ds "source/pkg/data_struct"
)
/*
Связный список (LinkedListPhoneBook)
Узел представляется словарём: `{'name': 'Имя', 'phone': '123', 'next': None}.`
Функции:
def ll_insert(head, name, phone) проходит до конца (или сразу добавляет в конец) и возвращает новую голову (если вставка в начало) или изменяет список по ссылке. Удобнее возвращать новую голову, если вставка может быть в начало.
def ll_find(head, name) ищет узел, возвращает телефон или None.
def ll_delete(head, name) удаляет узел, возвращает новую голову.
def ll_list_all(head) собирает все записи в список и сортирует (сортировка вынесена отдельно).
*/
type LinkedList struct {
head *LList
}
type LList struct {
data ds.MyData
next *LList
}
func NewLinkedList() *LinkedList {
return &LinkedList{}
}
func newLinkedList(data ds.MyData) *LList {
return &LList{
data: data,
next: nil,
}
}
func (ll *LList) ToString() string {
if ll == nil {
return "nil"
}
return ll.data.ToString()
}
func (ll *LinkedList) Len() int {
if ll == nil {
return 0
}
len := 0
current := ll.head
for current != nil {
len++
current = current.next
}
return len
}
func (ll *LinkedList) Insert(data ds.MyData) {
newNode := newLinkedList(data)
if ll.head == nil {
ll.head = newNode
return
}
current := ll.head
for current.next != nil {
current = current.next
}
current.next = newNode
}
func (ll *LinkedList) InsertAll(data []ds.MyData) {
for _, el := range data {
ll.Insert(el)
}
}
func (ll *LinkedList) Search(targetName string) (string, bool) {
current := ll.head
for current != nil {
if current.data.Name == targetName {
return current.data.Phone, true
}
current = current.next
}
return "", false
}
func (ll *LinkedList) PrintAll() {
current := ll.head
index := 0
for current != nil {
fmt.Printf("[%d] %s\n", index, current.ToString())
index++
current = current.next
}
}
func (ll *LinkedList) Delete(targetName string) bool {
if ll.head == nil {
return false
}
// Особый случай: удаление головы списка
if ll.head.data.Name == targetName {
// Сдвигаем данные и указатель
*ll.head = *ll.head.next
return true
}
// Стандартное удаление из середины/конца
current := ll.head
for current.next != nil {
if current.next.data.Name == targetName {
current.next = current.next.next
return true
}
current = current.next
}
return false
}
func (ll *LinkedList) listAll() []ds.MyData {
current := ll.head
listLL := make([]ds.MyData, ll.Len())
ind := 0
for current != nil {
listLL[ind] = current.data
ind++
current = current.next
}
listLL = ds.QSort(listLL, 0, len(listLL)-1)
return listLL
}
func (ll *LinkedList) GetByInd(ind int) (ds.MyData, bool) {
if ind >= ll.Len() {
return ds.MyData{}, false
}
index := 0
current := ll.head
for current != nil {
if index == ind {
return current.data, true
}
current = current.next
index++
}
return ds.MyData{}, false
}

View File

@ -0,0 +1,379 @@
Structure,Mode,Operation,Time
Связный список,Случайный,Вставка,0.193393
Связный список,Случайный,Поиск,0.023572
Связный список,Случайный,Удаление,0.013566
Связный список,Случайный,Вставка,0.193837
Связный список,Случайный,Поиск,0.023969
Связный список,Случайный,Удаление,0.013580
Связный список,Случайный,Вставка,0.190963
Связный список,Случайный,Поиск,0.023944
Связный список,Случайный,Удаление,0.013505
Связный список,Случайный,Вставка,0.194440
Связный список,Случайный,Поиск,0.022179
Связный список,Случайный,Удаление,0.015040
Связный список,Случайный,Вставка,0.191873
Связный список,Случайный,Поиск,0.023604
Связный список,Случайный,Удаление,0.014556
Связный список,Случайный,Вставка,0.191788
Связный список,Случайный,Поиск,0.023570
Связный список,Случайный,Удаление,0.013037
Связный список,Случайный,Вставка,0.192362
Связный список,Случайный,Поиск,0.023050
Связный список,Случайный,Удаление,0.013997
Связный список,Случайный,Вставка,0.191223
Связный список,Случайный,Поиск,0.023778
Связный список,Случайный,Удаление,0.013582
Связный список,Случайный,Вставка,0.191326
Связный список,Случайный,Поиск,0.023035
Связный список,Случайный,Удаление,0.013183
Связный список,Случайный,Вставка,0.191919
Связный список,Случайный,Поиск,0.023584
Связный список,Случайный,Удаление,0.013988
Связный список,Случайный,Вставка,0.190009
Связный список,Случайный,Поиск,0.022013
Связный список,Случайный,Удаление,0.014679
Связный список,Случайный,Вставка,0.191010
Связный список,Случайный,Поиск,0.024724
Связный список,Случайный,Удаление,0.015116
Связный список,Случайный,Вставка,0.192876
Связный список,Случайный,Поиск,0.023690
Связный список,Случайный,Удаление,0.021114
Связный список,Случайный,Вставка,0.202786
Связный список,Случайный,Поиск,0.023466
Связный список,Случайный,Удаление,0.014063
Связный список,Случайный,Вставка,0.191339
Связный список,Случайный,Поиск,0.022909
Связный список,Случайный,Удаление,0.014661
Связный список,Случайный,Вставка,0.189898
Связный список,Случайный,Поиск,0.023056
Связный список,Случайный,Удаление,0.013592
Связный список,Случайный,Вставка,0.195372
Связный список,Случайный,Поиск,0.023198
Связный список,Случайный,Удаление,0.013819
Связный список,Случайный,Вставка,0.191713
Связный список,Случайный,Поиск,0.023542
Связный список,Случайный,Удаление,0.012883
Связный список,Случайный,Вставка,0.190514
Связный список,Случайный,Поиск,0.023745
Связный список,Случайный,Удаление,0.015012
Связный список,Случайный,Вставка,0.189447
Связный список,Случайный,Поиск,0.023544
Связный список,Случайный,Удаление,0.014063
Связный список,Случайный,Вставка (среднее),0.192404
Связный список,Случайный,Поиск (среднее),0.023409
Связный список,Случайный,Удаление (среднее),0.014352
Связный список,Отсортированный,Вставка,0.193078
Связный список,Отсортированный,Поиск,0.033527
Связный список,Отсортированный,Удаление,0.022597
Связный список,Отсортированный,Вставка,0.190167
Связный список,Отсортированный,Поиск,0.032657
Связный список,Отсортированный,Удаление,0.022773
Связный список,Отсортированный,Вставка,0.191660
Связный список,Отсортированный,Поиск,0.034012
Связный список,Отсортированный,Удаление,0.022709
Связный список,Отсортированный,Вставка,0.191970
Связный список,Отсортированный,Поиск,0.032553
Связный список,Отсортированный,Удаление,0.022828
Связный список,Отсортированный,Вставка,0.194583
Связный список,Отсортированный,Поиск,0.034762
Связный список,Отсортированный,Удаление,0.022843
Связный список,Отсортированный,Вставка,0.192641
Связный список,Отсортированный,Поиск,0.033173
Связный список,Отсортированный,Удаление,0.022690
Связный список,Отсортированный,Вставка,0.194789
Связный список,Отсортированный,Поиск,0.033526
Связный список,Отсортированный,Удаление,0.022985
Связный список,Отсортированный,Вставка,0.191488
Связный список,Отсортированный,Поиск,0.032518
Связный список,Отсортированный,Удаление,0.023373
Связный список,Отсортированный,Вставка,0.203929
Связный список,Отсортированный,Поиск,0.034133
Связный список,Отсортированный,Удаление,0.023423
Связный список,Отсортированный,Вставка,0.193756
Связный список,Отсортированный,Поиск,0.033023
Связный список,Отсортированный,Удаление,0.022845
Связный список,Отсортированный,Вставка,0.195554
Связный список,Отсортированный,Поиск,0.032817
Связный список,Отсортированный,Удаление,0.023482
Связный список,Отсортированный,Вставка,0.193150
Связный список,Отсортированный,Поиск,0.033271
Связный список,Отсортированный,Удаление,0.022587
Связный список,Отсортированный,Вставка,0.192696
Связный список,Отсортированный,Поиск,0.033454
Связный список,Отсортированный,Удаление,0.022527
Связный список,Отсортированный,Вставка,0.192065
Связный список,Отсортированный,Поиск,0.033382
Связный список,Отсортированный,Удаление,0.022786
Связный список,Отсортированный,Вставка,0.191702
Связный список,Отсортированный,Поиск,0.031664
Связный список,Отсортированный,Удаление,0.023819
Связный список,Отсортированный,Вставка,0.194042
Связный список,Отсортированный,Поиск,0.032380
Связный список,Отсортированный,Удаление,0.023181
Связный список,Отсортированный,Вставка,0.190397
Связный список,Отсортированный,Поиск,0.033168
Связный список,Отсортированный,Удаление,0.022893
Связный список,Отсортированный,Вставка,0.191636
Связный список,Отсортированный,Поиск,0.032367
Связный список,Отсортированный,Удаление,0.022448
Связный список,Отсортированный,Вставка,0.193131
Связный список,Отсортированный,Поиск,0.032905
Связный список,Отсортированный,Удаление,0.022932
Связный список,Отсортированный,Вставка,0.191676
Связный список,Отсортированный,Поиск,0.032851
Связный список,Отсортированный,Удаление,0.022315
Связный список,Отсортированный,Вставка (среднее),0.193206
Связный список,Отсортированный,Поиск (среднее),0.033107
Связный список,Отсортированный,Удаление (среднее),0.022902
Хеш таблица,Случайный,Вставка,0.002119
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003507
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.002563
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003023
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003513
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.002516
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003369
Хеш таблица,Случайный,Поиск,0.001002
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.002091
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003654
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003102
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003008
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003997
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.001580
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.005478
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.002015
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003410
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.002158
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003586
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003123
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка,0.003011
Хеш таблица,Случайный,Поиск,0.000000
Хеш таблица,Случайный,Удаление,0.000000
Хеш таблица,Случайный,Вставка (среднее),0.003041
Хеш таблица,Случайный,Поиск (среднее),0.000050
Хеш таблица,Случайный,Удаление (среднее),0.000000
Хеш таблица,Отсортированный,Вставка,0.003208
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.003095
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002048
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.003991
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002006
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.003505
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.003013
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002423
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.001102
Хеш таблица,Отсортированный,Вставка,0.003121
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000503
Хеш таблица,Отсортированный,Вставка,0.002511
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.003011
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002003
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.001341
Хеш таблица,Отсортированный,Вставка,0.001513
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.004485
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002740
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002310
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002506
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.002515
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.003073
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка,0.004169
Хеш таблица,Отсортированный,Поиск,0.000000
Хеш таблица,Отсортированный,Удаление,0.000000
Хеш таблица,Отсортированный,Вставка (среднее),0.002862
Хеш таблица,Отсортированный,Поиск (среднее),0.000000
Хеш таблица,Отсортированный,Удаление (среднее),0.000147
Бинарное дерево поиска,Случайный,Вставка,0.004626
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.001014
Бинарное дерево поиска,Случайный,Вставка,0.004910
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.005058
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.001009
Бинарное дерево поиска,Случайный,Вставка,0.004521
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.005904
Бинарное дерево поиска,Случайный,Поиск,0.001025
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.005221
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.001066
Бинарное дерево поиска,Случайный,Вставка,0.005843
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.007343
Бинарное дерево поиска,Случайный,Поиск,0.000503
Бинарное дерево поиска,Случайный,Удаление,0.000516
Бинарное дерево поиска,Случайный,Вставка,0.006171
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.000512
Бинарное дерево поиска,Случайный,Вставка,0.005454
Бинарное дерево поиска,Случайный,Поиск,0.001009
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.006885
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.001451
Бинарное дерево поиска,Случайный,Вставка,0.006402
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.001009
Бинарное дерево поиска,Случайный,Вставка,0.004521
Бинарное дерево поиска,Случайный,Поиск,0.001055
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.005170
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.001503
Бинарное дерево поиска,Случайный,Вставка,0.005615
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.001001
Бинарное дерево поиска,Случайный,Вставка,0.005535
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.005566
Бинарное дерево поиска,Случайный,Поиск,0.001004
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.004022
Бинарное дерево поиска,Случайный,Поиск,0.001010
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.004053
Бинарное дерево поиска,Случайный,Поиск,0.001079
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка,0.004512
Бинарное дерево поиска,Случайный,Поиск,0.000000
Бинарное дерево поиска,Случайный,Удаление,0.000000
Бинарное дерево поиска,Случайный,Вставка (среднее),0.005367
Бинарное дерево поиска,Случайный,Поиск (среднее),0.000334
Бинарное дерево поиска,Случайный,Удаление (среднее),0.000454
Бинарное дерево поиска,Отсортированный,Вставка,0.901140
Бинарное дерево поиска,Отсортированный,Поиск,0.055198
Бинарное дерево поиска,Отсортированный,Удаление,0.068970
Бинарное дерево поиска,Отсортированный,Вставка,0.901221
Бинарное дерево поиска,Отсортированный,Поиск,0.055432
Бинарное дерево поиска,Отсортированный,Удаление,0.067588
Бинарное дерево поиска,Отсортированный,Вставка,0.875497
Бинарное дерево поиска,Отсортированный,Поиск,0.055297
Бинарное дерево поиска,Отсортированный,Удаление,0.068742
Бинарное дерево поиска,Отсортированный,Вставка,0.894420
Бинарное дерево поиска,Отсортированный,Поиск,0.054808
Бинарное дерево поиска,Отсортированный,Удаление,0.068112
Бинарное дерево поиска,Отсортированный,Вставка,0.879010
Бинарное дерево поиска,Отсортированный,Поиск,0.054503
Бинарное дерево поиска,Отсортированный,Удаление,0.068600
Бинарное дерево поиска,Отсортированный,Вставка,0.873702
Бинарное дерево поиска,Отсортированный,Поиск,0.055239
Бинарное дерево поиска,Отсортированный,Удаление,0.067484
Бинарное дерево поиска,Отсортированный,Вставка,0.889047
Бинарное дерево поиска,Отсортированный,Поиск,0.066586
Бинарное дерево поиска,Отсортированный,Удаление,0.071171
Бинарное дерево поиска,Отсортированный,Вставка,0.881977
Бинарное дерево поиска,Отсортированный,Поиск,0.059766
Бинарное дерево поиска,Отсортированный,Удаление,0.069783
Бинарное дерево поиска,Отсортированный,Вставка,0.890244
Бинарное дерево поиска,Отсортированный,Поиск,0.054863
Бинарное дерево поиска,Отсортированный,Удаление,0.069397
Бинарное дерево поиска,Отсортированный,Вставка,0.871035
Бинарное дерево поиска,Отсортированный,Поиск,0.055970
Бинарное дерево поиска,Отсортированный,Удаление,0.065886
Бинарное дерево поиска,Отсортированный,Вставка,0.873882
Бинарное дерево поиска,Отсортированный,Поиск,0.056181
Бинарное дерево поиска,Отсортированный,Удаление,0.069140
Бинарное дерево поиска,Отсортированный,Вставка,0.932258
Бинарное дерево поиска,Отсортированный,Поиск,0.055037
Бинарное дерево поиска,Отсортированный,Удаление,0.066576
Бинарное дерево поиска,Отсортированный,Вставка,0.875622
Бинарное дерево поиска,Отсортированный,Поиск,0.055679
Бинарное дерево поиска,Отсортированный,Удаление,0.068214
Бинарное дерево поиска,Отсортированный,Вставка,0.871718
Бинарное дерево поиска,Отсортированный,Поиск,0.055748
Бинарное дерево поиска,Отсортированный,Удаление,0.067876
Бинарное дерево поиска,Отсортированный,Вставка,0.872458
Бинарное дерево поиска,Отсортированный,Поиск,0.054689
Бинарное дерево поиска,Отсортированный,Удаление,0.068765
Бинарное дерево поиска,Отсортированный,Вставка,0.871178
Бинарное дерево поиска,Отсортированный,Поиск,0.054816
Бинарное дерево поиска,Отсортированный,Удаление,0.067832
Бинарное дерево поиска,Отсортированный,Вставка,0.876907
Бинарное дерево поиска,Отсортированный,Поиск,0.054184
Бинарное дерево поиска,Отсортированный,Удаление,0.068164
Бинарное дерево поиска,Отсортированный,Вставка,0.868001
Бинарное дерево поиска,Отсортированный,Поиск,0.054167
Бинарное дерево поиска,Отсортированный,Удаление,0.068493
Бинарное дерево поиска,Отсортированный,Вставка,0.879394
Бинарное дерево поиска,Отсортированный,Поиск,0.058173
Бинарное дерево поиска,Отсортированный,Удаление,0.068654
Бинарное дерево поиска,Отсортированный,Вставка,0.868870
Бинарное дерево поиска,Отсортированный,Поиск,0.055234
Бинарное дерево поиска,Отсортированный,Удаление,0.068269
Бинарное дерево поиска,Отсортированный,Вставка (среднее),0.882379
Бинарное дерево поиска,Отсортированный,Поиск (среднее),0.056078
Бинарное дерево поиска,Отсортированный,Удаление (среднее),0.068386
1 Structure Mode Operation Time
2 Связный список Случайный Вставка 0.193393
3 Связный список Случайный Поиск 0.023572
4 Связный список Случайный Удаление 0.013566
5 Связный список Случайный Вставка 0.193837
6 Связный список Случайный Поиск 0.023969
7 Связный список Случайный Удаление 0.013580
8 Связный список Случайный Вставка 0.190963
9 Связный список Случайный Поиск 0.023944
10 Связный список Случайный Удаление 0.013505
11 Связный список Случайный Вставка 0.194440
12 Связный список Случайный Поиск 0.022179
13 Связный список Случайный Удаление 0.015040
14 Связный список Случайный Вставка 0.191873
15 Связный список Случайный Поиск 0.023604
16 Связный список Случайный Удаление 0.014556
17 Связный список Случайный Вставка 0.191788
18 Связный список Случайный Поиск 0.023570
19 Связный список Случайный Удаление 0.013037
20 Связный список Случайный Вставка 0.192362
21 Связный список Случайный Поиск 0.023050
22 Связный список Случайный Удаление 0.013997
23 Связный список Случайный Вставка 0.191223
24 Связный список Случайный Поиск 0.023778
25 Связный список Случайный Удаление 0.013582
26 Связный список Случайный Вставка 0.191326
27 Связный список Случайный Поиск 0.023035
28 Связный список Случайный Удаление 0.013183
29 Связный список Случайный Вставка 0.191919
30 Связный список Случайный Поиск 0.023584
31 Связный список Случайный Удаление 0.013988
32 Связный список Случайный Вставка 0.190009
33 Связный список Случайный Поиск 0.022013
34 Связный список Случайный Удаление 0.014679
35 Связный список Случайный Вставка 0.191010
36 Связный список Случайный Поиск 0.024724
37 Связный список Случайный Удаление 0.015116
38 Связный список Случайный Вставка 0.192876
39 Связный список Случайный Поиск 0.023690
40 Связный список Случайный Удаление 0.021114
41 Связный список Случайный Вставка 0.202786
42 Связный список Случайный Поиск 0.023466
43 Связный список Случайный Удаление 0.014063
44 Связный список Случайный Вставка 0.191339
45 Связный список Случайный Поиск 0.022909
46 Связный список Случайный Удаление 0.014661
47 Связный список Случайный Вставка 0.189898
48 Связный список Случайный Поиск 0.023056
49 Связный список Случайный Удаление 0.013592
50 Связный список Случайный Вставка 0.195372
51 Связный список Случайный Поиск 0.023198
52 Связный список Случайный Удаление 0.013819
53 Связный список Случайный Вставка 0.191713
54 Связный список Случайный Поиск 0.023542
55 Связный список Случайный Удаление 0.012883
56 Связный список Случайный Вставка 0.190514
57 Связный список Случайный Поиск 0.023745
58 Связный список Случайный Удаление 0.015012
59 Связный список Случайный Вставка 0.189447
60 Связный список Случайный Поиск 0.023544
61 Связный список Случайный Удаление 0.014063
62 Связный список Случайный Вставка (среднее) 0.192404
63 Связный список Случайный Поиск (среднее) 0.023409
64 Связный список Случайный Удаление (среднее) 0.014352
65 Связный список Отсортированный Вставка 0.193078
66 Связный список Отсортированный Поиск 0.033527
67 Связный список Отсортированный Удаление 0.022597
68 Связный список Отсортированный Вставка 0.190167
69 Связный список Отсортированный Поиск 0.032657
70 Связный список Отсортированный Удаление 0.022773
71 Связный список Отсортированный Вставка 0.191660
72 Связный список Отсортированный Поиск 0.034012
73 Связный список Отсортированный Удаление 0.022709
74 Связный список Отсортированный Вставка 0.191970
75 Связный список Отсортированный Поиск 0.032553
76 Связный список Отсортированный Удаление 0.022828
77 Связный список Отсортированный Вставка 0.194583
78 Связный список Отсортированный Поиск 0.034762
79 Связный список Отсортированный Удаление 0.022843
80 Связный список Отсортированный Вставка 0.192641
81 Связный список Отсортированный Поиск 0.033173
82 Связный список Отсортированный Удаление 0.022690
83 Связный список Отсортированный Вставка 0.194789
84 Связный список Отсортированный Поиск 0.033526
85 Связный список Отсортированный Удаление 0.022985
86 Связный список Отсортированный Вставка 0.191488
87 Связный список Отсортированный Поиск 0.032518
88 Связный список Отсортированный Удаление 0.023373
89 Связный список Отсортированный Вставка 0.203929
90 Связный список Отсортированный Поиск 0.034133
91 Связный список Отсортированный Удаление 0.023423
92 Связный список Отсортированный Вставка 0.193756
93 Связный список Отсортированный Поиск 0.033023
94 Связный список Отсортированный Удаление 0.022845
95 Связный список Отсортированный Вставка 0.195554
96 Связный список Отсортированный Поиск 0.032817
97 Связный список Отсортированный Удаление 0.023482
98 Связный список Отсортированный Вставка 0.193150
99 Связный список Отсортированный Поиск 0.033271
100 Связный список Отсортированный Удаление 0.022587
101 Связный список Отсортированный Вставка 0.192696
102 Связный список Отсортированный Поиск 0.033454
103 Связный список Отсортированный Удаление 0.022527
104 Связный список Отсортированный Вставка 0.192065
105 Связный список Отсортированный Поиск 0.033382
106 Связный список Отсортированный Удаление 0.022786
107 Связный список Отсортированный Вставка 0.191702
108 Связный список Отсортированный Поиск 0.031664
109 Связный список Отсортированный Удаление 0.023819
110 Связный список Отсортированный Вставка 0.194042
111 Связный список Отсортированный Поиск 0.032380
112 Связный список Отсортированный Удаление 0.023181
113 Связный список Отсортированный Вставка 0.190397
114 Связный список Отсортированный Поиск 0.033168
115 Связный список Отсортированный Удаление 0.022893
116 Связный список Отсортированный Вставка 0.191636
117 Связный список Отсортированный Поиск 0.032367
118 Связный список Отсортированный Удаление 0.022448
119 Связный список Отсортированный Вставка 0.193131
120 Связный список Отсортированный Поиск 0.032905
121 Связный список Отсортированный Удаление 0.022932
122 Связный список Отсортированный Вставка 0.191676
123 Связный список Отсортированный Поиск 0.032851
124 Связный список Отсортированный Удаление 0.022315
125 Связный список Отсортированный Вставка (среднее) 0.193206
126 Связный список Отсортированный Поиск (среднее) 0.033107
127 Связный список Отсортированный Удаление (среднее) 0.022902
128 Хеш таблица Случайный Вставка 0.002119
129 Хеш таблица Случайный Поиск 0.000000
130 Хеш таблица Случайный Удаление 0.000000
131 Хеш таблица Случайный Вставка 0.003507
132 Хеш таблица Случайный Поиск 0.000000
133 Хеш таблица Случайный Удаление 0.000000
134 Хеш таблица Случайный Вставка 0.002563
135 Хеш таблица Случайный Поиск 0.000000
136 Хеш таблица Случайный Удаление 0.000000
137 Хеш таблица Случайный Вставка 0.003023
138 Хеш таблица Случайный Поиск 0.000000
139 Хеш таблица Случайный Удаление 0.000000
140 Хеш таблица Случайный Вставка 0.003513
141 Хеш таблица Случайный Поиск 0.000000
142 Хеш таблица Случайный Удаление 0.000000
143 Хеш таблица Случайный Вставка 0.002516
144 Хеш таблица Случайный Поиск 0.000000
145 Хеш таблица Случайный Удаление 0.000000
146 Хеш таблица Случайный Вставка 0.003369
147 Хеш таблица Случайный Поиск 0.001002
148 Хеш таблица Случайный Удаление 0.000000
149 Хеш таблица Случайный Вставка 0.002091
150 Хеш таблица Случайный Поиск 0.000000
151 Хеш таблица Случайный Удаление 0.000000
152 Хеш таблица Случайный Вставка 0.003654
153 Хеш таблица Случайный Поиск 0.000000
154 Хеш таблица Случайный Удаление 0.000000
155 Хеш таблица Случайный Вставка 0.003102
156 Хеш таблица Случайный Поиск 0.000000
157 Хеш таблица Случайный Удаление 0.000000
158 Хеш таблица Случайный Вставка 0.003008
159 Хеш таблица Случайный Поиск 0.000000
160 Хеш таблица Случайный Удаление 0.000000
161 Хеш таблица Случайный Вставка 0.003997
162 Хеш таблица Случайный Поиск 0.000000
163 Хеш таблица Случайный Удаление 0.000000
164 Хеш таблица Случайный Вставка 0.001580
165 Хеш таблица Случайный Поиск 0.000000
166 Хеш таблица Случайный Удаление 0.000000
167 Хеш таблица Случайный Вставка 0.005478
168 Хеш таблица Случайный Поиск 0.000000
169 Хеш таблица Случайный Удаление 0.000000
170 Хеш таблица Случайный Вставка 0.002015
171 Хеш таблица Случайный Поиск 0.000000
172 Хеш таблица Случайный Удаление 0.000000
173 Хеш таблица Случайный Вставка 0.003410
174 Хеш таблица Случайный Поиск 0.000000
175 Хеш таблица Случайный Удаление 0.000000
176 Хеш таблица Случайный Вставка 0.002158
177 Хеш таблица Случайный Поиск 0.000000
178 Хеш таблица Случайный Удаление 0.000000
179 Хеш таблица Случайный Вставка 0.003586
180 Хеш таблица Случайный Поиск 0.000000
181 Хеш таблица Случайный Удаление 0.000000
182 Хеш таблица Случайный Вставка 0.003123
183 Хеш таблица Случайный Поиск 0.000000
184 Хеш таблица Случайный Удаление 0.000000
185 Хеш таблица Случайный Вставка 0.003011
186 Хеш таблица Случайный Поиск 0.000000
187 Хеш таблица Случайный Удаление 0.000000
188 Хеш таблица Случайный Вставка (среднее) 0.003041
189 Хеш таблица Случайный Поиск (среднее) 0.000050
190 Хеш таблица Случайный Удаление (среднее) 0.000000
191 Хеш таблица Отсортированный Вставка 0.003208
192 Хеш таблица Отсортированный Поиск 0.000000
193 Хеш таблица Отсортированный Удаление 0.000000
194 Хеш таблица Отсортированный Вставка 0.003095
195 Хеш таблица Отсортированный Поиск 0.000000
196 Хеш таблица Отсортированный Удаление 0.000000
197 Хеш таблица Отсортированный Вставка 0.002048
198 Хеш таблица Отсортированный Поиск 0.000000
199 Хеш таблица Отсортированный Удаление 0.000000
200 Хеш таблица Отсортированный Вставка 0.003991
201 Хеш таблица Отсортированный Поиск 0.000000
202 Хеш таблица Отсортированный Удаление 0.000000
203 Хеш таблица Отсортированный Вставка 0.002006
204 Хеш таблица Отсортированный Поиск 0.000000
205 Хеш таблица Отсортированный Удаление 0.000000
206 Хеш таблица Отсортированный Вставка 0.003505
207 Хеш таблица Отсортированный Поиск 0.000000
208 Хеш таблица Отсортированный Удаление 0.000000
209 Хеш таблица Отсортированный Вставка 0.003013
210 Хеш таблица Отсортированный Поиск 0.000000
211 Хеш таблица Отсортированный Удаление 0.000000
212 Хеш таблица Отсортированный Вставка 0.002423
213 Хеш таблица Отсортированный Поиск 0.000000
214 Хеш таблица Отсортированный Удаление 0.001102
215 Хеш таблица Отсортированный Вставка 0.003121
216 Хеш таблица Отсортированный Поиск 0.000000
217 Хеш таблица Отсортированный Удаление 0.000503
218 Хеш таблица Отсортированный Вставка 0.002511
219 Хеш таблица Отсортированный Поиск 0.000000
220 Хеш таблица Отсортированный Удаление 0.000000
221 Хеш таблица Отсортированный Вставка 0.003011
222 Хеш таблица Отсортированный Поиск 0.000000
223 Хеш таблица Отсортированный Удаление 0.000000
224 Хеш таблица Отсортированный Вставка 0.002003
225 Хеш таблица Отсортированный Поиск 0.000000
226 Хеш таблица Отсортированный Удаление 0.001341
227 Хеш таблица Отсортированный Вставка 0.001513
228 Хеш таблица Отсортированный Поиск 0.000000
229 Хеш таблица Отсортированный Удаление 0.000000
230 Хеш таблица Отсортированный Вставка 0.004485
231 Хеш таблица Отсортированный Поиск 0.000000
232 Хеш таблица Отсортированный Удаление 0.000000
233 Хеш таблица Отсортированный Вставка 0.002740
234 Хеш таблица Отсортированный Поиск 0.000000
235 Хеш таблица Отсортированный Удаление 0.000000
236 Хеш таблица Отсортированный Вставка 0.002310
237 Хеш таблица Отсортированный Поиск 0.000000
238 Хеш таблица Отсортированный Удаление 0.000000
239 Хеш таблица Отсортированный Вставка 0.002506
240 Хеш таблица Отсортированный Поиск 0.000000
241 Хеш таблица Отсортированный Удаление 0.000000
242 Хеш таблица Отсортированный Вставка 0.002515
243 Хеш таблица Отсортированный Поиск 0.000000
244 Хеш таблица Отсортированный Удаление 0.000000
245 Хеш таблица Отсортированный Вставка 0.003073
246 Хеш таблица Отсортированный Поиск 0.000000
247 Хеш таблица Отсортированный Удаление 0.000000
248 Хеш таблица Отсортированный Вставка 0.004169
249 Хеш таблица Отсортированный Поиск 0.000000
250 Хеш таблица Отсортированный Удаление 0.000000
251 Хеш таблица Отсортированный Вставка (среднее) 0.002862
252 Хеш таблица Отсортированный Поиск (среднее) 0.000000
253 Хеш таблица Отсортированный Удаление (среднее) 0.000147
254 Бинарное дерево поиска Случайный Вставка 0.004626
255 Бинарное дерево поиска Случайный Поиск 0.000000
256 Бинарное дерево поиска Случайный Удаление 0.001014
257 Бинарное дерево поиска Случайный Вставка 0.004910
258 Бинарное дерево поиска Случайный Поиск 0.000000
259 Бинарное дерево поиска Случайный Удаление 0.000000
260 Бинарное дерево поиска Случайный Вставка 0.005058
261 Бинарное дерево поиска Случайный Поиск 0.000000
262 Бинарное дерево поиска Случайный Удаление 0.001009
263 Бинарное дерево поиска Случайный Вставка 0.004521
264 Бинарное дерево поиска Случайный Поиск 0.000000
265 Бинарное дерево поиска Случайный Удаление 0.000000
266 Бинарное дерево поиска Случайный Вставка 0.005904
267 Бинарное дерево поиска Случайный Поиск 0.001025
268 Бинарное дерево поиска Случайный Удаление 0.000000
269 Бинарное дерево поиска Случайный Вставка 0.005221
270 Бинарное дерево поиска Случайный Поиск 0.000000
271 Бинарное дерево поиска Случайный Удаление 0.001066
272 Бинарное дерево поиска Случайный Вставка 0.005843
273 Бинарное дерево поиска Случайный Поиск 0.000000
274 Бинарное дерево поиска Случайный Удаление 0.000000
275 Бинарное дерево поиска Случайный Вставка 0.007343
276 Бинарное дерево поиска Случайный Поиск 0.000503
277 Бинарное дерево поиска Случайный Удаление 0.000516
278 Бинарное дерево поиска Случайный Вставка 0.006171
279 Бинарное дерево поиска Случайный Поиск 0.000000
280 Бинарное дерево поиска Случайный Удаление 0.000512
281 Бинарное дерево поиска Случайный Вставка 0.005454
282 Бинарное дерево поиска Случайный Поиск 0.001009
283 Бинарное дерево поиска Случайный Удаление 0.000000
284 Бинарное дерево поиска Случайный Вставка 0.006885
285 Бинарное дерево поиска Случайный Поиск 0.000000
286 Бинарное дерево поиска Случайный Удаление 0.001451
287 Бинарное дерево поиска Случайный Вставка 0.006402
288 Бинарное дерево поиска Случайный Поиск 0.000000
289 Бинарное дерево поиска Случайный Удаление 0.001009
290 Бинарное дерево поиска Случайный Вставка 0.004521
291 Бинарное дерево поиска Случайный Поиск 0.001055
292 Бинарное дерево поиска Случайный Удаление 0.000000
293 Бинарное дерево поиска Случайный Вставка 0.005170
294 Бинарное дерево поиска Случайный Поиск 0.000000
295 Бинарное дерево поиска Случайный Удаление 0.001503
296 Бинарное дерево поиска Случайный Вставка 0.005615
297 Бинарное дерево поиска Случайный Поиск 0.000000
298 Бинарное дерево поиска Случайный Удаление 0.001001
299 Бинарное дерево поиска Случайный Вставка 0.005535
300 Бинарное дерево поиска Случайный Поиск 0.000000
301 Бинарное дерево поиска Случайный Удаление 0.000000
302 Бинарное дерево поиска Случайный Вставка 0.005566
303 Бинарное дерево поиска Случайный Поиск 0.001004
304 Бинарное дерево поиска Случайный Удаление 0.000000
305 Бинарное дерево поиска Случайный Вставка 0.004022
306 Бинарное дерево поиска Случайный Поиск 0.001010
307 Бинарное дерево поиска Случайный Удаление 0.000000
308 Бинарное дерево поиска Случайный Вставка 0.004053
309 Бинарное дерево поиска Случайный Поиск 0.001079
310 Бинарное дерево поиска Случайный Удаление 0.000000
311 Бинарное дерево поиска Случайный Вставка 0.004512
312 Бинарное дерево поиска Случайный Поиск 0.000000
313 Бинарное дерево поиска Случайный Удаление 0.000000
314 Бинарное дерево поиска Случайный Вставка (среднее) 0.005367
315 Бинарное дерево поиска Случайный Поиск (среднее) 0.000334
316 Бинарное дерево поиска Случайный Удаление (среднее) 0.000454
317 Бинарное дерево поиска Отсортированный Вставка 0.901140
318 Бинарное дерево поиска Отсортированный Поиск 0.055198
319 Бинарное дерево поиска Отсортированный Удаление 0.068970
320 Бинарное дерево поиска Отсортированный Вставка 0.901221
321 Бинарное дерево поиска Отсортированный Поиск 0.055432
322 Бинарное дерево поиска Отсортированный Удаление 0.067588
323 Бинарное дерево поиска Отсортированный Вставка 0.875497
324 Бинарное дерево поиска Отсортированный Поиск 0.055297
325 Бинарное дерево поиска Отсортированный Удаление 0.068742
326 Бинарное дерево поиска Отсортированный Вставка 0.894420
327 Бинарное дерево поиска Отсортированный Поиск 0.054808
328 Бинарное дерево поиска Отсортированный Удаление 0.068112
329 Бинарное дерево поиска Отсортированный Вставка 0.879010
330 Бинарное дерево поиска Отсортированный Поиск 0.054503
331 Бинарное дерево поиска Отсортированный Удаление 0.068600
332 Бинарное дерево поиска Отсортированный Вставка 0.873702
333 Бинарное дерево поиска Отсортированный Поиск 0.055239
334 Бинарное дерево поиска Отсортированный Удаление 0.067484
335 Бинарное дерево поиска Отсортированный Вставка 0.889047
336 Бинарное дерево поиска Отсортированный Поиск 0.066586
337 Бинарное дерево поиска Отсортированный Удаление 0.071171
338 Бинарное дерево поиска Отсортированный Вставка 0.881977
339 Бинарное дерево поиска Отсортированный Поиск 0.059766
340 Бинарное дерево поиска Отсортированный Удаление 0.069783
341 Бинарное дерево поиска Отсортированный Вставка 0.890244
342 Бинарное дерево поиска Отсортированный Поиск 0.054863
343 Бинарное дерево поиска Отсортированный Удаление 0.069397
344 Бинарное дерево поиска Отсортированный Вставка 0.871035
345 Бинарное дерево поиска Отсортированный Поиск 0.055970
346 Бинарное дерево поиска Отсортированный Удаление 0.065886
347 Бинарное дерево поиска Отсортированный Вставка 0.873882
348 Бинарное дерево поиска Отсортированный Поиск 0.056181
349 Бинарное дерево поиска Отсортированный Удаление 0.069140
350 Бинарное дерево поиска Отсортированный Вставка 0.932258
351 Бинарное дерево поиска Отсортированный Поиск 0.055037
352 Бинарное дерево поиска Отсортированный Удаление 0.066576
353 Бинарное дерево поиска Отсортированный Вставка 0.875622
354 Бинарное дерево поиска Отсортированный Поиск 0.055679
355 Бинарное дерево поиска Отсортированный Удаление 0.068214
356 Бинарное дерево поиска Отсортированный Вставка 0.871718
357 Бинарное дерево поиска Отсортированный Поиск 0.055748
358 Бинарное дерево поиска Отсортированный Удаление 0.067876
359 Бинарное дерево поиска Отсортированный Вставка 0.872458
360 Бинарное дерево поиска Отсортированный Поиск 0.054689
361 Бинарное дерево поиска Отсортированный Удаление 0.068765
362 Бинарное дерево поиска Отсортированный Вставка 0.871178
363 Бинарное дерево поиска Отсортированный Поиск 0.054816
364 Бинарное дерево поиска Отсортированный Удаление 0.067832
365 Бинарное дерево поиска Отсортированный Вставка 0.876907
366 Бинарное дерево поиска Отсортированный Поиск 0.054184
367 Бинарное дерево поиска Отсортированный Удаление 0.068164
368 Бинарное дерево поиска Отсортированный Вставка 0.868001
369 Бинарное дерево поиска Отсортированный Поиск 0.054167
370 Бинарное дерево поиска Отсортированный Удаление 0.068493
371 Бинарное дерево поиска Отсортированный Вставка 0.879394
372 Бинарное дерево поиска Отсортированный Поиск 0.058173
373 Бинарное дерево поиска Отсортированный Удаление 0.068654
374 Бинарное дерево поиска Отсортированный Вставка 0.868870
375 Бинарное дерево поиска Отсортированный Поиск 0.055234
376 Бинарное дерево поиска Отсортированный Удаление 0.068269
377 Бинарное дерево поиска Отсортированный Вставка (среднее) 0.882379
378 Бинарное дерево поиска Отсортированный Поиск (среднее) 0.056078
379 Бинарное дерево поиска Отсортированный Удаление (среднее) 0.068386

View File

@ -0,0 +1,281 @@
package main
import (
"fmt"
"math/rand"
csvwriter "source/pkg/csv_writer"
ds "source/pkg/data_struct"
dg "source/pkg/gen_data"
bst "source/pkg/structures/bin_search_tree"
ht "source/pkg/structures/hash_table"
ll "source/pkg/structures/linked_list"
// csv "source/pkg/csv_ri"
"time"
)
const (
countUsers = 20_000
countRepeat = 20
countRandomSearch = 1000
countNotExitstSearch = 500
countDeletes = 1000
)
type TestData struct {
Items []ds.MyData // все записи
ItemsSorted []ds.MyData // все записи отсортированные
Search []ds.MyData // для поиска (существующие и несуществующие)
ToDelete []ds.MyData // для удаления
UniqueItems []ds.MyData // Уникальные элементы для тестов
}
type DataStructure interface {
Insert(data ds.MyData)
InsertAll(data []ds.MyData)
Search(name string) (string, bool)
Delete(name string) bool
Len() int
}
// Создатели структур
type StructureFactory func() DataStructure
func NewLinkedList() DataStructure {
return ll.NewLinkedList()
}
func NewHashTable() DataStructure {
return ht.NewHashTable(256, 0.75)
}
func NewBinSearchTree() DataStructure {
return bst.NewBinSearchTree()
}
func uniqueElements(data []ds.MyData) []ds.MyData {
res := make([]ds.MyData, 0, len(data))
for _, el := range data {
isUnique := true
for _, resEl := range res {
if el == resEl {
isUnique = false
break
}
}
if isUnique {
res = append(res, el)
}
}
return res
}
func GenerateTestData() TestData {
items := dg.RecordsShuffled(countUsers)
// fmt.Println("isSorted:", isSorted(items))
itemsSort := ds.QSort(items, 0, len(items)-1)
uniqueItems := uniqueElements(items)
existing := make([]ds.MyData, countRandomSearch)
// notExisting := [countNotExitstSearch]ds.MyData{}
notExisting := make([]ds.MyData, countNotExitstSearch)
toDelete := make([]ds.MyData, countDeletes)
countUniq := len(uniqueItems)
for i := 0; i < countRandomSearch; i++ {
// randInd := rand.Intn(countUsers)
randInd := rand.Intn(countUniq)
existing[i] = uniqueItems[randInd]
// fmt.Println(randInd)
}
for i := 0; i < countNotExitstSearch; i++ {
// randInd := rand.Intn(countUsers)
randInd := rand.Intn(10)
name := fmt.Sprintf("User_%d", randInd)
notExisting[i] = *ds.NewData(name, "")
// fmt.Println(randInd)
}
for _, el := range notExisting {
existing = append(existing, el)
}
// toDelete = make([]ds.MyData, countDeletes)
usedIndices := make(map[int]bool)
for i := 0; i < countDeletes; i++ {
var randInd int
for {
randInd = rand.Intn(countUniq)
if !usedIndices[randInd] {
usedIndices[randInd] = true
break
}
}
toDelete[i] = uniqueItems[randInd]
}
return TestData{
Items: items,
ItemsSorted: itemsSort,
Search: existing,
ToDelete: toDelete,
UniqueItems: uniqueItems,
}
}
// Тест вставки массива данных (один раз)
func testOnesInsert(structure DataStructure, data []ds.MyData) float64 {
start := time.Now()
for _, item := range data {
structure.Insert(item)
}
return time.Since(start).Seconds()
}
// Тест поиска массива данных (один раз)
func testOnesSearch(structure DataStructure, data []ds.MyData) float64 {
start := time.Now()
for _, item := range data {
structure.Search(item.Name)
// p, ok := structure.Search(item.Name)
// fmt.Println(p, item.Phone, ok)
}
return time.Since(start).Seconds()
}
// Тест удаления массива данных (один раз)
func testOnesDelete(structure DataStructure, data []ds.MyData) float64 {
start := time.Now()
for _, item := range data {
structure.Delete(item.Name)
}
return time.Since(start).Seconds()
}
func testForData(nameStruct, mode string, factory StructureFactory, data_insert, data_search, data_delete []ds.MyData) {
BenchRes := make([]csvwriter.BenchmarkResult, 0, countRepeat*3+3) // Массив строк отчёта
averageTimeInsert := 0.
averageTimeSearch := 0.
averageTimeDelete := 0.
for iteration := 0; iteration < countRepeat; iteration++ {
structure := factory()
insertTime := testOnesInsert(structure, data_insert)
averageTimeInsert += insertTime
// Отладочная информация для бинарного дерева (проверка на вырождение)
if bst, ok := structure.(*bst.BinSearchTree); ok {
fmt.Printf(
"Высота дерева: %d, элементов: %d\n",
bst.Height(), bst.Len(),
)
}
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
Structure: nameStruct,
Mode: mode,
Operation: "Вставка",
Time: insertTime,
})
searchTime := testOnesSearch(structure, data_search)
averageTimeSearch += searchTime
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
Structure: nameStruct,
Mode: mode,
Operation: "Поиск",
Time: searchTime,
})
deleteTime := testOnesDelete(structure, data_delete)
averageTimeDelete += deleteTime
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
Structure: nameStruct,
Mode: mode,
Operation: "Удаление",
Time: deleteTime,
})
fmt.Printf("%s | Вставка | %s | Время: %f\n", nameStruct, mode, insertTime)
fmt.Printf("%s | Поиск | %s | Время: %f\n", nameStruct, mode, searchTime)
fmt.Printf("%s | Удаление | %s | Время: %.9f\n", nameStruct, mode, deleteTime)
}
averageTimeInsert /= countRepeat
averageTimeSearch /= countRepeat
averageTimeDelete /= countRepeat
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
Structure: nameStruct,
Mode: mode,
Operation: "Вставка (среднее)",
Time: averageTimeInsert,
})
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
Structure: nameStruct,
Mode: mode,
Operation: "Поиск (среднее)",
Time: averageTimeSearch,
})
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
Structure: nameStruct,
Mode: mode,
Operation: "Удаление (среднее)",
Time: averageTimeDelete,
})
fmt.Printf("%s | Вставка | %s | Время (среднее): %f\n", nameStruct, mode, averageTimeInsert)
fmt.Printf("%s | Поиск | %s | Время (среднее): %f\n", nameStruct, mode, averageTimeSearch)
fmt.Printf("%s | Удаление | %s | Время (среднее): %f\n", nameStruct, mode, averageTimeDelete)
csvwriter.AppendRaw(BenchRes)
}
func isSorted(data []ds.MyData) bool {
for i := 0; i < len(data)-1; i++ {
if data[i].Name > data[i+1].Name {
return false
}
}
return true
}
func Test(nameStruct string, factory StructureFactory) {
data := GenerateTestData()
// fmt.Println("items", isSorted(data.Items))
// fmt.Println("items sort", isSorted(data.ItemsSorted))
testForData(nameStruct, "Случайный", factory, data.Items, data.Search, data.ToDelete)
testForData(nameStruct, "Отсортированный", factory, data.ItemsSorted, data.Search, data.ToDelete)
}
func main() {
csvwriter.CreateEmptyCSV("results", "benchmarks.csv")
fmt.Println("============= Начало тестов =============")
Test("Связный список", NewLinkedList)
Test("Хеш таблица", NewHashTable)
Test("Бинарное дерево поиска", NewBinSearchTree)
// fmt.Println("User_0001" < "User_00100")
// fmt.Println(isSorted(dg.RecordsShuffled(10000)))
}

View File

@ -0,0 +1,50 @@
package main
import (
"bufio"
"fmt"
"os"
ds "source/pkg/data_struct"
bst "source/pkg/structures/bin_search_tree"
)
const (
countNumbers = 64
)
func pressEnterToContinue() {
fmt.Print("Нажмите Enter для продолжения...")
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
// isInArr проверяет, содержится ли target в срезе arr[:len]
func isInArr(arr []int, length int, target int) bool {
for i := 0; i < length; i++ {
if arr[i] == target {
return true
}
}
return false
}
func main() {
fmt.Println("hello world!")
head := bst.NewBinSearchTree()
for i := 1; i <= 20; i++ {
name := fmt.Sprintf("User_%02d", i)
phone := fmt.Sprintf("Phone_%02d", i)
head.Insert(*ds.NewData(name, phone))
}
head.BstInorderTraversal()
head.Delete("User_05")
fmt.Println("Удаляем User_05")
head.BstInorderTraversal()
fmt.Println(head.Search("User_07"))
}

View File

@ -0,0 +1,19 @@
package main
import (
"fmt"
csvwriter "source/pkg/csv_writer"
)
func main() {
// Простой способ
results := []csvwriter.BenchmarkResult{
{Structure: "HashTable", Mode: "Chaining", Operation: "Insert", Time: 0.001234},
{Structure: "LinkedList", Mode: "Singly", Operation: "Search", Time: 0.005678},
{Structure: "BSTree", Mode: "Recursive", Operation: "Delete", Time: 0.003456},
}
if err := csvwriter.AppendRaw(results); err != nil {
fmt.Printf("Ошибка: %v\n", err)
}
}

View File

@ -0,0 +1,90 @@
package main
import (
"fmt"
// hash_table "hash-table-task/hash-table"
ds "source/pkg/data_struct"
ht "source/pkg/structures/hash_table"
)
/*
1. Сконструировать и реализовать свою хеш таблицу
- изначальный размер 8, коэф-т загрузки 0.75
- Преобразование подаваемого данного в индекс с помощью хеш функции(в ручну) пример: полиномиальный хеш
- Коллизии обрабатываются методом цепочек, каждая корзина таблицы - список в котором хранятся пары значений key-value
- При превышении коэф-та загрузки происходит перехеширование таблицы, размер увеличивается вдвое, все пары заново вставляются в таблицу.
2. Читаем текстовый файл, разбивает на слова, приводим к нижнему регистру, подсчитываем повторения каждого слова: key - слово, value - кол-во повторений
- На вывод 10 самых встречающихся слов, для каждого слова выводим: ind(hash), key, value
- Текст - первая глава, первые три стиха Евгений Онегин
*/
func main() {
fmt.Println("hello world")
head := ht.NewHashTable(8, 0.75)
for i := 1; i <= 40; i++ {
name := fmt.Sprintf("User_%02d", i)
phone := fmt.Sprintf("Phone_%02d", i)
head.Insert(*ds.NewData(name, phone))
}
head.Print()
head.Delete("User_05")
fmt.Println("Удаляем User_05")
head.Print()
fmt.Println(head.Search("User_07"))
// Чтение всего файла
// const filePath = "../data/onegin.txt"
// // const filePath = "../data/onegin_full.txt"
// data, err := os.ReadFile(filePath)
// text := string(data)
// if err != nil {
// fmt.Println("Ошибка чтения файла:", err)
// return
// }
// fmt.Println(text)
// text = strings.ToLower(text)
// // Разбиение на слова (разделители: пробелы и переводы строк)
// re := regexp.MustCompile(`[\p{L}\p{N}-]+`)
// words := re.FindAllString(text, -1)
// fmt.Printf("Найдено слов: %d\n", len(words))
// for i, word := range words {
// fmt.Printf("Слово %d: %s\n", i+1, word)
// }
// hashTable := ht.NewHashTable(8, 0.95)
// for i, word := range words {
// fmt.Printf("%d : %s\n", i, word)
// hashTable.Put(word, 1)
// }
// fmt.Println("\nХеш таблица текста: ")
// hashTable.Print()
// // fmt.Println("Отсортированные ячейки таблицы: ")
// // hashTable.PrintSort()
// fmt.Println("\nСамые часто встречающиеся слова: ")
// // hashTable.PrintMostPopularWords(10)
}

View File

@ -0,0 +1,52 @@
package main
import (
"bufio"
"fmt"
"os"
ds "source/pkg/data_struct"
// rs "source/pkg/resulter"
ll "source/pkg/structures/linked_list"
)
func isInArr(arr []int, length int, target int) bool {
for i := 0; i < length; i++ {
if arr[i] == target {
return true
}
}
return false
}
func Razdelitel() {
for i := 0; i < 20; i++ {
fmt.Print("-")
}
fmt.Println()
}
func pressEnterToContinue() {
fmt.Print("Нажмите Enter для продолжения...")
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
func main() {
fmt.Println("hello world!")
head := ll.NewLinkedList()
for i := 1; i <= 20; i++ {
name := fmt.Sprintf("User_%02d", i)
phone := fmt.Sprintf("Phone_%02d", i)
head.Insert(*ds.NewData(name, phone))
}
head.PrintAll()
head.Delete("User_05")
head.PrintAll()
fmt.Println(head.Search("User_07"))
}