From cf43aea7dbcd47bb24da55b7797e3220524b4733 Mon Sep 17 00:00:00 2001 From: Romkarus Date: Sun, 15 Dec 2024 00:51:31 +0300 Subject: [PATCH] 20+ pr --- .../practice/s23k0215/task1/RoadCount.java | 39 ++++++ .../practice/s23k0215/task1/BinaryTree.java | 128 ++++++++++++++++++ .../mirea/practice/s23k0215/task1/Main.java | 14 -- .../mirea/practice/s23k0215/task1/Triple.java | 47 ------- .../s23k0215/task2/HuffmanCoding.java | 75 ++++++++++ .../practice/s23k0215/task2/HuffmanNode.java | 15 ++ .../mirea/practice/s23k0215/task2/Triple.java | 42 ------ students/23K0215/23K0215-p31/pom.xml | 13 ++ .../mirea/practice/s23k0215/task1/Node.java | 16 +++ .../practice/s23k0215/task1/TreePrinter.java | 39 ++++++ students/23K0215/23K0215-p32/pom.xml | 13 ++ .../s23k0215/task1/JohnsonTrotter.java | 65 +++++++++ students/23K0215/pom.xml | 2 + 13 files changed, 405 insertions(+), 103 deletions(-) create mode 100644 students/23K0215/23K0215-p29/src/main/java/ru/mirea/practice/s23k0215/task1/RoadCount.java create mode 100644 students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/BinaryTree.java delete mode 100644 students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Main.java delete mode 100644 students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Triple.java create mode 100644 students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanCoding.java create mode 100644 students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanNode.java delete mode 100644 students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/Triple.java create mode 100644 students/23K0215/23K0215-p31/pom.xml create mode 100644 students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/Node.java create mode 100644 students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/TreePrinter.java create mode 100644 students/23K0215/23K0215-p32/pom.xml create mode 100644 students/23K0215/23K0215-p32/src/main/java/ru/mirea/practice/s23k0215/task1/JohnsonTrotter.java diff --git a/students/23K0215/23K0215-p29/src/main/java/ru/mirea/practice/s23k0215/task1/RoadCount.java b/students/23K0215/23K0215-p29/src/main/java/ru/mirea/practice/s23k0215/task1/RoadCount.java new file mode 100644 index 000000000..51918ad40 --- /dev/null +++ b/students/23K0215/23K0215-p29/src/main/java/ru/mirea/practice/s23k0215/task1/RoadCount.java @@ -0,0 +1,39 @@ +package ru.mirea.practice.s23k0215.task1; + +import java.util.Scanner; + +public abstract class RoadCount { + public static void main(String[] args) { + try (Scanner scanner = new Scanner(System.in)) { + int n = scanner.nextInt(); + + if (n == 0) { + System.out.println(0); + return; + } + + int[][] adjacencyMatrix = new int[n][n]; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + adjacencyMatrix[i][j] = scanner.nextInt(); + } + } + + int roadCount = 0; + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + if (adjacencyMatrix[i][j] == 1) { + roadCount++; + } + } + } + + System.out.println(roadCount); + } + } +} +// Если захотите посмотреть можете мне в +// коментрии к пул-реквесту написать дам вам ссылку на диск +// где лежит +// решение лабораторной по теории графов на Си на 1000+ строк :) diff --git a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/BinaryTree.java b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/BinaryTree.java new file mode 100644 index 000000000..1c648abdf --- /dev/null +++ b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/BinaryTree.java @@ -0,0 +1,128 @@ +package ru.mirea.practice.s23k0215.task1; + +public final class BinaryTree { + + static class Node { + int data; + Node left; + Node right; + + public Node(int data) { + this.data = data; + left = right = null; + } + } + + private Node root; + + public BinaryTree() { + root = null; + } + + public void insert(int data) { + root = insertRec(root, data); + } + + private Node insertRec(Node root, int data) { + if (root == null) { + root = new Node(data); + return root; + } + + if (data < root.data) { + root.left = insertRec(root.left, data); + } else if (data > root.data) { + root.right = insertRec(root.right, data); + } + + return root; + } + + public boolean search(int data) { + return searchRec(root, data); + } + + private boolean searchRec(Node root, int data) { + if (root == null) { + return false; + } + if (data == root.data) { + return true; + } + if (data < root.data) { + return searchRec(root.left, data); + } else { + return searchRec(root.right, data); + } + } + + public void delete(int data) { + root = deleteRec(root, data); + } + + private Node deleteRec(Node root, int data) { + if (root == null) { + return root; + } + + if (data < root.data) { + root.left = deleteRec(root.left, data); + } else if (data > root.data) { + root.right = deleteRec(root.right, data); + } else { + if (root.left == null) { + return root.right; + } else if (root.right == null) { + return root.left; + } + + root.data = minValue(root.right); + root.right = deleteRec(root.right, root.data); + } + + return root; + } + + private int minValue(Node root) { + int minValue = root.data; + while (root.left != null) { + root = root.left; + minValue = root.data; + } + return minValue; + } + + public void inorder() { + inorderRec(root); + } + + private void inorderRec(Node root) { + if (root != null) { + inorderRec(root.left); + System.out.print(root.data + " "); + inorderRec(root.right); + } + } + + public static void main(String[] args) { + BinaryTree tree = new BinaryTree(); + + tree.insert(50); + tree.insert(30); + tree.insert(20); + tree.insert(40); + tree.insert(70); + tree.insert(60); + tree.insert(80); + + System.out.println("Обход дерева в порядке возрастания:"); + tree.inorder(); + + System.out.println("\nПоиск элемента 40: " + tree.search(40)); + System.out.println("Поиск элемента 90: " + tree.search(90)); + + tree.delete(20); + System.out.println("\nОбход дерева после удаления 20:"); + tree.inorder(); + } +} diff --git a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Main.java b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Main.java deleted file mode 100644 index d66c9df26..000000000 --- a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Main.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.mirea.practice.s23k0215.task1; - -public abstract class Main { - public static void main(String[] args) { - Triple triple = new Triple<>("Test", 123, 45.67); - - System.out.println(triple); - - System.out.println("First: " + triple.getFirst()); - System.out.println("Second: " + triple.getSecond()); - System.out.println("Third: " + triple.getThird()); - } -} - diff --git a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Triple.java b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Triple.java deleted file mode 100644 index 6a8955281..000000000 --- a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task1/Triple.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.mirea.practice.s23k0215.task1; - -public class Triple { - private T first; - private V second; - private K third; - - public Triple(T first, V second, K third) { - this.first = first; - this.second = second; - this.third = third; - } - - public T getFirst() { - return first; - } - - public void setFirst(T first) { - this.first = first; - } - - public V getSecond() { - return second; - } - - public void setSecond(V second) { - this.second = second; - } - - public K getThird() { - return third; - } - - public void setThird(K third) { - this.third = third; - } - - @Override - public String toString() { - return "Triple{" - + "first=" + first - + ", second=" + second - + ", third=" + third - + '}'; - } -} - diff --git a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanCoding.java b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanCoding.java new file mode 100644 index 000000000..8e3ab71cc --- /dev/null +++ b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanCoding.java @@ -0,0 +1,75 @@ +package ru.mirea.practice.s23k0215.task2; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import java.util.PriorityQueue; + +public final class HuffmanCoding { + + private HuffmanCoding() { + throw new UnsupportedOperationException("Это утилитный класс, и его нельзя создавать."); + } + + public static void buildHuffmanTree(String text) { + Map frequencyMap = new HashMap<>(); + for (char ch : text.toCharArray()) { + frequencyMap.put(ch, frequencyMap.getOrDefault(ch, 0) + 1); + } + + PriorityQueue priorityQueue = new PriorityQueue<>( + Comparator.comparingInt(a -> a.frequency) + ); + + for (Map.Entry entry : frequencyMap.entrySet()) { + priorityQueue.offer(new HuffmanNode(entry.getKey(), entry.getValue())); + } + + while (priorityQueue.size() > 1) { + HuffmanNode left = priorityQueue.poll(); + HuffmanNode right = priorityQueue.poll(); + + assert right != null; + HuffmanNode newNode = new HuffmanNode('\0', left.frequency + right.frequency); + newNode.left = left; + newNode.right = right; + + priorityQueue.offer(newNode); + } + + HuffmanNode root = priorityQueue.poll(); + + Map huffmanCodeMap = new HashMap<>(); + generateHuffmanCodes(root, "", huffmanCodeMap); + + System.out.println("Хаффмановские коды:"); + for (Map.Entry entry : huffmanCodeMap.entrySet()) { + System.out.println(entry.getKey() + ": " + entry.getValue()); + } + + StringBuilder compressedText = new StringBuilder(); + for (char ch : text.toCharArray()) { + compressedText.append(huffmanCodeMap.get(ch)); + } + + System.out.println("Сжатый текст: " + compressedText); + } + + private static void generateHuffmanCodes(HuffmanNode root, String code, Map huffmanCodeMap) { + if (root == null) { + return; + } + + if (root.left == null && root.right == null) { + huffmanCodeMap.put(root.ch, code); + } + + generateHuffmanCodes(root.left, code + "0", huffmanCodeMap); + generateHuffmanCodes(root.right, code + "1", huffmanCodeMap); + } + + public static void main(String[] args) { + String text = "Это пример для кодирования Хаффмана"; + buildHuffmanTree(text); + } +} diff --git a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanNode.java b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanNode.java new file mode 100644 index 000000000..c45995ebe --- /dev/null +++ b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/HuffmanNode.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s23k0215.task2; + +public class HuffmanNode { + char ch; + int frequency; + HuffmanNode left; + HuffmanNode right; + + public HuffmanNode(char ch, int frequency) { + this.ch = ch; + this.frequency = frequency; + this.left = this.right = null; + } +} + diff --git a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/Triple.java b/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/Triple.java deleted file mode 100644 index d50df2e95..000000000 --- a/students/23K0215/23K0215-p30/src/main/java/ru/mirea/practice/s23k0215/task2/Triple.java +++ /dev/null @@ -1,42 +0,0 @@ -package ru.mirea.practice.s23k0215.task2; - -public class Triple { - private T first; - private V second; - private K third; - - public Triple(T first, V second, K third) { - this.first = first; - this.second = second; - this.third = third; - } - - public T getFirst() { - return first; - } - - public V getSecond() { - return second; - } - - public K getThird() { - return third; - } - - public void printClassNames() { - System.out.println("Class of first: " + first.getClass().getName()); - System.out.println("Class of second: " + second.getClass().getName()); - System.out.println("Class of third: " + third.getClass().getName()); - } - - public static void main(String[] args) { - Triple triple = new Triple<>(123, "Hello", 45.67); - - System.out.println("First: " + triple.getFirst()); - System.out.println("Second: " + triple.getSecond()); - System.out.println("Third: " + triple.getThird()); - - triple.printClassNames(); - } -} - diff --git a/students/23K0215/23K0215-p31/pom.xml b/students/23K0215/23K0215-p31/pom.xml new file mode 100644 index 000000000..bbbba1b21 --- /dev/null +++ b/students/23K0215/23K0215-p31/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0215 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0215-p31 + пр31 + diff --git a/students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/Node.java b/students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/Node.java new file mode 100644 index 000000000..99643f01d --- /dev/null +++ b/students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/Node.java @@ -0,0 +1,16 @@ +package ru.mirea.practice.s23k0215.task1; + +public class Node { + int value; + Node left; + Node middle; + Node right; + + public Node(int value) { + this.value = value; + this.left = null; + this.middle = null; + this.right = null; + } +} + diff --git a/students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/TreePrinter.java b/students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/TreePrinter.java new file mode 100644 index 000000000..72cc85fdf --- /dev/null +++ b/students/23K0215/23K0215-p31/src/main/java/ru/mirea/practice/s23k0215/task1/TreePrinter.java @@ -0,0 +1,39 @@ +package ru.mirea.practice.s23k0215.task1; + + +public final class TreePrinter { + + private TreePrinter() { + throw new UnsupportedOperationException("Utility class cannot be instantiated."); + } + + public static void printTree(Node node, int level) { + if (node == null) { + return; + } + + printTree(node.left, level + 1); + printTree(node.middle, level + 1); + printTree(node.right, level + 1); + + System.out.println("Значение: " + node.value + ", Уровень: " + level); + } + + public static void main(String[] args) { + final Node root = new Node(5); + final Node node2 = new Node(2); + final Node node3 = new Node(6); + final Node node4 = new Node(1); + final Node node5 = new Node(3); + final Node node6 = new Node(4); + + root.left = node2; + root.middle = node3; + root.right = node4; + + node2.left = node5; + node2.right = node6; + + printTree(root, 0); + } +} diff --git a/students/23K0215/23K0215-p32/pom.xml b/students/23K0215/23K0215-p32/pom.xml new file mode 100644 index 000000000..c9e51047a --- /dev/null +++ b/students/23K0215/23K0215-p32/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0215 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0215-p32 + пр32 + diff --git a/students/23K0215/23K0215-p32/src/main/java/ru/mirea/practice/s23k0215/task1/JohnsonTrotter.java b/students/23K0215/23K0215-p32/src/main/java/ru/mirea/practice/s23k0215/task1/JohnsonTrotter.java new file mode 100644 index 000000000..07212cd8d --- /dev/null +++ b/students/23K0215/23K0215-p32/src/main/java/ru/mirea/practice/s23k0215/task1/JohnsonTrotter.java @@ -0,0 +1,65 @@ +package ru.mirea.practice.s23k0215.task1; + +import java.util.Arrays; + +public final class JohnsonTrotter { + + private JohnsonTrotter() { + throw new UnsupportedOperationException("Невозможно создать экземпляр утилитарного класса."); + } + + public static void generatePermutations(int n) { + int[] p = new int[n]; + int[] d = new int[n]; + + for (int i = 0; i < n; i++) { + p[i] = i + 1; + d[i] = -1; + } + + printPermutation(p); + + while (true) { + int max = -1; + int maxIdx = -1; + + for (int i = 0; i < n; i++) { + if (d[i] == -1 && i > 0 && p[i] > p[i - 1] || d[i] == 1 && i < n - 1 && p[i] < p[i + 1]) { + if (p[i] > max) { + max = p[i]; + maxIdx = i; + } + } + } + + if (max == -1) { + break; + } + + d[maxIdx] = -d[maxIdx]; + + if (d[maxIdx] == -1 && maxIdx > 0) { + swap(p, maxIdx, maxIdx - 1); + } else if (d[maxIdx] == 1 && maxIdx < n - 1) { + swap(p, maxIdx, maxIdx + 1); + } + + printPermutation(p); + } + } + + private static void swap(int[] p, int i, int j) { + int temp = p[i]; + p[i] = p[j]; + p[j] = temp; + } + + private static void printPermutation(int[] p) { + System.out.println(Arrays.toString(p)); + } + + public static void main(String[] args) { + int n = 3; + generatePermutations(n); + } +} diff --git a/students/23K0215/pom.xml b/students/23K0215/pom.xml index f6a36cb10..68589b575 100644 --- a/students/23K0215/pom.xml +++ b/students/23K0215/pom.xml @@ -43,6 +43,8 @@ 23K0215-p28 23K0215-p29 23K0215-p30 + 23K0215-p31 + 23K0215-p32