Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СиАОД Архангельский М.В. БСТ-2154.docx
Скачиваний:
16
Добавлен:
01.05.2023
Размер:
162.71 Кб
Скачать

Приложение б Листинг программы задания №2

import java.util.Random;

public class Main

{

static class Node {

int value;

Node left, right;

public Node(int item) {

value = item;

left = right = null;

}

}

static class Tree {

Node root;

Tree() {

root = null;

}

void insert(int value) {

root = insertNode(root, value);

}

Node insertNode(Node root, int value) {

if (root == null) {

root = new Node(value);

return root;

}

if (value < root.value) {

root.left = insertNode(root.left, value);

} else if (value > root.value) {

root.right = insertNode(root.right, value);

}

return root;

}

Node find(int value) {

return findNode(root, value);

}

Node findNode(Node root, int value) {

if (root == null || root.value == value) {

return root;

}

if (root.value > value) {

return findNode(root.left, value);

}

return findNode(root.right, value);

}

void remove(int value) {

root = removeNode(root, value);

}

Node removeNode(Node root, int value) {

if (root == null) {

return root;

}

if (value < root.value) {

root.left = removeNode(root.left, value);

} else if (value > root.value) {

root.right = removeNode(root.right, value);

} else {

if (root.left == null) {

return root.right;

} else if (root.right == null) {

return root.left;

}

root.value = minValue(root.right);

root.right = removeNode(root.right, root.value);

}

return root;

}

int minValue(Node root) {

int minValue = root.value;

while (root.left != null) {

minValue = root.left.value;

root = root.left;

}

return minValue;

}

}

public static void main(String[] args)

{

int n = 10000;

Random random = new Random();

Tree tree = new Tree();

// Генерация начального набора случайных данных

for (int i = 0; i < n; i++) {

tree.insert(random.nextInt(n));

}

int searchValue = random.nextInt(n);

// Оценка времени работы алгоритма поиска

long startTime = System.nanoTime();

tree.find(searchValue);

long endTime = System.nanoTime();

System.out.println("Время работы бинарного дерева: " + (endTime - startTime) + " нс");

// Оценка времени работы стандартной функции поиска

int[] array = new int[n];

for (int i = 0; i < n; i++) {

array[i] = random.nextInt(n);

}

startTime = System.nanoTime();

java.util.Arrays.sort(array); // Сортировка массива перед бинарным поиском

int index = java.util.Arrays.binarySearch(array, searchValue); // Использование стандартной функции поиска

endTime = System.nanoTime();

System.out.println("Время работы стандартной функции поиска: " + (endTime - startTime) + " нс");

// Сравнение времени работы алгоритмов

startTime = System.nanoTime();

tree.remove(searchValue);

endTime = System.nanoTime();

System.out.println("Время работы удаления элемента из бинарного дерева: " + (endTime - startTime) + " нс");

startTime = System.nanoTime();

if (index >= 0) {

array = removeElementFromArray(array, index);

}

endTime = System.nanoTime();

System.out.println("Время работы удаления элемента из массива: " + (endTime - startTime) + " нс");

}

private static int[] removeElementFromArray(int[] array, int index) {

int[] result = new int[array.length - 1];

System.arraycopy(array, 0, result, 0, index);

System.arraycopy(array, index + 1, result, index, array.length - index - 1);

return result;

}

}