Skip to content

knurii/algorithm-team

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

5 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํ—ˆํ”„๋งŒ ์••์ถ• [ํŒ€ ๊ณผ์ œ]

1. text ์ „์ฒ˜๋ฆฌ

- ํ—ˆํ”„๋งŒ ๋ถ€ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋„ฃ๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์ฒ˜๋ฆฌ ํ•˜์˜€๋‹ค.

- ์••์ถ• ํšจ์œจ์„ ๋†’์ด๊ณ  ์„ฑ๋Šฅ๋ถ„์„์„ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ

- ๋ฌธ์žฅ๋ถ€ํ˜ธ, ๊ณต๋ฐฑ, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์„ ์ œ๊ฑฐ

1) ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋„ฃ๊ธฐ ์œ„ํ•œ txt ์„ ์ •

- ์˜๋ฌธ์œผ๋กœ ๋œ ๋ฌธ์„œ๊ฐ€ ํŽธ๋ฆฌํ•  ๊ฒƒ ๊ฐ™์•„ alice_in_wonderland.txt ํŒŒ์ผ๋กœ ์„ ์ •ํ•˜์˜€๋‹ค.

- github์—์„œ ๋‹ค์šด๋กœ๋“œ

2) ํŒŒ์ผ ์ฝ๊ณ  ํ…์ŠคํŠธ๋ฅผ ์ „์ฒ˜๋ฆฌ ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ

- ์ž‘์„ฑ ์–ธ์–ด๋Š” python

- ํŒŒ์ผ ์˜คํ”ˆ -> clean_text -> ์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์˜คํ”ˆ ํ›„ ์ „์ฒ˜๋ฆฌ ๋œ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ์— ์ž‘์„ฑ -> ํŒŒ์ผ ๋‹ซ๊ธฐ

๐Ÿ’ป ์ž‘์„ฑ ์ฝ”๋“œ

import os
from re import findall, sub

print('\nํ˜„์žฌ ๊ฒฝ๋กœ :', os.getcwd())

#ํŒŒ์ผ ์˜คํ”ˆ-str ํ˜•ํƒœ๋กœ ๋ฐ›์•„์ค€๋‹ค
with open("/Users/kimnuri/PycharmProjects/ComputerAlgorithm/huffman/data/alice_in_wonderland.txt") as f:
    content = " ".join([l.rstrip() for l in f])

#์ „์ฒ˜๋ฆฌ ์œ„ํ•œ ํ•จ์ˆ˜ ์ˆ˜ํ–‰
def clean_text(content):
    texts_re = content.lower() #์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
    texts_re2 = sub('[0-9]', '', texts_re) #์ˆซ์ž ์ œ๊ฑฐ
    texts_re3 = sub('[\'`,.?!;:"\-\[\]]', '', texts_re2) #๋ฌธ์žฅ๋ถ€ํ˜ธ ์ œ๊ฑฐ
    texts_re4 = sub('[@#$%^&*()]', '', texts_re3) #ํŠน์ˆ˜๋ฌธ์ž ์ œ๊ฑฐ
    texts_re5 = sub('[๊ฐ€-ํžฃ]','',texts_re4) #ํ•œ๊ธ€ ์ œ๊ฑฐ
    texts_re6 = texts_re5.replace(' ','') #white space ์ œ๊ฑฐ
    return texts_re6

print(clean_text(content))

#์œ„์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ์— ๋‹ค์‹œ ์จ์ค€๋‹ค
texts2 = open('/Users/kimnuri/PycharmProjects/ComputerAlgorithm/huffman/data/alice_in_wonderland.txt',mode='w',encoding='UTF8')
texts2.write(clean_text(content))
texts2.close()

๐Ÿ’ป ๊ฒฐ๊ณผ ํ™”๋ฉด

๊ฒฐ๊ณผ1

์ฃผ์˜ํ•  ์ 

- ํŒŒ์ผ ์“ฐ๊ธฐ๋ชจ๋“œ๋กœ ์˜คํ”ˆ ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์„ str ๊ตฌ์กฐ๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ ํ–ˆ๋‹ค.

- ๋ฌธ์žฅ ๋ถ€ํ˜ธ ์ œ๊ฑฐ์—์„œ ํŒŒ์ด์ฌ ์–ธ์–ด๋กœ ์ธ์‹ ๋˜๋Š” ๋ถ€๋ถ„๋“ค์„ ์‹ ๊ฒฝ์จ์•ผ ํ–ˆ๋‹ค.

3) ์„ฑ๋Šฅ ๋ถ„์„์„ ์œ„ํ•œ ์•ŒํŒŒ๋ฒณ ๋นˆ๋„์ˆ˜์™€ ํ…์ŠคํŠธ ๊ธธ์ด ๊ณ„์‚ฐ

- ์ด๋ก ์ ์œผ๋กœ ์ด์ง„์ฝ”๋“œ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์•ŒํŒŒ๋ฒณ ๋นˆ๋„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์˜€๋‹ค.

- ์••์ถ•๋ฅ ์„ ์ด๋ก ์ ์œผ๋กœ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด text์˜ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•˜์˜€๋‹ค.

๐Ÿ’ป ์ž‘์„ฑ ์ฝ”๋“œ

import os
from re import findall, sub

#ํŒŒ์ผ ์˜คํ”ˆ-str๊ตฌ์กฐ๋กœ ๋ฐ›์•„์˜จ๋‹ค
with open("/Users/kimnuri/PycharmProjects/ComputerAlgorithm/huffman/data/alice_in_wonderland.txt") as f:
    content = " ".join([l.rstrip() for l in f])

Alphabet = 'abcdefghijklmnopqrstuvwxyz' #for๋ฌธ์—์„œ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•จ๊ณผ ๋นˆ๋„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋ฆฌ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด์ค€๋‹ค

texts_freq = [0] * 26

#์•ŒํŒŒ๋ฒณ ๋นˆ๋„์ˆ˜ ๊ณ„์‚ฐ
for al in content:
    if al in Alphabet:
        idx = Alphabet.find(al)
        texts_freq[idx] += 1

#์•ŒํŒŒ๋ฒณ ๋นˆ๋„์ˆ˜ ์ถœ๋ ฅ
print("์•ŒํŒŒ๋ฒณ ๋นˆ๋„์ˆ˜")
for i in range(0,26):
    print(Alphabet[i], ":", texts_freq[i])

#ํ…์ŠคํŠธ ๊ธธ์ด
print('texts ๊ธธ์ด =',len(content))

๐Ÿ’ป ๊ฒฐ๊ณผ ํ™”๋ฉด

๊ฒฐ๊ณผ2

4)์••์ถ•์˜ ํ•„์š”์„ฑ

๋จผ์ € ์••์ถ•์ด๋ž€ ์ž‘์—…์ด ์™œ ํ•„์š”ํ• ๊นŒ?

  1. ๋ฐ์ดํ„ฐ์–‘์ด ๋งŽ์€ ํŒŒ์ผ์„ ์••์ถ•ํ•˜์—ฌ ์ €์žฅ์žฅ์น˜์— ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ.
  2. ๋ฐ์ดํ„ฐ์–‘์ด ๋งŽ์€ ํŒŒ์ผ์„ ์••์ถ•ํ•˜์—ฌ ํ†ต์‹  ๋„คํŠธ์›Œํฌ๋กœ ์ „๋‹ฌ.
  3. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ„ํŽธํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ.

์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ์–‘์ด ๋งŽ์œผ๋ฉด , ๋ฐ์ดํ„ฐ ์ „์†ก , ์ €์žฅ ๋“ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ๋ถ€๋‹ด์ด ๊ฐ€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์••์ถ•์ด๋ผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•œ๊ฒƒ์ด๋‹ค.

2. ํŒ€ ์‹ค์Šต


๋‚˜๋Š” JAVA๋ฅผ ํ†ตํ•ด ํ—ˆํ”„๋งŒ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์—ญํ• ์„ ๋งก์•˜๋‹ค. ํ˜ผ์žํ•˜๋Š”๋ฐ ๋ฒ„๊ฑฐ์›€์ด ์žˆ์–ด, ํŒ€์›๋“ค์˜ ๋„์›€์„ ๋ฐ›๊ธฐ๋„ ํ–ˆ๊ณ , ์—ฌ๋Ÿฌ ๊นƒํ—ˆ๋ธŒ , ์œ ํŠœ๋ธŒ , ๊ตฌ๊ธ€์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ตฌํ˜„ํ•ด๋†“์€ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

์šฐ๋ฆฌ ํŒ€์ด ์••์ถ•ํ•ด ๋ณผ ํ…์ŠคํŠธ ํŒŒ์ผ์€ '์ด์ƒํ•œ ๋‚˜๋ผ์˜ ์—˜๋ฆฌ์Šค' ์˜๋ฌธํŒ์ด๋‹ค.

alice

ํ•˜์ง€๋งŒ ๊ณต๋ฐฑ๊ณผ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ๋งŽ์•„ , ์ด๋Œ€๋กœ๋Š” ์••์ถ•ํšจ์œจ์„ ๋‚ด๊ธฐ ํž˜๋“ค ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.

๊ทธ๋ž˜์„œ ๋จผ์ € ๋‹ค๋ฅธ ํŒ€์›์ด ํŠน์ˆ˜๋ฌธ์ž์™€ ๊ณต๋ฐฑ์„ ์ง€์›Œ์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ์›๋ฌธ์˜ ๊ณต๋ฐฑ๊ณผ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ–ˆ๋‹ค.

alice2

๋จผ์ € ์ฃผ์–ด์ง„ ํ…์ŠคํŠธ์—์„œ ๊ฐ ์˜๋ฌธ์ž์˜ ์ถœํ˜„ ๋นˆ๋„์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

public static void numberoftexts(String src) {
        // ์˜๋ฌธ์ž ๋นˆ๋„ ์ˆ˜ ์กฐ์‚ฌ
        try {
            // ํŒŒ์ผ ๊ฐ์ฒด ์ƒ์„ฑ
            File file = new File(src);
            // file์— ๋Œ€ํ•œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
            FileReader filereader = new FileReader(file);
            // ์ž…๋ ฅ ๋ฒ„ํผ ์ƒ์„ฑ
            BufferedReader bufReader = new BufferedReader(filereader);
            String line;
            // ํŒŒ์ผ ํ•œ์ค„์”ฉ ์ฝ๊ธฐ
            while ((line = bufReader.readLine()) != null) {
                // ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž ํ•˜๋‚˜ํ•˜๋‚˜ ํ™•์ธ
                for (int i = 0; i < line.length(); i++) {
                    char temp = line.charAt(i);
                    // ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ด๋ฏธ 1๋ฒˆ ์ด์ƒ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌธ์ž์— ํ•ด๋‹นํ•˜๋Š” ๋นˆ๋„ ์ˆ˜ 1์ฆ๊ฐ€
                    if (txt.containsKey(temp)) {
                        txt.put(temp, txt.get(temp) + 1);
                    } else {
                        txt.put(temp, 1);
                    }
                }
            }
            // ์ฝ๊ธฐ ์ข…๋ฃŒ
            bufReader.close(); 

๊ฐ€์žฅ ์ž‘์€ ๋นˆ๋„์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ 2๊ฐœ๋ฅผ ํ•ฉ์ณ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.

 while(true) {
            // ์ตœ์†Œ๊ฐ’ 2๊ฐœ ์ถ”์ถœ
            Node leftChild = mini.MinNode();
            Node rightChild = mini.MinNode();
            // ์™ผ์ชฝ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋ฅผ ๋”ํ•œ ๊ฐ’์„ ๋„ฃ์„ ๋ถ€๋ชจ ๋…ธ๋“œ ์ƒ์„ฑ
            plusparent = new Node(leftChild.txt+rightChild.txt,'.');
            plusparent.leftNode=leftChild;
            plusparent.rightNode=rightChild;
            // ํž™์ด ๋น„์–ด์žˆ๋‹ค๋ฉด return 
            if(mini.isEmpty()) return;
            // ์ƒˆ๋กœ์šด ๋ถ€๋ชจ ๋…ธ๋“œ ์ตœ์†Œํž™์— ์‚ฝ์ž…
            mini.insert(plusparent);
        }

์ด ์ž‘์—…์„ ๋…ธ๋“œ๊ฐ€ 1๊ฐœ ๋‚จ์„๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์™„์„ฑํ•œ ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ๊ฐ„์„ ์—๋Š” 0, ์˜ค๋ฅธ์ชฝ ๊ฐ„์„ ์—๋Š” 1

 public static void HuffmanCode(Node root, int[] code, int idx) {
        // ์™ผ์ชฝ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ—ˆํ”„๋งŒ ์ฝ”๋“œ๋Š” 0
        if(root.leftNode != null) {
            code[idx]=0;
            // ๋‹ค์Œ ๋…ธ๋“œ์˜ ํ—ˆํ”„๋งŒ ์ฝ”๋“œ
            HuffmanCode(root.leftNode, code, idx+1);
        }
        // ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ—ˆํ”„๋งŒ ์ฝ”๋“œ๋Š” 1
        if(root.rightNode !=null) {
            code[idx]=1;
            HuffmanCode(root.rightNode, code, idx+1);
        }

์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ ํ•˜์—ฌ ์˜๋ฌธ์ž๋“ค์˜ ๋นˆ๋„์ˆ˜ ๊ทธ์— ๋งž๊ฒŒ ํ• ๋‹น๋œ ์ด์ง„์ฝ”๋“œ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋นˆ๋„์ˆ˜๋ฅผ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ. Freq

์ด๊ฒƒ์— ์ด์ง„์ฝ”๋“œ๋ฅผ ํ• ๋‹น.

binary

ํ—ˆํ”„๋งŒ ์ฝ”๋“œ๋Š” ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋ฌธ์ž์— ๊ฐ€์žฅ ์งง์€ ์ฝ”๋“œ๋ฅผ ํ• ๋‹นํ•˜๊ณ  , ๋นˆ๋„์ˆ˜๊ฐ€ ๋‚ฎ์€ ๋ฌธ์ž์—๋Š” ๊ธด ์ฝ”๋“œ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์••์ถ•์˜ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค

์‹ค์ œ๋กœ ๋นˆ๋„์ˆ˜๊ฐ€ 78๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ 'z'๋Š” 11์ž๋ฆฌ์˜ ๊ฐ€์žฅ ๊ธด ์ฝ”๋“œ๋ฅผ ํ• ๋‹น ๋ฐ›์•˜๊ณ  z

๋นˆ๋„์ˆ˜๊ฐ€ 13579๋กœ ๊ฐ€์žฅ ๋†’์€ 'e'๋Š” 3์ž๋ฆฌ์˜ ๊ฐ€์žฅ ์งง์€ ์ฝ”๋“œ๋ฅผ ํ• ๋‹น ๋ฐ›์•˜๋‹ค. e

3. ํ—ˆํ”„๋งŒ ์ฝ”๋“œ ์••์ถ•๋ฅ 

ํ—ˆํ”„๋งŒ ์••์ถ•์˜ ํšจ์œจ์„ฑ์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ํ—ˆํ”„๋งŒ ์••์ถ•์˜ ์••์ถ•๋ฅ ์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.
ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์••์ถ•ํ•˜๊ณ  , ์••์ถ•๋ฅ ์„ ๊ตฌํ•˜๋Š”๋ฐ https://github.com/moomyung1013/Huffman-Coding ์ฐธ์กฐํ–ˆ๋‹ค.

๋จผ์ € ์šฐ๋ฆฌ ํŒ€์ด ์••์ถ•ํ•˜๊ธฐ๋กœ ํ•œ '์ด์ƒํ•œ ๋‚˜๋ผ์˜ ์—˜๋ฆฌ์Šค' ์˜๋ฌธ ๋ฒ„์ „์ด๋‹ค.

์••์ถ•๋ฅ  ๋น„๊ต

107,748byte -> 65,777byte ๋กœ ํŒŒ์ผํฌ๊ธฐ๊ฐ€ ์ค„์—ˆ๋‹ค. ๋Œ€๋žต 40% ์••์ถ•์ด ๋œ ์…ˆ์ด๋‹ค.

๊ณผ์—ฐ ์–ด๋А์ •๋„ ํฌ๊ธฐ์˜ ํŒŒ์ผ์„ ์••์ถ•ํ• ๋•Œ , ๊ฐ€์žฅ ์••์ถ•๋ฅ ์ด ํด์ง€ ๊ถ๊ธˆํ•˜์—ฌ , ์ž„์˜๋กœ ๊ฐ€์ ธ์˜จ 1KB , 5KB , 25KB , 50KB ํ…์ŠคํŠธ ํŒŒ์ผ๋“ค์„ ํ•จ๊ป˜ ๋น„๊ตํ•ด๋ณด์•˜๋‹ค.

๋น„๊ต

12,896byte -> 9,097byte (์•ฝ 30% ์••์ถ•)
54,069byte -> 35,510byte (์•ฝ 35% ์••์ถ•)
241.851byte -> 159,409byte (์•ฝ 35% ์••์ถ•)
544,469byte -> 361,690byte (์•ฝ 34% ์••์ถ•)

๋Œ€๋žต 30% ~ 40%์˜ ์••์ถ•๋ฅ ์„ ๋ณด์ด๊ณ  ์žˆ๋‹ค.

์••์ถ•๋ฅ  ๊ทธ๋ž˜ํ”„

๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด ์‰ฝ๊ฒŒ ๋ณด๋ฉด ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๊ฐ€ ์ฒ˜์Œ์— ์••์ถ•ํ–ˆ๋˜ 15KB์˜ '์ด์ƒํ•œ ๋‚˜๋ผ์˜ ์—˜๋ฆฌ์Šค' ๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์••์ถ•๋ฅ ์„ ๋ณด์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ™์€ ํฌ๊ธฐ์˜ ํŒŒ์ผ์ด๋ผ๋„ ์••์ถ•๋ฅ ์€ ์ถฉ๋ถ„ํžˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ํ—ˆํ”„๋งŒ ์••์ถ•์€ ์ตœ๋Œ€ 80%์˜ ์••์ถ•๋ฅ ๊นŒ์ง€ ๋ณด์—ฌ์ค€๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋– ํ•œ ์˜๋ฌธ์ž๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋‚˜์˜ค๋А๋ƒ์— ๋”ฐ๋ผ ์••์ถ•๋ฅ  ๋˜ํ•œ ๋‹ฌ๋ผ ์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์Œ์—๋Š” ์ข€ ๋” ๋ฐœ์ „ํ•ด , GUI๊นŒ์ง€ ๊ตฌ์„ฑ๋œ ์••์ถ• ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ธฐํšŒ๋ฅผ ๊ฐ€์ง€๊ณ  ์‹ถ๋‹ค.

4. ํ—ˆํ”„๋งŒ ์ฝ”๋“œ ์ด์ง„ํŠธ๋ฆฌ

ํ—ˆํ”„๋งŒ ์ฝ”๋“œ ์ด์ง„ํŠธ๋ฆฌ๋Š” ํ…์ŠคํŠธ ์••์ถ•์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋†’์œผ๋ฉด ์ž‘์€ ๋น„ํŠธ๋กœ ๋‚ฎ์œผ๋ฉด ํฐ ๋น„ํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋‚˜ํƒ€๋‚ธ ํŠธ๋ฆฌ๋‹ค.
์ถœํ˜„ ๋นˆ๋„๋ฅผ ๊ตฌํ–ˆ์œผ๋ฉด ํ—ˆํ”„๋งŒ ์ฝ”๋“œ์— ์ž…๋ ฅ์‹œํ‚ค๊ณ , ์ž…๋ ฅ์‹œํ‚จ ํ…์ŠคํŠธ๋“ค์ด ๋ณ€ํ™˜๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

        Node leftChild = mini.MinNode();
        Node rightChild = mini.MinNode();

        plusparent = new Node(leftChild.txt+rightChild.txt,'.');
        plusparent.leftNode=leftChild;
        plusparent.rightNode=rightChild;

        if(mini.isEmpty()) return;

        mini.insert(plusparent);
    }     

์œ„์˜ ์ฝ”๋“œ๋กœ ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ์€ 0, ์˜ค๋ฅธ์ชฝ์€ 1์„ ํ• ๋‹นํ•œ ์ด์ง„์ฝ”๋“œ์˜ ๊ฐ’์€ ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค.
162628647-edce3538-ec7d-47ac-941f-d78a86902451

๋”ฐ๋ผ์„œ ์ด ์ด์ง„์ฝ”๋“œ์˜ ํ—ˆํ”„๋งŒ ํŠธ๋ฆฌ๋ฅผ ๊ทธ๋ ค๋ณด์•˜๋‹ค.
ํ—ˆํ”„๋งŒ ํŠธ๋ฆฌ ๊ตฌํ˜„ ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋†’์€ ๋ฌธ์ž๊ฐ€ ํŠธ๋ฆฌ์˜ ์•ž๋ถ€๋ถ„์— ์žˆ๊ณ  ๋‚ฎ์€ ๋ฌธ์ž๊ฐ€ ํŠธ๋ฆฌ์˜ ์ œ์ผ ๋ฐ‘๋ถ€๋ถ„์— ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

5. ํ—ˆํ”„๋งŒ ์ฝ”๋“œ ์„ฑ๋Šฅ๋ถ„์„

ํ—ˆํ”„๋งŒ ์ฝ”๋“œ์—์„œ ์„ฑ๋Šฅ๋ถ„์„์ด๋ž€ ๊ธฐ์กด์˜ ํ…์ŠคํŠธ ํŒŒ์ผ์—์„œ ์••์ถ•ํ•˜๊ณ  ๋‚œ ํ›„์˜ ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์–ผ๋งˆ๋งŒํผ ์ค„์—ˆ๋Š”๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
๊ธฐ์กด์˜ alice ํ…์ŠคํŠธ ํŒŒ์ผ์—์„œ์˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 107748์ด์—ˆ๊ณ , ASCII ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ผ ์‹œ 8bit๋ฅผ ๊ณฑํ•œ 861984bit์ด๋‹ค.
ํ—ˆํ”„๋งŒ ์ฝ”๋“œ์—์„œ๋Š” ๋ณ€ํ˜•๋œ ๊ฐ’์ด ๊ฐ€๋ณ€ ๊ธธ์ด ์ฝ”๋“œ์ด๋‹ค. ์ด์ง„์ฝ”๋“œ์˜ ๊ฐ’์— ๊ฐ๊ฐ์˜ ๋นˆ๋„์ˆ˜๋ฅผ ๊ณฑํ•ด์„œ ๋”ํ–ˆ์„๋•Œ ๊ฐ’์ด 451520์ด ๋‚˜์™”๋‹ค.
451520 / 861984 *100 = 54 ์ •๋„ ์ด๋ฏ€๋กœ ๋Œ€๋žต 46% ์ •๋„ ์••์ถ•๋˜์—ˆ๋‹ค.

์•ž์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํ—ˆํ”„๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์••์ถ•๋ฅ ์ด ์ผ์ •ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ’์ด ๋ณ€๋™์ด ๋œ๋‹ค.
๋˜ํ•œ ์œ„์˜ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ ์ด์ง„์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋…ธ๋“œ๋“ค์ด ์•ž์— ๋งŽ์ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง„ ๊ฒƒ ์ฒ˜๋Ÿผ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ด์ง„์ฝ”๋“œ์˜ ๊ฐ’์„ ์ค„์—ฌ์„œ ์••์ถ•๋ฅ ์„ ๋†’์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

6. ๋ณด๊ณ ์„œ๋ฅผ ๋งˆ์น˜๋ฉฐ

์ด๋ฒˆ ํ—ˆํ”„๋งŒ ์••์ถ• ํŒ€ ๊ณผ์ œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋จผ์ € ํ•œ ๊ฒƒ์€ ๊ฐ์ž ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
๊ฐ์ž python, java, c ๋“ฑ ์„œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๊ฐ€ ๋‹ฌ๋ผ ๊ทธ์— ๋งž์ถฐ์„œ ์„œ๋กœ ํ•ด์•ผํ•  ํŒŒํŠธ๋ฅผ ๋‚˜๋ˆ„๊ธฐ๋กœ ํ–ˆ๋‹ค.
๋ฌธ์„œ ํŒŒ์ผ์„ ์ ์šฉํ•˜๊ธฐ ์šฉ์ดํ•œ python์„ ์‚ฌ์šฉํ•˜๋Š” ํŒ€์› ๋ถ„์ด ์ „์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ธฐ๋กœ ํ–ˆ๊ณ , java ์ˆ˜์—…์ธ๋งŒํผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ java๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒ€์› ๋ถ„์ด ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๊ณผ์ œ๋ฅผ ํ•˜๋ฉด์„œ ํ‰์†Œ ๊ณต๋ถ€ํ•  ๋•Œ ๋ธ”๋กœ๊ทธ๋‚˜ ์ฑ…์— ์ ํ˜€์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ง์ ‘ ์ฐพ์•„๋ณด๊ณ  ์ƒ๊ฐํ•ด๊ฐ€๋ฉฐ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.
๋˜ํ•œ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์••์ถ•๋ฅ ์„ ๊ณ„์‚ฐํ•˜๊ณ , ์„ฑ๋Šฅ๋ถ„์„๊ณผ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ทธ๋ ค๋ณด๋ฉด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋ฉฐ ๋ณด์ถฉํ•  ๋ถ€๋ถ„์„ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors