ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

Π£Π»Π°Π·Π°ΠΊ

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ Ρ›Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈ ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΎΠΌ Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, ΠΊΠ°ΠΎ ΠΈΠΎ њСговој ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ Ρƒ ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°.

Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ³Π°, написаћСмо Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½ Π°Ρ€Ρ…ΠΈΠ²Π΅Ρ€. Ово јС Π²Π΅Ρ› Π±ΠΈΠ»ΠΎ Ρ‡Π»Π°Π½Π°ΠΊ ΠΎ Π₯Π°Π±Ρ€Π΅Ρƒ, Π°Π»ΠΈ Π±Π΅Π· ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅. Π’Π΅ΠΎΡ€ΠΈΡ˜ΡΠΊΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π» ΠΎΠ²ΠΎΠ³ поста јС ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ ΠΈΠ· ΡˆΠΊΠΎΠ»ΡΠΊΠΈΡ… часова ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ књигС Π ΠΎΠ±Π΅Ρ€Ρ‚Π° Π›Π°Ρ„ΠΎΡ€Π΅Ρ‚Π° "Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Ρƒ Јави". Π”Π°ΠΊΠ»Π΅, свС јС испод Ρ€Π΅Π·Π°!

Мало Ρ€Π°Π·ΠΌΠΈΡˆΡ™Π°ΡšΠ°

Π£ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎΡ˜ Ρ‚Π΅ΠΊΡΡ‚ΡƒΠ°Π»Π½ΠΎΡ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ, јСдан Π·Π½Π°ΠΊ јС ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ са 8 Π±ΠΈΡ‚Π° (АБЦИИ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅) ΠΈΠ»ΠΈ 16 (Π£Π½ΠΈΡ†ΠΎΠ΄Π΅ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅). Π—Π°Ρ‚ΠΈΠΌ Ρ›Π΅ΠΌΠΎ Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΡ‚ΠΈ АБЦИИ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ·ΠΌΠΈΡ‚Π΅ стринг с1 = "Π‘Π£Π—Π˜Π• ΠšΠΠ–Π• ДА ΠˆΠ• Π›ΠΠšΠž". Π£ΠΊΡƒΠΏΠ½ΠΎ, Ρƒ Ρ€Π΅Π΄Ρƒ ΠΈΠΌΠ° 22 Π·Π½Π°ΠΊΠ°, Π½Π°Ρ€Π°Π²Π½ΠΎ, ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜ΡƒΡ›ΠΈ Ρ€Π°Π·ΠΌΠ°ΠΊΠ΅ ΠΈ Π·Π½Π°ΠΊ Π½ΠΎΠ²ΠΎΠ³ Ρ€Π΅Π΄Π° - 'Π½'. Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° која садрТи ΠΎΠ²Ρƒ Π»ΠΈΠ½ΠΈΡ˜Ρƒ Ρ›Π΅ Ρ‚Π΅ΠΆΠΈΡ‚ΠΈ 22*8 = 176 Π±ΠΈΡ‚Π°. ΠžΠ΄ΠΌΠ°Ρ… сС поставља ΠΏΠΈΡ‚Π°ΡšΠ΅: Π΄Π° Π»ΠΈ јС Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ користити свих 8 Π±ΠΈΡ‚Π° Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅ 1 Π·Π½Π°ΠΊΠ°? НС користимо свС АБЦИИ Π·Π½Π°ΠΊΠΎΠ²Π΅. Π§Π°ΠΊ ΠΈ Π΄Π° Ρ˜Π΅ΡΡƒ, Π±ΠΈΠ»ΠΎ Π±ΠΈ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ˜Π΅ Π΄Π°Ρ‚ΠΈ Π½Π°Ρ˜Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ‚Π½ΠΈΡ˜Π΅ слово - Π‘ - Π½Π°Ρ˜ΠΊΡ€Π°Ρ›ΠΈ ΠΌΠΎΠ³ΡƒΡ›ΠΈ ΠΊΠΎΠ΄, Π° Π·Π° Π½Π°Ρ˜Ρ€Π΅Ρ’Π΅ слово - Π’ (ΠΈΠ»ΠΈ Π£, ΠΈΠ»ΠΈ 'Π½') - Π΄Π°Ρ‚ΠΈ ΡˆΠΈΡ„Ρ€Ρƒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈΡ˜ΠΈ. Ово јС Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ² Π°Π»Π³ΠΎΡ€ΠΈΡ‚Π°ΠΌ: ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΏΡ€ΠΎΠ½Π°Ρ’Π΅Ρ‚Π΅ Π½Π°Ρ˜Π±ΠΎΡ™Ρƒ ΠΎΠΏΡ†ΠΈΡ˜Ρƒ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ° Ρƒ којој Ρ›Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌΠ°Ρ‚ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Ρƒ Ρ‚Π΅ΠΆΠΈΠ½Ρƒ. Басвим јС Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ Π΄Π° Ρ›Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈ Π·Π½Π°ΠΊΠΎΠ²ΠΈ ΠΈΠΌΠ°Ρ‚ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π΄ΡƒΠΆΠΈΠ½Π΅ ΠΊΠΎΠ΄Π° - Ρ‚ΠΎ јС основа Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠšΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅

Π—Π°ΡˆΡ‚ΠΎ Π½Π΅ Π΄Π°Ρ‚Π΅ Π·Π½Π°ΠΊΡƒ 'Π‘' ΠΊΠΎΠ΄, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΡƒΠ³ 1 Π±ΠΈΡ‚: 0 ΠΈΠ»ΠΈ 1. НСка Π±ΡƒΠ΄Π΅ 1. Π—Π°Ρ‚ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π°Ρ˜Ρ‡Π΅ΡˆΡ›ΠΈ Π·Π½Π°ΠΊ - ' ' (Ρ€Π°Π·ΠΌΠ°ΠΊ) - Π΄Π°Ρ›Π΅ΠΌΠΎ 0. ЗамислитС, ΠΏΠΎΡ‡Π΅Π»ΠΈ стС Π΄Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΡΠ²ΠΎΡ˜Ρƒ ΠΏΠΎΡ€ΡƒΠΊΡƒ - ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ стринг с1 - ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π° ΠΊΠΎΠ΄ ΠΏΠΎΡ‡ΠΈΡšΠ΅ са 1. Π”Π°ΠΊΠ»Π΅, ΡˆΡ‚Π° Π΄Π° Ρ€Π°Π΄ΠΈΡ‚Π΅: Π΄Π° Π»ΠΈ јС Ρ‚ΠΎ Π·Π½Π°ΠΊ Π‘, ΠΈΠ»ΠΈ јС Ρ‚ΠΎ Π½Π΅ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π·Π½Π°ΠΊ, ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ јС А? Π‘Ρ‚ΠΎΠ³Π° сС поставља Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

НијСдан ΠΊΠΎΠ΄ Π½Π΅ смС Π±ΠΈΡ‚ΠΈ прСфикс Π΄Ρ€ΡƒΠ³ΠΎΠ³

Ово ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ јС ΠΊΡ™ΡƒΡ‡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π‘Ρ‚ΠΎΠ³Π°, ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΡ‡ΠΈΡšΠ΅ са Ρ‚Π°Π±Π΅Π»ΠΎΠΌ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°, која ΡƒΠΊΠ°Π·ΡƒΡ˜Π΅ Π½Π° учСсталост (Π±Ρ€ΠΎΡ˜ ΠΏΠΎΡ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ°) сваког симбола:

ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π—Π½Π°ΠΊΠΎΠ²ΠΈ са највишС ΠΏΠΎΡ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΡƒΠ΄Ρƒ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ са најмањС ΠΌΠΎΠ³ΡƒΡ›Π΅ Π±Ρ€ΠΎΡ˜ Π±ΠΈΡ‚ΠΎΠ²Π°. Π”Π°Ρ›Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ јСднС ΠΎΠ΄ ΠΌΠΎΠ³ΡƒΡ›ΠΈΡ… Ρ‚Π°Π±Π΅Π»Π° ΠΊΠΎΠ΄ΠΎΠ²Π°:

ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π”Π°ΠΊΠ»Π΅, ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π° ΠΏΠΎΡ€ΡƒΠΊΠ° Ρ›Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΎΠ²Π°ΠΊΠΎ:

10 01111 10 110 1111 00 10 010 1110 10 00 110 0110 00 110 10 00 1111 010 10 1110 01110

Одвојио сам ΠΊΠΎΠ΄ сваког Π·Π½Π°ΠΊΠ° Ρ€Π°Π·ΠΌΠ°ΠΊΠΎΠΌ. Ово сС заиста Π½Π΅Ρ›Π΅ Π΄ΠΎΠ³ΠΎΠ΄ΠΈΡ‚ΠΈ Ρƒ ΠΊΠΎΠΌΠΏΡ€ΠΈΠΌΠΎΠ²Π°Π½ΠΎΡ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ!
ΠŸΠΎΡΡ‚Π°Π²Ρ™Π° сС ΠΏΠΈΡ‚Π°ΡšΠ΅: ΠΊΠ°ΠΊΠΎ јС овај новајлија дошао Π΄ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚Π°Π±Π΅Π»Ρƒ ΠΊΠΎΠ΄ΠΎΠ²Π°? О Ρ‚ΠΎΠΌΠ΅ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Ρ€Π΅Ρ‡ΠΈ Ρƒ наставку.

Π˜Π·Π³Ρ€Π°Π΄ΡšΠ° Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π΄Ρ€Π²Π΅Ρ‚Π°

Π’Ρƒ Ρƒ ΠΏΠΎΠΌΠΎΡ› прискачу стабла Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ°. НС Π±Ρ€ΠΈΠ½ΠΈΡ‚Π΅, ΠΎΠ²Π΄Π΅ Π²Π°ΠΌ Π½Π΅Ρ›Π΅ Ρ‚Ρ€Π΅Π±Π°Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΡ€Π΅Ρ‚Ρ€Π°Π³Π΅, ΡƒΠΌΠ΅Ρ‚Π°ΡšΠ° ΠΈ Π±Ρ€ΠΈΡΠ°ΡšΠ°. Π•Π²ΠΎ структурС стабла Ρƒ Јави:

public class Node {
    private int frequence;
    private char letter;
    private Node leftChild;
    private Node rightChild;
    ...
}

class BinaryTree {
    private Node root;

    public BinaryTree() {
        root = new Node();
    }
    public BinaryTree(Node root) {
        this.root = root;
    }
    ...
}

Ово нијС ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π°Π½ ΠΊΠΎΠ΄, Ρ†Π΅ΠΎ ΠΊΠΎΠ΄ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ испод.

Π•Π²ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ Π΄Ρ€Π²Π΅Ρ‚Π°:

  1. ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΎΠ±Ρ˜Π΅ΠΊΠ°Ρ‚ НодС Π·Π° сваки ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΈΠ· ΠΏΠΎΡ€ΡƒΠΊΠ΅ (Ρ€Π΅Π΄ с1). Π£ нашСм ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ Π±ΠΈΡ›Π΅ 9 Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° (НодС ΠΎΠ±Ρ˜Π΅Ρ†Ρ‚Ρ). Π‘Π²Π°ΠΊΠΈ Ρ‡Π²ΠΎΡ€ сС ΡΠ°ΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄ Π΄Π²Π° ΠΏΠΎΡ™Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°: симбола ΠΈ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π΅
  2. ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΎΠ±Ρ˜Π΅ΠΊΠ°Ρ‚ Π’Ρ€Π΅Π΅ (Π‘ΠΈΠ½Π°Ρ€ΠΈΠ’Ρ€Π΅Π΅) Π·Π° сваки Ρ‡Π²ΠΎΡ€ Π§Π²ΠΎΡ€Π°. Π§Π²ΠΎΡ€ ΠΏΠΎΡΡ‚Π°Ρ˜Π΅ ΠΊΠΎΡ€Π΅Π½ Π΄Ρ€Π²Π΅Ρ‚Π°.
  3. Π£ΠΌΠ΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΎΠ²Π° стабла Ρƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΈ Ρ€Π΅Π΄. Π¨Ρ‚ΠΎ јС Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π° Π½ΠΈΠΆΠ°, Ρ‚ΠΎ јС Π²Π΅Ρ›ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. Π’Π°ΠΊΠΎ сС ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ Π΅ΠΊΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡ˜Π΅ ΡƒΠ²Π΅ΠΊ Π±ΠΈΡ€Π° Π΄Ρ€Π²ΠΎ са најниТом Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜ΠΎΠΌ.

Π—Π°Ρ‚ΠΈΠΌ ΠΌΠΎΡ€Π°Ρ‚Π΅ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎ Π΄Π° ΡƒΡ€Π°Π΄ΠΈΡ‚Π΅ слСдСћС:

  1. ΠŸΡ€Π΅ΡƒΠ·ΠΌΠΈ Π΄Π²Π° стабла ΠΈΠ· Ρ€Π΅Π΄Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΌΡ†ΠΈΠΌΠ° Π½ΠΎΠ²ΠΎΠ³ Ρ‡Π²ΠΎΡ€Π° (Π½ΠΎΠ²ΠΎΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΈ Ρ‡Π²ΠΎΡ€ Π±Π΅Π· слова). УчСсталост Π½ΠΎΠ²ΠΎΠ³ Ρ‡Π²ΠΎΡ€Π° јСднака јС Π·Π±ΠΈΡ€Ρƒ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π° Π΄Π²Π° стабла ΠΏΠΎΡ‚ΠΎΠΌΠ°ΠΊΠ°.
  2. Π—Π° овај Ρ‡Π²ΠΎΡ€ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ стабло ΡƒΠΊΠΎΡ€Π΅ΡšΠ΅Π½ΠΎ Π½Π° ΠΎΠ²ΠΎΠΌ Ρ‡Π²ΠΎΡ€Ρƒ. Π’Ρ€Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ²ΠΎ стабло Ρƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΈ Ρ€Π΅Π΄. (ΠŸΠΎΡˆΡ‚ΠΎ Π΄Ρ€Π²ΠΎ ΠΈΠΌΠ° Π½ΠΎΠ²Ρƒ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Ρƒ, Π½Π°Ρ˜Π²Π΅Ρ€ΠΎΠ²Π°Ρ‚Π½ΠΈΡ˜Π΅ Ρ›Π΅ Π΄ΠΎΡ›ΠΈ Π½Π° Π½ΠΎΠ²ΠΎ мСсто Ρƒ Ρ€Π΅Π΄Ρƒ)
  3. НаставитС ΠΊΠΎΡ€Π°ΠΊΠ΅ 1 ΠΈ 2 Π΄ΠΎΠΊ јСдно Π΄Ρ€Π²ΠΎ Π½Π΅ останС Ρƒ Ρ€Π΅Π΄Ρƒ - Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎ Π΄Ρ€Π²ΠΎ

Π Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ овај Π°Π»Π³ΠΎΡ€ΠΈΡ‚Π°ΠΌ Π½Π° линији с1:

ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

ОвдС симбол "Π»Ρ„" (Π»ΠΈΠ½Π΅Ρ„Π΅Π΅Π΄) ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π½ΠΎΠ²ΠΈ Ρ€Π΅Π΄, "сп" (Ρ€Π°Π·ΠΌΠ°ΠΊ) јС Ρ€Π°Π·ΠΌΠ°ΠΊ.

И ΡˆΡ‚Π° ΠΎΠ½Π΄Π°?

Имамо Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎ Π΄Ρ€Π²ΠΎ. ОК. И ΡˆΡ‚Π° са Ρ‚ΠΈΠΌ? НСћС Π³Π° ΡƒΠ·Π΅Ρ‚ΠΈ бСсплатно, Π° ΠΎΠ½Π΄Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° трасиратС свС ΠΌΠΎΠ³ΡƒΡ›Π΅ ΠΏΡƒΡ‚Π΅Π²Π΅ ΠΎΠ΄ ΠΊΠΎΡ€Π΅Π½Π° Π΄ΠΎ Π»ΠΈΡˆΡ›Π° Π΄Ρ€Π²Π΅Ρ‚Π°. Π‘Π»Π°ΠΆΠ΅ΠΌΠΎ сС Π΄Π° ΠΈΠ²ΠΈΡ†Ρƒ ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌΠΎ 0 Π°ΠΊΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π»Π΅Π²ΠΎΠ³ Π΄Π΅Ρ‚Π΅Ρ‚Π° ΠΈ 1 Π°ΠΊΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ дСсног. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡ€Π΅Ρ›ΠΈ, Ρƒ ΠΎΠ²ΠΈΠΌ Π½ΠΎΡ‚Π°Ρ†ΠΈΡ˜Π°ΠΌΠ°, ΠΊΠΎΠ΄ ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° јС ΠΏΡƒΡ‚ ΠΎΠ΄ ΠΊΠΎΡ€Π΅Π½Π° Π΄Ρ€Π²Π΅Ρ‚Π° Π΄ΠΎ листа који садрТи овај исти Π·Π½Π°ΠΊ.

ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

Π’Π°ΠΊΠΎ сС испоставила Ρ‚Π°Π±Π΅Π»Π° ΠΊΠΎΠ΄ΠΎΠ²Π°. Π˜ΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌΡƒ Π΄Π° Π°ΠΊΠΎ Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΠΌΠΎ ΠΎΠ²Ρƒ Ρ‚Π°Π±Π΅Π»Ρƒ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π·Π°ΠΊΡ™ΡƒΡ‡ΠΈΡ‚ΠΈ ΠΎ "Ρ‚Π΅ΠΆΠΈΠ½ΠΈ" сваког Π·Π½Π°ΠΊΠ° - ΠΎΠ²ΠΎ јС Π΄ΡƒΠΆΠΈΠ½Π° њСговог ΠΊΠΎΠ΄Π°. Π—Π°Ρ‚ΠΈΠΌ, Ρƒ ΠΊΠΎΠΌΠΏΡ€ΠΈΠΌΠΎΠ²Π°Π½ΠΎΠΌ ΠΎΠ±Π»ΠΈΠΊΡƒ, ΠΈΠ·Π²ΠΎΡ€Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Ρ›Π΅ Ρ‚Π΅ΠΆΠΈΡ‚ΠΈ: 2 * 3 + 2 * 4 + 3 * 3 + 6 * 2 + 1 * 4 + 1 * 5 + 2 * 4 + 4 * 2 + 1 * 5 = 65 Π±ΠΈΡ‚Π° . Π£ ΠΏΠΎΡ‡Π΅Ρ‚ΠΊΡƒ јС Π±ΠΈΠΎ Ρ‚Π΅ΠΆΠ°ΠΊ 176 Π±ΠΈΡ‚Π°. Π”Π°ΠΊΠ»Π΅, смањили смо Π³Π° Π·Π° Ρ‡Π°ΠΊ 176/65 = 2.7 ΠΏΡƒΡ‚Π°! Али ΠΎΠ²ΠΎ јС ΡƒΡ‚ΠΎΠΏΠΈΡ˜Π°. Π’Π°ΠΊΠ°Π² однос јС ΠΌΠ°Π»ΠΎ Π²Π΅Ρ€ΠΎΠ²Π°Ρ‚Π½ΠΎ Π΄Π° Ρ›Π΅ сС Π΄ΠΎΠ±ΠΈΡ‚ΠΈ. Π—Π°ΡˆΡ‚ΠΎ? О Ρ‚ΠΎΠΌΠ΅ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Ρ€Π΅Ρ‡ΠΈ ΠΌΠ°Π»ΠΎ каснијС.

Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅

Па, ΠΌΠΎΠΆΠ΄Π° јС Π½Π°Ρ˜Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ˜Π΅ ΡˆΡ‚ΠΎ јС остало јС Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅. Мислим Π΄Π° су ΠΌΠ½ΠΎΠ³ΠΈ ΠΎΠ΄ вас прСтпоставили Π΄Π° јС Π½Π΅ΠΌΠΎΠ³ΡƒΡ›Π΅ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ ΠΊΠΎΠΌΠΏΡ€ΠΈΠΌΠΎΠ²Π°Π½ΠΈ Ρ„Π°Ρ˜Π» Π±Π΅Π· ΠΈΠΊΠ°ΠΊΠ²ΠΈΡ… Π½Π°Π³ΠΎΠ²Π΅ΡˆΡ‚Π°Ρ˜Π° ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ јС ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ – Π½Π΅Ρ›Π΅ΠΌΠΎ ΠΌΠΎΡ›ΠΈ Π΄Π° Π³Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°ΠΌΠΎ! Π”Π°, Π΄Π°, Π±ΠΈΠ»ΠΎ ΠΌΠΈ јС Ρ‚Π΅ΡˆΠΊΠΎ Π΄Π° ΠΎΠ²ΠΎ схватим, Π°Π»ΠΈ ΠΌΠΎΡ€Π°ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ тСкстуалну Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Ρ‚Π°Π±Π»Π΅.Ρ‚ΠΊΡ‚ са Ρ‚Π°Π±Π΅Π»ΠΎΠΌ ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π΅:

01110
 00
A010
E1111
I110
S10
T0110
U01111
Y1110

Унос Ρ‚Π°Π±Π΅Π»Π΅ Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ 'Π·Π½Π°ΠΊ'"ΠΊΠΎΠ΄ ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π°". Π—Π°ΡˆΡ‚ΠΎ јС 01110 Π±Π΅Π· симбола? Π£ ствари, Ρ‚ΠΎ јС са симболом, само јава Π°Π»Π°Ρ‚ΠΈ којС користим ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΈΠ·Π»Π°Π·Π° Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ, Π·Π½Π°ΠΊ Π½ΠΎΠ²ΠΎΠ³ Ρ€Π΅Π΄Π° - 'Π½' - сС ΠΏΡ€Π΅Ρ‚Π²Π°Ρ€Π° Ρƒ Π½ΠΎΠ²ΠΈ Ρ€Π΅Π΄ (ΠΌΠ° ΠΊΠΎΠ»ΠΈΠΊΠΎ Π³Π»ΡƒΠΏΠΎ Π·Π²ΡƒΡ‡Π°Π»ΠΎ). ΠŸΡ€Π΅ΠΌΠ° Ρ‚ΠΎΠΌΠ΅, ΠΏΡ€Π°Π·Π°Π½ Ρ€Π΅Π΄ ΠΈΠ·Π½Π°Π΄ јС Π·Π½Π°ΠΊ Π·Π° ΠΊΠΎΠ΄ 01110. Π—Π° ΠΊΠΎΠ΄ 00, Π·Π½Π°ΠΊ јС Ρ€Π°Π·ΠΌΠ°ΠΊ Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΊΡƒ Ρ€Π΅Π΄Π°. ΠœΠΎΡ€Π°ΠΌ ΠΎΠ΄ΠΌΠ°Ρ… Ρ€Π΅Ρ›ΠΈ Π΄Π° овај Π½Π°Ρ‡ΠΈΠ½ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ΡšΠ° Ρ‚Π°Π±Π΅Π»Π΅ ΠΌΠΎΠΆΠ΅ Ρ‚Π²Ρ€Π΄ΠΈΡ‚ΠΈ Π΄Π° јС Π½Π°Ρ˜ΠΈΡ€Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ˜ΠΈ Π·Π° наш ΠΊΡ…Π°Π½ ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΡ˜Π΅Π½Ρ‚. Али Ρ‚ΠΎ јС Π»Π°ΠΊΠΎ Ρ€Π°Π·ΡƒΠΌΠ΅Ρ‚ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΠΈ. Π‘ΠΈΡ›Π΅ ΠΌΠΈ Π΄Ρ€Π°Π³ΠΎ Π΄Π° Ρ‡ΡƒΡ˜Π΅ΠΌ вашС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡƒΠΊΠ΅ Ρƒ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΌΠ° ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜ΠΈ.

Π‘Π° ΠΎΠ²ΠΎΠΌ Ρ‚Π°Π±Π΅Π»ΠΎΠΌ јС Π²Ρ€Π»ΠΎ Π»Π°ΠΊΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Ρ‚ΠΈ. ΠŸΠΎΠ΄ΡΠ΅Ρ‚ΠΈΠΌΠΎ сС којим ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ смо сС Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ° ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ°:

НијСдан ΠΊΠΎΠ΄ Π½Π΅ смС Π±ΠΈΡ‚ΠΈ прСфикс Π΄Ρ€ΡƒΠ³ΠΎΠ³

ОвдС ΠΈΠ³Ρ€Π° ΠΎΠ»Π°ΠΊΡˆΠ°Π²Π°Ρ˜ΡƒΡ›Ρƒ ΡƒΠ»ΠΎΠ³Ρƒ. Π§ΠΈΡ‚Π°ΠΌΠΎ Π±ΠΈΡ‚ ΠΏΠΎ Π±ΠΈΡ‚ ΡΠ΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΎ, ΠΈ Ρ‡ΠΈΠΌ сС Ρ€Π΅Π·ΡƒΠ»Ρ‚ΡƒΡ˜ΡƒΡ›ΠΈ Π½ΠΈΠ· Π΄, који сС ΡΠ°ΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈΡ… Π±ΠΈΡ‚ΠΎΠ²Π°, ΠΏΠΎΠΊΠ»ΠΎΠΏΠΈ са ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅ΠΌ којС ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠΌ ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Ρƒ, ΠΎΠ΄ΠΌΠ°Ρ… Π·Π½Π°ΠΌΠΎ Π΄Π° јС ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° (ΠΈ само ΠΎΠ½!) Π±ΠΈΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½. Π—Π°Ρ‚ΠΈΠΌ ΡƒΠΏΠΈΡΡƒΡ˜Π΅ΠΌΠΎ ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Ρƒ Π½ΠΈΠ· Π·Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅ (стринг који садрТи Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Ρƒ ΠΏΠΎΡ€ΡƒΠΊΡƒ), Ρ€Π΅ΡΠ΅Ρ‚ΡƒΡ˜Π΅ΠΌΠΎ Π΄ стринг ΠΈ Π΄Π°Ρ™Π΅ Ρ‡ΠΈΡ‚Π°ΠΌΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ.

Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°

Π’Ρ€Π΅ΠΌΠ΅ јС Π΄Π° ΠΏΠΎΠ½ΠΈΠ·ΠΈΠΌ свој ΠΊΠΎΠ΄ писањСм Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π°. Назовимо Π³Π° ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΎΡ€.

ΠŸΠΎΡ‡Π΅Ρ‚ΠΈ ΠΈΠ·Π½ΠΎΠ²Π°. ΠŸΡ€Π΅ свСга, пишСмо класу НодС:

public class Node {
    private int frequence;//частота
    private char letter;//Π±ΡƒΠΊΠ²Π°
    private Node leftChild;//Π»Π΅Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ
    private Node rightChild;//ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ

   

    public Node(char letter, int frequence) { //собствСнно, конструктор
        this.letter = letter;
        this.frequence = frequence;
    }

    public Node() {}//ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° конструтора для бСзымянных ΡƒΠ·Π»ΠΎΠ²(см. Π²Ρ‹ΡˆΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎ построСнии Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°)
    public void addChild(Node newNode) {//Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°
        if (leftChild == null)//Ссли Π»Π΅Π²Ρ‹ΠΉ пустой=> ΠΏΡ€Π°Π²Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅=> добавляСм Π² Π»Π΅Π²Ρ‹ΠΉ
            leftChild = newNode;
        else {
            if (leftChild.getFrequence() <= newNode.getFrequence()) //Π² ΠΎΠ±Ρ‰Π΅ΠΌ, Π»Π΅Π²Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ
                rightChild = newNode;//станСт Ρ‚ΠΎΡ‚, Ρƒ ΠΊΠΎΠ³ΠΎ мСньшС частота
            else {
                rightChild = leftChild;
                leftChild = newNode;
            }
        }

        frequence += newNode.getFrequence();//итоговая частота
    }

    public Node getLeftChild() {
        return leftChild;
    }

    public Node getRightChild() {
        return rightChild;
    }

    public int getFrequence() {
        return frequence;
    }

    public char getLetter() {
        return letter;
    }

    public boolean isLeaf() {//ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° лист
        return leftChild == null && rightChild == null;
    }
}

Π‘Π°Π΄Π° Π΄Ρ€Π²ΠΎ:

class BinaryTree {
    private Node root;

    public BinaryTree() {
        root = new Node();
    }

    public BinaryTree(Node root) {
        this.root = root;
    }

    public int getFrequence() {
        return root.getFrequence();
    }

    public Node getRoot() {
        return root;
    }
}

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΈ Ρ€Π΅Π΄:

import java.util.ArrayList;//Π΄Π°-Π΄Π°, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° Π±Π°Π·Π΅ списка

class PriorityQueue {
    private ArrayList<BinaryTree> data;//список ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
    private int nElems;//ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

    public PriorityQueue() {
        data = new ArrayList<BinaryTree>();
        nElems = 0;
    }

    public void insert(BinaryTree newTree) {//вставка
        if (nElems == 0)
            data.add(newTree);
        else {
            for (int i = 0; i < nElems; i++) {
                if (data.get(i).getFrequence() > newTree.getFrequence()) {//Ссли частота вставляСмого Π΄Π΅Ρ€Π΅Π²Π° мСньшС 
                    data.add(i, newTree);//Ρ‡Π΅ΠΌ част. Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, Ρ‚ΠΎ cΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ всС Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π½Π° позициях справа Π½Π° 1 ячСйку                   
                    break;//Π·Π°Ρ‚Π΅ΠΌ ставим Π½ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ
                }
                if (i == nElems - 1) 
                    data.add(newTree);
            }
        }
        nElems++;//ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов Π½Π° 1
    }

    public BinaryTree remove() {//ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
        BinaryTree tmp = data.get(0);//ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ удаляСмый элСмСнт
        data.remove(0);//собствСнно, удаляСм
        nElems--;//ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов Π½Π° 1
        return tmp;//Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт(элСмСнт с наимСньшСй частотой)
    }
}

Класа која ΠΊΡ€Π΅ΠΈΡ€Π° Π₯Π°Ρ„ΠΌΠ°Π½ΠΎΠ²ΠΎ Π΄Ρ€Π²ΠΎ:

public class HuffmanTree {
    private final byte ENCODING_TABLE_SIZE = 127;//Π΄Π»ΠΈΠ½Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
    private String myString;//сообщСниС
    private BinaryTree huffmanTree;//Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°
    private int[] freqArray;//частотная Ρ‚Π°Π±Π»ΠΈΡ†Π°
    private String[] encodingArray;//кодировочная Ρ‚Π°Π±Π»ΠΈΡ†Π°


    //----------------constructor----------------------
    public HuffmanTree(String newString) {
        myString = newString;

        freqArray = new int[ENCODING_TABLE_SIZE];
        fillFrequenceArray();

        huffmanTree = getHuffmanTree();

        encodingArray = new String[ENCODING_TABLE_SIZE];
        fillEncodingArray(huffmanTree.getRoot(), "", "");
    }

    //--------------------frequence array------------------------
    private void fillFrequenceArray() {
        for (int i = 0; i < myString.length(); i++) {
            freqArray[(int)myString.charAt(i)]++;
        }
    }

    public int[] getFrequenceArray() {
        return freqArray;
    }

    //------------------------huffman tree creation------------------
    private BinaryTree getHuffmanTree() {
        PriorityQueue pq = new PriorityQueue();
        //Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ описан Π²Ρ‹ΡˆΠ΅
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            if (freqArray[i] != 0) {//Ссли символ сущСствуСт Π² строкС
                Node newNode = new Node((char) i, freqArray[i]);//Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ Node
                BinaryTree newTree = new BinaryTree(newNode);//Π° для Node ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ BinaryTree
                pq.insert(newTree);//Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ
            }
        }

        while (true) {
            BinaryTree tree1 = pq.remove();//ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ.

            try {
                BinaryTree tree2 = pq.remove();//ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ

                Node newNode = new Node();//ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Node
                newNode.addChild(tree1.getRoot());//ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ Π΄Π²Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²Π°
                newNode.addChild(tree2.getRoot());

                pq.insert(new BinaryTree(newNode);
            } catch (IndexOutOfBoundsException e) {//ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΎΠ΄Π½ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
                return tree1;
            }
        }
    }

    public BinaryTree getTree() {
        return huffmanTree;
    }

    //-------------------encoding array------------------
    void fillEncodingArray(Node node, String codeBefore, String direction) {//Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ
        if (node.isLeaf()) {
            encodingArray[(int)node.getLetter()] = codeBefore + direction;
        } else {
            fillEncodingArray(node.getLeftChild(), codeBefore + direction, "0");
            fillEncodingArray(node.getRightChild(), codeBefore + direction, "1");
        }
    }

    String[] getEncodingArray() {
        return encodingArray;
    }

    public void displayEncodingArray() {//для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ
        fillEncodingArray(huffmanTree.getRoot(), "", "");

        System.out.println("======================Encoding table====================");
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            if (freqArray[i] != 0) {
                System.out.print((char)i + " ");
                System.out.println(encodingArray[i]);
            }
        }
        System.out.println("========================================================");
    }
    //-----------------------------------------------------
    String getOriginalString() {
        return myString;
    }
}

Класа која садрТи који ΠΊΠΎΠ΄ΠΈΡ€Π°/Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°:

public class HuffmanOperator {
    private final byte ENCODING_TABLE_SIZE = 127;//Π΄Π»ΠΈΠ½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
    private HuffmanTree mainHuffmanTree;//Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сТатия)
    private String myString;//исходноС сообщСниС
    private int[] freqArray;//частотаная Ρ‚Π°Π±Π»ΠΈΡ†Π°
    private String[] encodingArray;//кодировочная Ρ‚Π°Π±Π»ΠΈΡ†Π°
    private double ratio;//коэффициСнт сТатия 


    public HuffmanOperator(HuffmanTree MainHuffmanTree) {//for compress
        this.mainHuffmanTree = MainHuffmanTree;

        myString = mainHuffmanTree.getOriginalString();

        encodingArray = mainHuffmanTree.getEncodingArray();

        freqArray = mainHuffmanTree.getFrequenceArray();
    }

    public HuffmanOperator() {}//for extract;

    //---------------------------------------compression-----------------------------------------------------------
    private String getCompressedString() {
        String compressed = "";
        String intermidiate = "";//промСТуточная строка(Π±Π΅Π· Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Ρ… Π½ΡƒΠ»Π΅ΠΉ)
        //System.out.println("=============================Compression=======================");
        //displayEncodingArray();
        for (int i = 0; i < myString.length(); i++) {
            intermidiate += encodingArray[myString.charAt(i)];
        }
        //ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΈΡ‚ Π² Ρ„Π°ΠΉΠ». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ сообщСния ΠΊΡ€Π°Ρ‚Π½ΠΎΠΉ 8=>
        //Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΡƒΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ†(ΠΌΠΎΠΆΠ½ΠΎ 1, Π½Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹)
        byte counter = 0;//количСство Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Π΅Ρ† Π½ΡƒΠ»Π΅ΠΉ (Π±Π°ΠΉΡ‚Π° Π² ΠΏΠΎΠ»Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚: 0<=counter<8<127)
        for (int length = intermidiate.length(), delta = 8 - length % 8; 
        		counter < delta ; counter++) {//delta - количСство Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π½ΡƒΠ»Π΅ΠΉ
            intermidiate += "0";
        }
        
        //ΡΠΊΠ»Π΅ΠΈΡ‚ΡŒ ΠΊΠΎΠ»-Π²ΠΎ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Ρ… Π½ΡƒΠ»Π΅ΠΉ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ прСдаствлСнии ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ строку 
        compressed = String.format("%8s", Integer.toBinaryString(counter & 0xff)).replace(" ", "0") + intermidiate;
        		
        //ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ коэффициСнт
        setCompressionRatio();
        //System.out.println("===============================================================");
        return compressed;
    }
    
    private void setCompressionRatio() {//ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ коэффициСнт 
        double sumA = 0, sumB = 0;//A-the original sum
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            if (freqArray[i] != 0) {
                sumA += 8 * freqArray[i];
                sumB += encodingArray[i].length() * freqArray[i];
            }
        }
        ratio = sumA / sumB;
    }

    public byte[] getBytedMsg() {//final compression
        StringBuilder compressedString = new StringBuilder(getCompressedString());
        byte[] compressedBytes = new byte[compressedString.length() / 8];
        for (int i = 0; i < compressedBytes.length; i++) {
                compressedBytes[i] = (byte) Integer.parseInt(compressedString.substring(i * 8, (i + 1) * 8), 2);
        }
        return compressedBytes;
    }
    //---------------------------------------end of compression----------------------------------------------------------------
    //------------------------------------------------------------extract-----------------------------------------------------
    public String extract(String compressed, String[] newEncodingArray) {
        String decompressed = "";
        String current = "";
        String delta = "";
        encodingArray = newEncodingArray;
        
        //displayEncodingArray();
        //ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ»-Π²ΠΎ вставлСнных Π½ΡƒΠ»Π΅ΠΉ
        for (int i = 0; i < 8; i++) 
        	delta += compressed.charAt(i);
        int ADDED_ZEROES = Integer.parseInt(delta, 2);
       
        for (int i = 8, l = compressed.length() - ADDED_ZEROES; i < l; i++) {
            //i = 8, Ρ‚.ΠΊ. ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ Ρƒ нас ΠΈΠ΄Π΅Ρ‚ ΠΊΠΎΠ»-Π²ΠΎ вставлСнных Π½ΡƒΠ»Π΅ΠΉ
            current += compressed.charAt(i);
            for (int j = 0; j < ENCODING_TABLE_SIZE; j++) {
                if (current.equals(encodingArray[j])) {//Ссли совпало
                    decompressed += (char)j;//Ρ‚ΠΎ добавляСм элСмСнт
                    current = "";//ΠΈ обнуляСм Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку
                }
            }
        }

        return decompressed;
    }

    public String getEncodingTable() {
        String enc = "";
    	for (int i = 0; i < encodingArray.length; i++) {
        	if (freqArray[i] != 0) 
        		enc += (char)i + encodingArray[i] + 'n';
        }
    	return enc;
    }

    public double getCompressionRatio() {
        return ratio;
    }


    public void displayEncodingArray() {//для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ
        System.out.println("======================Encoding table====================");
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            //if (freqArray[i] != 0) {
                System.out.print((char)i + " ");
                System.out.println(encodingArray[i]);
            //}
        }
        System.out.println("========================================================");
    }
    }

Класа која олакшава писањС Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ:

import java.io.File;
import java.io.PrintWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Closeable;

public class FileOutputHelper implements Closeable {
    private File outputFile;
    private FileOutputStream fileOutputStream;

    public FileOutputHelper(File file) throws FileNotFoundException {
        outputFile = file;
        fileOutputStream = new FileOutputStream(outputFile);
    }

    public void writeByte(byte msg) throws IOException {
        fileOutputStream.write(msg);
    }

    public void writeBytes(byte[] msg) throws IOException {
        fileOutputStream.write(msg);
    }

    public void writeString(String msg) {
    	try (PrintWriter pw = new PrintWriter(outputFile)) {
    		pw.write(msg);
    	} catch (FileNotFoundException e) {
    		System.out.println("НСвСрный ΠΏΡƒΡ‚ΡŒ, ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ сущСствуСт!");
    	}
    }

    @Override
    public void close() throws IOException {
        fileOutputStream.close();
    }

    public void finalize() throws IOException {
        close();
    }
}

Класа која олакшава Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΈΠ· Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅:

import java.io.FileInputStream;
import java.io.EOFException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;

public class FileInputHelper implements Closeable {
	private FileInputStream fileInputStream;
	private BufferedReader fileBufferedReader;
	
	public FileInputHelper(File file) throws IOException {
		fileInputStream = new FileInputStream(file);
		fileBufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
	}
	
	
    public byte readByte() throws IOException {
    	int cur = fileInputStream.read();
    	if (cur == -1)//Ссли закончился Ρ„Π°ΠΉΠ»
    		throw new EOFException();
    	return (byte)cur;
    }
    
    public String readLine() throws IOException {
    	return fileBufferedReader.readLine();
    }
    
    @Override
    public void close() throws IOException{
    	fileInputStream.close();
    }
}

Па, и главна класа:

import java.io.File;
import java.nio.charset.MalformedInputException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Paths;
import java.util.List;
import java.io.EOFException;
public class Main {
	private static final byte ENCODING_TABLE_SIZE = 127;
	
    public static void main(String[] args) throws IOException {
        try {//ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки
            if (args[0].equals("--compress") || args[0].equals("-c"))
                compress(args[1]);
            else if ((args[0].equals("--extract") || args[0].equals("-x"))
            		&& (args[2].equals("--table") || args[2].equals("-t"))) {
            	extract(args[1], args[3]);
            }
            else
                throw new IllegalArgumentException();
        } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException e) {
            System.out.println("НСвСрный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Π²ΠΎΠ΄Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ");
            System.out.println("Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Readme.txt");
            e.printStackTrace();
        }
    }

	public static void compress(String stringPath) throws IOException {
        List<String> stringList;
        File inputFile = new File(stringPath);
        String s = "";
        File compressedFile, table;
        
        try {
            stringList = Files.readAllLines(Paths.get(inputFile.getAbsolutePath()));
        } catch (NoSuchFileException e) {
            System.out.println("НСвСрный ΠΏΡƒΡ‚ΡŒ, ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ сущСствуСт!");
            return;
        } catch (MalformedInputException e) {
        	System.out.println("ВСкущая ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π° Π½Π΅ поддСрТиваСтся");
        	return;
        }

        for (String item : stringList) {
            s += item;
            s += 'n';
        }

        HuffmanOperator operator = new HuffmanOperator(new HuffmanTree(s));

        compressedFile = new File(inputFile.getAbsolutePath() + ".cpr");
        compressedFile.createNewFile();
        try (FileOutputHelper fo = new FileOutputHelper(compressedFile)) {
        	fo.writeBytes(operator.getBytedMsg());
        }
        //create file with encoding table:
        
        table = new File(inputFile.getAbsolutePath() + ".table.txt");
        table.createNewFile();
        try (FileOutputHelper fo = new FileOutputHelper(table)) {
        	fo.writeString(operator.getEncodingTable());
        }
        
        System.out.println("ΠŸΡƒΡ‚ΡŒ ΠΊ сТатому Ρ„Π°ΠΉΠ»Ρƒ: " + compressedFile.getAbsolutePath());
        System.out.println("ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ " + table.getAbsolutePath());
        System.out.println("Π‘Π΅Π· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ!");
        
        double idealRatio = Math.round(operator.getCompressionRatio() * 100) / (double) 100;//ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ коэффициСнт
        double realRatio = Math.round((double) inputFile.length() 
        		/ ((double) compressedFile.length() + (double) table.length()) * 100) / (double)100;//настоящий коэффициСнт
        
        System.out.println("Π˜Π΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ коэффициСнт сТатия Ρ€Π°Π²Π΅Π½ " + idealRatio);
        System.out.println("ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ сТатия с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ " + realRatio);
    }

    public static void extract(String filePath, String tablePath) throws FileNotFoundException, IOException {
        HuffmanOperator operator = new HuffmanOperator();
        File compressedFile = new File(filePath),
        	 tableFile = new File(tablePath),
        	 extractedFile = new File(filePath + ".xtr");
        String compressed = "";
        String[] encodingArray = new String[ENCODING_TABLE_SIZE];
        //read compressed file
        //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!check here:
        try (FileInputHelper fi = new FileInputHelper(compressedFile)) {
        	byte b;
        	while (true) {
        		b = fi.readByte();//method returns EOFException
        		compressed += String.format("%8s", Integer.toBinaryString(b & 0xff)).replace(" ", "0");
        	}
        } catch (EOFException e) {
        	
        }
        
        //--------------------
        
        //read encoding table:
        try (FileInputHelper fi = new FileInputHelper(tableFile)) {
        	fi.readLine();//skip first empty string
        	encodingArray[(byte)'n'] = fi.readLine();//read code for 'n'
        	while (true) {
        		String s = fi.readLine();
        		if (s == null)
        			throw new EOFException();
        		encodingArray[(byte)s.charAt(0)] = s.substring(1, s.length());        		
        	}
        } catch (EOFException ignore) {}
        
        extractedFile.createNewFile();
        //extract:
		try (FileOutputHelper fo = new FileOutputHelper(extractedFile)) {
			fo.writeString(operator.extract(compressed, encodingArray));
		}
		
		System.out.println("ΠŸΡƒΡ‚ΡŒ ΠΊ распакованному Ρ„Π°ΠΉΠ»Ρƒ " + extractedFile.getAbsolutePath());
    }
}

ΠœΠΎΡ€Π°Ρ›Π΅Ρ‚Π΅ сами Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ са упутствима Ρ€Π΅Π°Π΄ΠΌΠ΅.Ρ‚ΠΊΡ‚ πŸ™‚

Π—Π°ΠΊΡ™ΡƒΡ‡Π°ΠΊ

Π’Π°Ρ™Π΄Π° јС Ρ‚ΠΎ свС ΡˆΡ‚ΠΎ сам Ρ…Ρ‚Π΅ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ. Ако ΠΈΠΌΠ°Ρ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΎ мојој нСспособности ΠΏΠΎΠ±ΠΎΡ™ΡˆΠ°ΡšΠ° ΠΊΠΎΠ΄Π°, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΡƒΠΎΠΏΡˆΡ‚Π΅, Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅, ΠΎΠ½Π΄Π° слободно ΠΏΠΈΡˆΠΈΡ‚Π΅. Ако Π½Π΅ΡˆΡ‚ΠΎ нисам објаснио, ΠΌΠΎΠ»ΠΈΠΌ вас ΠΈ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅. Π’ΠΎΠ»Π΅ΠΎ Π±ΠΈΡ… Π΄Π° Ρ‡ΡƒΡ˜Π΅ΠΌ ΠΎΠ΄ вас Ρƒ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΌΠ°!

ПБ

Π”Π°, Π΄Π°, још сам Ρ‚Ρƒ, Ρ˜Π΅Ρ€ нисам Π·Π°Π±ΠΎΡ€Π°Π²ΠΈΠΎ Π½Π° ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΡ˜Π΅Π½Ρ‚. Π—Π° стринг с1, Ρ‚Π°Π±Π΅Π»Π° ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ° Ρ‚Π΅ΠΆΠΈ 48 Π±Π°Ρ˜Ρ‚ΠΎΠ²Π° - ΠΌΠ½ΠΎΠ³ΠΎ вишС ΠΎΠ΄ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, Π° нису Π·Π°Π±ΠΎΡ€Π°Π²ΠΈΠ»ΠΈ Π½Π° Π΄ΠΎΠ΄Π°Ρ‚Π½Π΅ Π½ΡƒΠ»Π΅ (Π±Ρ€ΠΎΡ˜ Π΄ΠΎΠ΄Π°Ρ‚ΠΈΡ… Π½ΡƒΠ»Π° јС 7) => однос ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π΅ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ мањи ΠΎΠ΄ јСдан: 176 /(65 + 48*8 + 7) = 0.38. Ако стС ΠΈ Π²ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ ΠΎΠ²ΠΎ, ΠΎΠ½Π΄Π° само Π½Π΅ Ρƒ Π»ΠΈΡ†Π΅ Π΄ΠΎΠ±Ρ€ΠΎ стС ΡƒΡ€Π°Ρ’Π΅Π½ΠΈ. Π”Π°, ΠΎΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΈΠ·ΡƒΠ·Π΅Ρ‚Π½ΠΎ нССфикасна Π·Π° ΠΌΠ°Π»Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅. Али ΡˆΡ‚Π° сС дСшава са Π²Π΅Π»ΠΈΠΊΠΈΠΌ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°ΠΌΠ°? Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° су ΠΌΠ½ΠΎΠ³ΠΎ Π²Π΅Ρ›Π΅ ΠΎΠ΄ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ Ρ‚Π°Π±Π΅Π»Π΅ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ°. ОвдС Π°Π»Π³ΠΎΡ€ΠΈΡ‚Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΠ΅ ΠΊΠ°ΠΊΠΎ Ρ‚Ρ€Π΅Π±Π°! На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Ѐаустов ΠΌΠΎΠ½ΠΎΠ»ΠΎΠ³ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ€ дајС Ρ€Π΅Π°Π»Π°Π½ (Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½) ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΡ˜Π΅Π½Ρ‚ јСднак 1.46 - скоро јСдан ΠΈ ΠΏΠΎ ΠΏΡƒΡ‚Π°! И Π΄Π°, Ρ„Π°Ρ˜Π» јС Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡƒΠ΄Π΅ Π½Π° СнглСском.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€