Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Лаба 30 #676

Merged
merged 4 commits into from
Dec 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions students/23K0815/23K0815-p30/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>23K0815</artifactId>
<groupId>ru.mirea.practice</groupId>
<version>2024.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>23K0815-p30</artifactId>
<description>Массивы</description>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package ru.mirea.practice.s0000001.task1;

class SearchTree {
private TreeNode root;

public SearchTree() {
root = null;
}

public void insert(int key) {
root = insertNode(root, key);
}

private TreeNode insertNode(TreeNode current, int key) {
if (current == null) {
current = new TreeNode(key);
return current;
}
if (key < current.value) {
current.leftChild = insertNode(current.leftChild, key);
} else if (key > current.value) {
current.rightChild = insertNode(current.rightChild, key);
}
return current;
}

public void printTree() {
inOrderTraversal(root);
System.out.println();
}

private void inOrderTraversal(TreeNode current) {
if (current != null) {
inOrderTraversal(current.leftChild);
System.out.print(current.value + " ");
inOrderTraversal(current.rightChild);
}
}

public void delete(int key) {
root = deleteNode(root, key);
}

private TreeNode deleteNode(TreeNode current, int key) {
if (current == null) {
return current;
}

if (key < current.value) {
current.leftChild = deleteNode(current.leftChild, key);
} else if (key > current.value) {
current.rightChild = deleteNode(current.rightChild, key);
} else {
if (current.leftChild == null) {
return current.rightChild;
} else if (current.rightChild == null) {
return current.leftChild;
}

current.value = getMinValue(current.rightChild);
current.rightChild = deleteNode(current.rightChild, current.value);
}
return current;
}

private int getMinValue(TreeNode current) {
int minValue = current.value;
while (current.leftChild != null) {
minValue = current.leftChild.value;
current = current.leftChild;
}
return minValue;
}

public void clear() {
root = clearAll(root);
}

private TreeNode clearAll(TreeNode current) {
if (current == null) {
return null;
}
current.leftChild = clearAll(current.leftChild);
current.rightChild = clearAll(current.rightChild);
current = null;
return current;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.mirea.practice.s0000001.task1;

class TreeNode {
int value;
TreeNode leftChild;
TreeNode rightChild;

TreeNode(int key) {
value = key;
leftChild = rightChild = null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package ru.mirea.practice.s0000001.task2;

import java.util.Map;
import java.util.PriorityQueue;
import java.util.TreeMap;

public abstract class HuffmanAlgorithm {

public static Map<Character, Integer> generateFrequencyMap(String input) {
Map<Character, Integer> frequencyMap = new TreeMap<>();
for (char character : input.toCharArray()) {
frequencyMap.put(character, frequencyMap.getOrDefault(character, 0) + 1);
}
return frequencyMap;
}

public static Map<Character, String> constructHuffmanTree(Map<Character, Integer> frequencyMap) {
PriorityQueue<HuffmanTreeNode> priorityQueue = new PriorityQueue<>();
for (Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
priorityQueue.add(new HuffmanTreeNode(entry.getKey(), entry.getValue()));
}

while (priorityQueue.size() > 1) {
HuffmanTreeNode leftNode = priorityQueue.poll();
HuffmanTreeNode rightNode = priorityQueue.poll();
HuffmanTreeNode parentNode = new HuffmanTreeNode('\0', leftNode.frequency + rightNode.frequency);
parentNode.left = leftNode;
parentNode.right = rightNode;
priorityQueue.add(parentNode);
}

Map<Character, String> huffmanCodes = new TreeMap<>();
createHuffmanCodes(priorityQueue.peek(), "", huffmanCodes);

return huffmanCodes;
}

public static void createHuffmanCodes(HuffmanTreeNode node, String code, Map<Character, String> huffmanCodes) {
if (node != null) {
if (node.character != '\0') {
huffmanCodes.put(node.character, code);
}
createHuffmanCodes(node.left, code + "0", huffmanCodes);
createHuffmanCodes(node.right, code + "1", huffmanCodes);
}
}

public static class HuffmanTreeNode implements Comparable<HuffmanTreeNode> {
char character;
int frequency;
HuffmanTreeNode left;
HuffmanTreeNode right;

HuffmanTreeNode(char character, int frequency) {
this.character = character;
this.frequency = frequency;
}

@Override
public int compareTo(HuffmanTreeNode other) {
return Integer.compare(this.frequency, other.frequency);
}
}
}
13 changes: 13 additions & 0 deletions students/23K0815/23K0815-p31/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>23K0815</artifactId>
<groupId>ru.mirea.practice</groupId>
<version>2024.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>23K0815-p31</artifactId>
<description>Массивы</description>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package ru.mirea.practice.s0000001.task1;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public abstract class ProcessorTree {
public static void main(String[] args) {
TwoThreeTree tree = new TwoThreeTree();

// Чтение данных из файла
try (BufferedReader reader = new BufferedReader(new FileReader("PROCS.TXT"))) {
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(", ");
int key = Integer.parseInt(parts[0]);
tree.insert(key);
}
} catch (IOException e) {
System.err.println("Ошибка при чтении файла: " + e.getMessage());
}

// Используем try-with-resources для Scanner, чтобы автоматически закрыть его
try (Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.print("Введите команду (L, D n, A n, S, E): ");
String command = scanner.nextLine().trim();
if ("L".equals(command)) {
tree.printTree();
} else if (command.startsWith("D ")) {
// Логика удаления здесь (пока не реализована)
System.out.println("Удаление не реализовано.");
} else if (command.startsWith("A ")) {
// Логика добавления здесь (пока не реализована)
System.out.println("Добавление не реализовано.");
} else if ("S".equals(command)) {
try {
tree.saveToFile("PROCS.TXT");
} catch (IOException e) {
System.err.println("Ошибка при сохранении файла: " + e.getMessage());
}
} else if ("E".equals(command)) {
break;
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.mirea.practice.s0000001.task1;

import java.util.ArrayList;
import java.util.List;

class TreeNode {
List<Integer> keys;
List<TreeNode> children;

public TreeNode(int key) {
keys = new ArrayList<>();
keys.add(key);
children = new ArrayList<>();
}

public boolean isLeaf() {
return children.isEmpty();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package ru.mirea.practice.s0000001.task1;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

class TwoThreeTree {
private TreeNode root;

public void insert(int key) {
if (root == null) {
root = new TreeNode(key);
} else {
root = insert(root, key);
}
}

private TreeNode insert(TreeNode node, int key) {
if (node.isLeaf()) {
node.keys.add(key);
sortKeys(node);
if (node.keys.size() == 3) {
return split(node);
}
return null;
}

for (int i = 0; i < node.keys.size(); i++) {
if (key < node.keys.get(i)) {
TreeNode child = insert(node.children.get(i), key);
if (child != null) {
node.keys.add(i, child.keys.get(0));
node.children.add(i + 1, child);
if (node.keys.size() == 3) {
return split(node);
}
}
return null;
}
}

TreeNode child = insert(node.children.get(node.children.size() - 1), key);
if (child != null) {
node.keys.add(child.keys.get(0));
node.children.add(child);
if (node.keys.size() == 3) {
return split(node);
}
}
return null;
}

private TreeNode split(TreeNode node) {
TreeNode newNode = new TreeNode(node.keys.remove(2));
newNode.children.addAll(node.children.subList(2, node.children.size()));
node.children = node.children.subList(0, 2);
return newNode;
}

private void sortKeys(TreeNode node) {
node.keys.sort(Integer::compareTo);
}

public void printTree() {
if (root != null) {
printTree(root, 0);
}
}

private void printTree(TreeNode node, int level) {
System.out.print(" ".repeat(level * 2));
System.out.print(node.keys + " ");
for (TreeNode child : node.children) {
printTree(child, level + 1);
}
System.out.println();
}

public void saveToFile(String filename) throws IOException {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
saveToFile(root, writer);
}
}

private void saveToFile(TreeNode node, BufferedWriter writer) throws IOException {
if (node != null) {
for (int key : node.keys) {
writer.write(key + ", ");
}
writer.newLine();
for (TreeNode child : node.children) {
saveToFile(child, writer);
}
}
}
}
13 changes: 13 additions & 0 deletions students/23K0815/23K0815-p32/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>23K0815</artifactId>
<groupId>ru.mirea.practice</groupId>
<version>2024.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>23K0815-p32</artifactId>
<description>Массивы</description>
</project>
Loading
Loading