Π£Π»Π°Π·Π°ΠΊ
Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠΈ ΠΎ ΠΏΠΎΠ·Π½Π°ΡΠΎΠΌ Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΊΠ°ΠΎ ΠΈΠΎ ΡΠ΅Π³ΠΎΠ²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ Ρ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ³Π°, Π½Π°ΠΏΠΈΡΠ°ΡΠ΅ΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½ Π°ΡΡ
ΠΈΠ²Π΅Ρ. ΠΠ²ΠΎ ΡΠ΅ Π²Π΅Ρ Π±ΠΈΠ»ΠΎ
ΠΠ°Π»ΠΎ ΡΠ°Π·ΠΌΠΈΡΡΠ°ΡΠ°
Π£ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎΡ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ, ΡΠ΅Π΄Π°Π½ Π·Π½Π°ΠΊ ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ ΡΠ° 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). Π£ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΡ Π±ΠΈΡΠ΅ 9 ΡΠ²ΠΎΡΠΎΠ²Π° (ΠΠΎΠ΄Π΅ ΠΎΠ±ΡΠ΅ΡΡΡ). Π‘Π²Π°ΠΊΠΈ ΡΠ²ΠΎΡ ΡΠ΅ ΡΠ°ΡΡΠΎΡΠΈ ΠΎΠ΄ Π΄Π²Π° ΠΏΠΎΡΠ° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°: ΡΠΈΠΌΠ±ΠΎΠ»Π° ΠΈ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ΅
- ΠΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΠ°Ρ Π’ΡΠ΅Π΅ (ΠΠΈΠ½Π°ΡΠΈΠ’ΡΠ΅Π΅) Π·Π° ΡΠ²Π°ΠΊΠΈ ΡΠ²ΠΎΡ Π§Π²ΠΎΡΠ°. Π§Π²ΠΎΡ ΠΏΠΎΡΡΠ°ΡΠ΅ ΠΊΠΎΡΠ΅Π½ Π΄ΡΠ²Π΅ΡΠ°.
- Π£ΠΌΠ΅ΡΠ½ΠΈΡΠ΅ ΠΎΠ²Π° ΡΡΠ°Π±Π»Π° Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΠ΅Π΄. Π¨ΡΠΎ ΡΠ΅ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ° Π½ΠΈΠΆΠ°, ΡΠΎ ΡΠ΅ Π²Π΅ΡΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ. Π’Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ Π΅ΠΊΡΡΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ²Π΅ΠΊ Π±ΠΈΡΠ° Π΄ΡΠ²ΠΎ ΡΠ° Π½Π°ΡΠ½ΠΈΠΆΠΎΠΌ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠΎΠΌ.
ΠΠ°ΡΠΈΠΌ ΠΌΠΎΡΠ°ΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΎ Π΄Π° ΡΡΠ°Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠ΅:
- ΠΡΠ΅ΡΠ·ΠΌΠΈ Π΄Π²Π° ΡΡΠ°Π±Π»Π° ΠΈΠ· ΡΠ΅Π΄Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΈΡ ΠΏΠΎΡΠΎΠΌΡΠΈΠΌΠ° Π½ΠΎΠ²ΠΎΠ³ ΡΠ²ΠΎΡΠ° (Π½ΠΎΠ²ΠΎΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈ ΡΠ²ΠΎΡ Π±Π΅Π· ΡΠ»ΠΎΠ²Π°). Π£ΡΠ΅ΡΡΠ°Π»ΠΎΡΡ Π½ΠΎΠ²ΠΎΠ³ ΡΠ²ΠΎΡΠ° ΡΠ΅Π΄Π½Π°ΠΊΠ° ΡΠ΅ Π·Π±ΠΈΡΡ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ° Π΄Π²Π° ΡΡΠ°Π±Π»Π° ΠΏΠΎΡΠΎΠΌΠ°ΠΊΠ°.
- ΠΠ° ΠΎΠ²Π°Ρ ΡΠ²ΠΎΡ ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΡΡΠ°Π±Π»ΠΎ ΡΠΊΠΎΡΠ΅ΡΠ΅Π½ΠΎ Π½Π° ΠΎΠ²ΠΎΠΌ ΡΠ²ΠΎΡΡ. ΠΡΠ°ΡΠΈΡΠ΅ ΠΎΠ²ΠΎ ΡΡΠ°Π±Π»ΠΎ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΠ΅Π΄. (ΠΠΎΡΡΠΎ Π΄ΡΠ²ΠΎ ΠΈΠΌΠ° Π½ΠΎΠ²Ρ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΡ, Π½Π°ΡΠ²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΡΠΈ Π½Π° Π½ΠΎΠ²ΠΎ ΠΌΠ΅ΡΡΠΎ Ρ ΡΠ΅Π΄Ρ)
- ΠΠ°ΡΡΠ°Π²ΠΈΡΠ΅ ΠΊΠΎΡΠ°ΠΊΠ΅ 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. ΠΠΊΠΎ ΡΡΠ΅ ΠΈ Π²ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈΠ»ΠΈ ΠΎΠ²ΠΎ, ΠΎΠ½Π΄Π° ΡΠ°ΠΌΠΎ Π½Π΅ Ρ Π»ΠΈΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΡΡΠ΅ ΡΡΠ°ΡΠ΅Π½ΠΈ. ΠΠ°, ΠΎΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π±ΠΈΡΠΈ ΠΈΠ·ΡΠ·Π΅ΡΠ½ΠΎ Π½Π΅Π΅ΡΠΈΠΊΠ°ΡΠ½Π° Π·Π° ΠΌΠ°Π»Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅. ΠΠ»ΠΈ ΡΡΠ° ΡΠ΅ Π΄Π΅ΡΠ°Π²Π° ΡΠ° Π²Π΅Π»ΠΈΠΊΠΈΠΌ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΠΌΠ°? ΠΠ΅Π»ΠΈΡΠΈΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π΅ΡΠ΅ ΠΎΠ΄ Π²Π΅Π»ΠΈΡΠΈΠ½Π΅ ΡΠ°Π±Π΅Π»Π΅ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ°. ΠΠ²Π΄Π΅ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠ΅Π±Π°! ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ