๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš— Major Study (Bachelor)/๐ŸŸจ Algorithm

์•Œ๊ณ ๋ฆฌ์ฆ˜ 6์ฃผ์ฐจ ๊ฐ•์˜

by UKHYUN22 2022. 4. 4.
728x90

 

Huffman Codes: Text Encoding


Encoding๊ณผ Decoding. ์ „์ž์—์„œ Analog์‹ ํ˜ธ๋ฅผ Digital๋กœ ๋ฐ”๊ฟ€๋•Œ Encoding์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ „์‚ฐ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋ถ€ํ˜ธํ™”๋ฅผ Encoding์ด๋ผ๊ณ  ํ•œ๋‹ค. Data๋ฅผ 0๊ณผ 1์˜ ์‹ ํ˜ธ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ. ๋ฐ˜๋Œ€์˜ ๊ณผ์ •์„ Decoding์ด๋ผ๊ณ  ๋ถ€๋ฆ„. ๊ณต๋ฐฑ๋„ ์บ๋ฆญํ„ฐ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค. 17byte๋ณด๋‹ค ์ ๊ฒŒ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜๋Š”๊ฐ€

 


Huffman code


12๊ฐœ์˜ ์ผ€๋ฆญํ„ฐ๋ฅผ 4๋น„ํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 4๋น„ํŠธ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค. ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ 17byte์— ๋น„ํ•ด Compactํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 2๊ฐœ์˜ ๋ฐฉ๋ฒ• ๋‘˜ ๋‹ค fixed layer๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. 

 


Huffman Codes


์–ด๋–ค ์ผ€๋ฆญํ„ฐ๋Š” 3bit ์–ด๋–ค ์ผ€๋ฆญํ„ฐ๋Š” 4bit๋กœ ์‚ฌ์šฉํ•ด์„œ bit์ˆ˜๋ฅผ saveํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ Huffman code๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Variable length๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

 


Prefix codes


Prefix๋Š” ๋ฌด์—‡์ธ๊ฐ€. 1010์ด๊ณ  10 ์ด๋ฉด 10์ด Prefix๊ฐ€ ๋œ๋‹ค. ์•ž์— ๊ณตํ†ต๋œ ๊ฒƒ์„ Prefix๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 
i๊นŒ์ง€ prefix์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 

 


Why Prefix codes


Prefix๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž. prefix ๊ด€๊ณ„์— ์žˆ๋Š” ๊ฒƒ๋“ค์ด ์กด์žฌํ•˜๋ฏ€๋กœ prefix code๊ฐ€ ์•„๋‹ˆ๋‹ค. star๋ผ๋Š” ๊ฒƒ์„ encoding ํ•˜๊ณ  decoding์„ ์ง„ํ–‰ํ•  ๋•Œ ์ž˜ ๋ชป split์„ ํ•ด๋ฒ„๋ฆฌ๋ฉด ์ž˜๋ชป๋œ ๋‹จ์–ด๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” Prefix ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 


Why are Prefix codes Unambiguous


์ฒซ ๋ฒˆ์งธ ์ผ€๋ฆญํ„ฐ๋ฅผ ์• ๋งคํ•˜์ง€ ์•Š๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Prefix ํ•˜๋‹ค๋ฉด ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Prefix code


๋‹ค๋ฅธ codeword์˜ prefix๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ Prefix code๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ฐ€์žฅ ์ตœ์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ Encoding์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ. Decoding์„ ํ•  ๋•Œ ํ•˜๋‚˜์”ฉ counting์„ ํ•˜๋ฉด์„œ Choice๊ฐ€ ํ•˜๋‚˜๋ฐ–์— ์—†์„ ๋•Œ๊นŒ์ง€ ๊ฐ„์ถ”๋ฆฌ๋ฉด์„œ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

 


Decoding/encoding tree


Frequency๋Š” ๋ฐœ์ƒํ•œ ์ผ€๋ฆญํ„ฐ์˜ ๋นˆ๋„์ˆ˜์ด๋‹ค. ๋ชจ์Œ๋ณด๋‹ค ์ž์Œ์ด ๋” ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— a์˜ ์ˆซ์ž๊ฐ€ ๋” ๋งŽ์ด ์กด์žฌํ•œ๋‹ค. a : 3bit x 45,000 ... ์ด๋ ‡๊ฒŒ ๊ณ„์‚ฐ์ด ๋œ๋‹ค. 

 


Cost of encoding a file


frequency์™€ ๊ฐ๊ฐ ๋น„ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ๊ณฑํ•˜๊ฒŒ ๋œ๋‹ค.

 


Huffman Code


๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•  ์ˆ˜ ์žˆ๊ณ  Prefix๋ฅผ ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 

 


Huffman's Algorithm


Character์˜ ๊ฐœ์ˆ˜ C๋ฅผ n์— ๋„ฃ๊ณ  ๊ฐ๊ฐ์˜ C๋ฅผ Priority Queue์— ๋„ฃ๋Š”๋‹ค. Extract Min ํ•˜๋ฉด ๋งจ ์ฒ˜์Œ f ๊ทธ ๋‹ค์Œ e๊ฐ€ ๋‚˜์˜จ๋‹ค. ์™œ Greedy์ธ๊ฐ€. ํ•ด๋‹น ์ˆœ๊ฐ„์— ๊ฐ€์žฅ Frequ ๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๊ฒƒ์„ ์„ ํƒํ•ด์„œ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” nlgn์— ํ•ด๋‹นํ•œ๋‹ค. ์ผ€๋ฆญํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ ์ธ์ง€์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์€ ์„ธํƒ€ N ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 2๋ฒˆ ์ค„์€ Priority Queue์ด๋ฏ€๋กœ ๋น…์˜ค nlgn ๋” ์ •ํ™•ํ•˜๊ฒŒ ํ•˜๋ฉด ์„ธํ„ฐ N์ด๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. loop๋Š” ์„ธํƒ€ N๋งŒํผ ๋Œ์•„๊ฐ„๋‹ค. ๊ฐ๊ฐ์˜ Extract Min์€ height์— ํ•ด๋‹นํ•˜๋Š” ๋น…์˜ค lgn์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๊ฑธ๋ฆฐ๋‹ค. ๋ง์…ˆ์€ ์„ธํƒ€ 1์ด๊ณ  Insert๋Š” lgn์— ํ•ด๋‹นํ•œ๋‹ค. lgn์ด n๋งŒํผ ๋Œ์•„๊ฐ€๋ฏ€๋กœ nlgn์ด Running time์— ํ•ด๋‹นํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. f์™€ g๋ฅผ Extractํ•˜๊ฒŒ ๋˜๊ณ  ๋”ํ•ด์„œ ๋‹ค์‹œ Insertํ•˜๊ฒŒ ๋œ๋‹ค. 

 


 

 

The Knapsack Problem
๋„๋‘‘์ด ๊ฐ€๋ฐฉ์— ์ œ์ผ ๋น„์‹ผ ๋ฌผ๊ฑด์„ ์–ด๋–ค ๊ฒƒ์„ ๋„ฃ์–ด์•ผ ํ•˜๋Š”์ง€์™€ ๊ฐ™์€ ๋Š๋‚Œ

 


The Knapsack Problem
2๊ฐ€์ง€ ๋ฒ„์ „์ด ์กด์žฌํ•œ๋‹ค. 1๋ฒˆ ์งธ์˜ ๊ฒฝ์šฐ ๋ฌผ๊ฑด์„ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ด๊ณ  2 ๋ฒˆ์งธ์˜ ๊ฒฝ์šฐ ์ผ๋ถ€๋งŒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
1๋ฒˆ์€ DP๋กœ ํ’€ ์ˆ˜ ์žˆ๊ณ  2๋ฒˆ์€ Greedy๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค. 1๋ฒˆ์€ Greedy ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.
๋‘˜๋‹ค optimal substructure property๊ฐ€ ์กด์žฌํ•œ๋‹ค. 

 


Fractional knapsack problem
Theif๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง„, per pound ๋‹น ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ ๊ฐ€์ง„ ๊ฒƒ์„ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ทธ๋žฌ๋Š”๋ฐ๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉด ๋‹ค์Œ ๊ฒƒ์„ ๋„ฃ๊ฒŒ ๋œ๋‹ค.

 


0-1 Knapsack Problem
knapsack์˜ capacity๋Š” W๋งŒํผ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜๊ณ  S์˜ set์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. ๊ฐ๊ฐ์˜ Item ๋“ค์€ Index์™€ Value๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 


W๋ผ๋Š” ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ๋“ค์€ Integer๋กœ ๊ฐ€์ •ํ•œ๋‹ค. Weight์„ 20๊นŒ์ง€ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

 

 


Brute force approach
n๊ฐœ์˜ ์•„์ดํ…œ์ด ์žˆ๋‹ค๋ฉด 2^n๊ฐœ์˜ ์•„์ดํ…œ๋“ค์ด ์กด์žฌํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ Benefit Value๊ฐ€ ์–ผ๋งˆ์ธ๊ฐ€๋ฅผ ๊ณ„์‚ฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ชจ๋‘ ๊ณ„์‚ฐ์„ ํ•ด์•ผํ•œ๋‹ค. ๊ฐ๋‹นํ•˜์ง€ ๋ชปํ•˜๋Š” W์˜ ๊ฒฝ์šฐ ์ œ์™ธ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. W ์•ˆ์—์„œ ์ด์ต์ด ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ ์ทจํ•˜๊ฒŒ ๋œ๋‹ค. Total Value๊ฐ€ ์ตœ๋Œ€์น˜์ด๊ณ  ๊ทธ๊ฒƒ์˜ ๋ฌด๊ฒŒ๋Š” ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” W๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•œ๋‹ค. ์„ธํ„ฐ 2^n์ด๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ต‰์žฅํžˆ ๋Š๋ฆฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


0-1 Knapsack Problem
fractional knapsack์€ Greedy๊ฐ€ ํ†ตํ•œ๋‹ค. DP๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ Subproblem์„ ์ž˜ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. Optimal Substructure๋ฅผ ์œ ์ง€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” SubProblem์„ ์ž˜ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. Optimal Substructure๋ฅผ ๊ฐ–์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. n๊ฐœ ์ค‘์—์„œ 1๋ฒˆ ๋ถ€ํ„ฐ k๋ฒˆ ๊นŒ์ง€ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋œ๋‹ค. ์ „์ฒด 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ค‘ k๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 


Dynamic Programming
N๊ฐœ์˜ ์•„์ดํ…œ ์ค‘ k๊ฐœ์— ํ•ด๋‹นํ•˜๋Š” ์•„์ดํ…œ๋“ค์„ subProblem์œผ๋กœ ์ •์˜ํ•˜๋ฉด ์˜ณ์ง€ ์•Š์Œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 


Dynamic Programming
4๊ฐœ๋ฅผ ์ง‘์–ด ๋„ฃ๋”๋ผ๋„ Weight์ด 14๋ฐ–์— ๋˜์ง€ ์•Š๊ณ  4๊ฐœ์˜ ์•„์ดํ…œ์˜ weight์™€ value๋ฅผ ์ด๋ ‡๊ฒŒ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋œ๋‹ค. S5๋ฅผ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜๋ฉด S4๋ฅผ ์ด์šฉํ•˜๊ณ  5๋ฒˆ์งธ Weight๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด 4๋ฒˆ์„ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  5๋ฒˆ์„ ๊ณ ๋ฅด๊ฒŒ ๋œ๋‹ค. S5 ๋Š” S4๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ํ’€์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ Optimal Substructure๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ๋œ ๊ฒฝ์šฐ Sub Problem์„ ์ œ๋Œ€๋กœ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•œ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋กœ Define์„ ํ•˜๊ณ  ํ’€์ด๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 

 


Dynamic Programming
Fractional Knapsap์€ ์ž๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Greedy๋กœ ํ’€ ์ˆ˜ ์žˆ๊ณ  0-1์€ DP๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ Optimal SubStructure๋ฅผ ๊ฐ€์ง€๋„๋ก ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ์„ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€.

 


Defining a program
S4๋Š” S5์˜ Part๊ฐ€ ์•„๋‹ˆ๋‹ค. flaw, ๊ฒฐํ•จ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ. SubProblem์„ ํ•  ๋•Œ ํ•˜๋‚˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ W๋ฅผ ๋‘๊ฒŒ ๋œ๋‹ค. Weight๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•ด์„œ ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ •์˜ํ•˜๊ณ ์ž ํ•œ๋‹ค. B[k,w],์—์„œ B๋Š” Benefit์— ํ•ด๋‹นํ•œ๋‹ค. 1๋ถ€ํ„ฐ k์— ํ•ด๋‹นํ•˜๋Š” ์•„์ดํ…œ๊ณผ w๋Š” ๊ฐ ์•„์ดํ…œ์— ํ•ด๋‹นํ•˜๋Š” Weight์— ํ•ด๋‹นํ•œ๋‹ค. 

 


Recursive Formula for subproblems
B[k,W]๋Š” ์ตœ์ข… Solution์ด ๋œ๋‹ค. ์ด๊ฒƒ์˜ SubProblem์€ ์–ด๋–ป๊ฒŒ ์ •์˜ ๋˜๋ƒํ•˜๋ฉด B[k-1,w]๊ฐ€ ๋œ๋‹ค. ๋˜๋Š” B[k,w-1]๋„ SubProblem์ด ๋  ์ˆ˜ ์žˆ๋‹ค. k๋ฒˆ์งธ ์•„์ดํ…œ์„ knapsack์— ๋„ฃ๋Š” ๊ฒƒ์ด ์ข‹์€๊ฐ€ ์ข‹์ง€ ์•Š์€๊ฐ€๋ฅผ ํŒ๋ณ„ํ•ด์•ผ ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‹์˜ ๊ฒฝ์šฐ ๋„ฃ์œผ๋ ค๋Š” weight์˜ ํ•ฉ์ด W๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๋ชป์ง‘์–ด ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ Subproblem์„ ์ทจํ•˜๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ k๋ฒˆ์งธ ์•„์ดํ…œ์„ ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด Benefit์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค. k-1๋ฒˆ์งธ์˜ ์•„์ดํ…œ์„ ๋น„๊ตํ•ด์„œ 

Pseudocode