๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Java

[TIL] ์ž๋ฃŒ๊ตฌ์กฐ : ๋ฐํ, ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ, ํ•ด์‹œํ…Œ์ด๋ธ”, ํž™ํŠธ๋ฆฌ

by hong- 2022. 5. 31.

๐Ÿ‘๐Ÿป Deque

 - ์–‘๋ฐฉํ–ฅ ๋Œ€๊ธฐ์—ด์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 - Stack๊ณผ Queue์˜ ํ˜ผํ•ฉ๊ตฌ์กฐ๋กœ Queue์™€ ์™ธํ˜•์ ์œผ๋กœ ๋น„์Šทํ•œ ๊ตฌ์กฐ


๐Ÿ“ Deque์˜ ํŠน์ง•

 โ‘  Stack๋ฐ Queue๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  - ์–‘์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์–ด์„œ Stack๊ณผ Queue ๊ตฌํ˜„ ๊ฐ€๋Šฅ

  - ์ถ”๊ฐ€์™€ ์‚ญ์ œ๋ฅผ ์–‘์ชฝ์—์„œ ์ œ์–ด ๊ฐ€๋Šฅ (ex. ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€๋Š” ํ•œ์ชฝ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ญ์ œ๋Š” ์–‘์ชฝ ๊ฐ€๋Šฅ)

 โ‘ก ์–‘๋ฐฉํ–ฅ ๋์—์„œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ์‚ญ์ œ ์šฉ์ด

  - ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์–‘์ชฝ์—์„œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ, ์ถ”๊ฐ€, ์‚ญ์ œ ์šฉ์ด

 โ‘ข ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋Š” ๋ถˆ๊ฐ€

  - ๋ฐํ๋Š” ์–‘๋ฐฉํ–ฅ ๋์˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์–‘๋ฐฉํ–ฅ์ด ์•„๋‹Œ ์ค‘๊ฐ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์€ ์–ด๋ ค์›€


๐Ÿ‘๐Ÿป Linked List : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

 - ์„ ํ˜•์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ

 - ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ

 - ๋ฐฐ์—ด์€ ์—ฐ์†๋œ ๊ณต๊ฐ„ ์•ˆ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์ธ๋ฑ์Šค๋กœ ๊ฐ๊ฐ์˜ ์š”์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

    - ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Ÿ๊ฐ’ ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ตฌ์กฐ๋กœ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋™ํ•ด์•ผ ํ•จ

  - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ํฉ์–ด์ง„ ๊ณต๊ฐ„์— ๋…ธ๋“œ๋“ค์˜ ์—ฐ๊ฒฐ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ 

 


๐Ÿ“ Linked List ์˜ ํŠน์ง•

 โ‘  ๋…ธ๋“œ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ๋น ๋ฅด๊ณ  ์‰ฌ์›€

  - ๋ฐฐ์—ด(์ถ”๊ฐ€ ์‚ญ์ œ์‹œ ์žฌํ• ๋‹น)๊ณผ ๋‹ฌ๋ฆฌ ์ˆœ์„œ๊ฐ€ ์—†์–ด ์–ด๋””์„œ๋‚˜ ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ์‚ญ์ œ ๊ฐ€๋Šฅ

 โ‘ก ๋…ธ๋“œ์˜ ๊ฐ’์„ ์ฐพ์œผ๋Ÿฌ๋ฉด ์ตœ๋Œ€ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•จ

  - ๋ฐฐ์—ด(์—ฐ์†์ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ์Œ)๊ณผ ๋‹ฌ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ํฉ์–ด์ ธ ์žˆ์–ด ์‰ฝ๊ฒŒ ์ ‘๊ทผ์ด ์–ด๋ ค์›€


๐Ÿ‘๐Ÿป Hash Table

 - ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•œ ํ•ด์‹œ๋ฅผ ์ƒ‰์ธ์œผ๋กœ ์‚ผ์•„ ํ‚ค์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 - ์ „ํ™”๋ฒˆํ˜ธ ๋‹จ์ถ•ํ‚ค ์ง€์ •๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ ์ €์žฅ๋ช…์„ key๋กœ, ๋‹จ์ถ•ํ‚ค๋ฅผ hash๋กœ, ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ value๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ


๐Ÿ“ Hash Table ์˜ ํŠน์ง•

 โ‘  ์ €์žฅ, ์‚ญ์ œ, ๊ฒ€์ƒ‰ ๊ณผ์ •

  - ์ €์žฅ, ๊ฒ€์ƒ‰, ์‚ญ์ œ ํ‰๊ท ์ ์œผ๋กœ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—…์ด ๋งค์šฐ ๋น ๋ฆ„

  - ํ•ด์‹œํ•จ์ˆ˜์— ํ‚ค ๊ฐ’์„ ๋„ฃ์–ด ํ•ด์‹œ ๊ฐ’์„ ๋งŒ๋“ค๊ณ  ํ•ด์‹œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ๊ฒ€์ƒ‰, ์‚ญ์ œ, ์ €์žฅ

  - ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ํ•ด์‹œ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์‹œ๊ฐ„์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์Œ

 โ‘ก ๋Œ€ํ‘œ์ ์ธ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

   (1) Division Method

     - Number type์˜ ํ‚ค๋ฅผ ์ €์žฅ์†Œ์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„์–ด ๋‚˜์˜จ ๋‚˜๋จธ์ง€๋ฅผ ์ƒ‰์ธ์œผ๋กœ ์‚ฌ์šฉ

     - key ๊ฐ’์ด 23์ผ ๋•Œ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ 7์ด๋ผ๋ฉด ์ธ๋ฑ์Šค๋Š” 2 ! :: 23 % 7 = 2

   (2) Digit Folding

     - ํ‚ค์˜ ๋ฌธ์ž์—ด์„ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๊ณ  ๊ทธ ๊ฐ’์„ ํ•ฉํ•ด ์ €์žฅ์†Œ์—์„œ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ

   (3) Multiplication Method

     - ์ˆซ์ž๋กœ ๋œ ํ‚ค ๊ฐ’(K)๊ณผ 0๊ณผ 1 ์‚ฌ์ด์˜ ์‹ค์ˆ˜(A), 2์˜ ์ œ๊ณฑ์ˆ˜์ธ (M)์„ ์‚ฌ์šฉํ•˜์—ฌ (KA mod 1)m์œผ๋กœ ์ธ๋ฑ์Šค ๊ณ„์‚ฐ

   (4) Universal Hashing

     - ๋‹ค์ˆ˜์˜ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ํŠน์ • ์žฅ์†Œ์— ๋„ฃ๊ณ  ๋ฌด์ž‘์œ„๋กœ ํ•ด์‹œํ•จ์ˆ˜๋ฅด ์„ ํƒํ•˜์—ฌ ํ•ด์‹œ ๊ฐ’ ์„ ์ •


๐Ÿ“ ํ•ด์‹œ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  ๐Ÿ’ก ํ•ด์‹œ ์ถฉ๋Œ Hash Conflict 

    : ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ

 

 โ‘  ๊ฐœ๋ฐฉ ์—ฐ๊ฒฐ๋ฒ• Open Addressing

  - ํ•ด์‹œ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ, ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์— ํ•ด๋‹น ์ž๋ฃŒ๋ฅผ ์‚ฝ์ž…

   (1) Linear Probing

    - ํ˜„์žฌ ์ค‘๋ณต๋œ ์ƒ‰์ธ์œผ๋กœ ๋ถ€ํ„ฐ ๊ณ ์ •๋œ ์ˆซ์ž๋งŒํผ ์ด๋™ํ•˜์—ฌ ๋น„์–ด์žˆ๋Š” ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ ์ €์žฅ

   (2) Quadratic Probing

    - ํ˜„์žฌ ์ค‘๋ณต๋œ ์ƒ‰์ธ์œผ๋กœ ๋ถ€ํ„ฐ ์ด๋™ํ•  ์ˆซ์ž๋ฅผ ์ œ๊ณฑ์œผ๋กœ ์‚ฌ์šฉ ( ์ฒซ ์ถฉ๋Œ์€ : 1^1, ๋‘๋ฒˆ์งธ ์ถฉ๋Œ์€ : 2^2, ์„ธ๋ฒˆ์žฌ ์ถฉ๋Œ์€ : 3^3 )

   (3) Double Hasing Probing

    - ํ•˜๋‚˜์˜ ํ•ด์‹œํ•จ์ˆ˜์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด ๋‘” ๋‹ค๋ฅธ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ

 โ‘ก ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ• Seperate Chaining

  - ๋™์ผํ•œ ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ํŠธ๋ฆฌ ๋“ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ ์ €์žฅ

 โ‘ข ์ €์žฅ์†Œ ํ™•์žฅ Resize

  - HashMap์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ €์žฅ์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๋‘ ๋ฐฐ ์ด์ƒ ๋Š˜๋ ค ์„ฑ๋Šฅ ๊ฐ์†Œ ๋ฌธ์ œ ํ•ด๊ฒฐ


๐Ÿ‘๐Ÿป Heap Tree

 - ์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ์„œ ๋น ๋ฅด๊ฒŒ ์ž๋ฃŒ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ

 - ์‘๊ธ‰์‹ค์— ์‘๊ธ‰ํ™˜์ž๋ถ€ํ„ฐ ์น˜๋ฃŒํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…

 - ๋А์Šจํ•œ ์ •๋ ฌ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„

   * ๋А์Šจํ•œ ์ •๋ ฌ๊ตฌ์กฐ ? ๋ถ€๋ชจ๋Š” ์ž์‹๋ณด๋‹ค ํ•ญ์ƒ ํฌ๊ฑฐ๋‚˜ ์ž‘๊ฒŒ ์ •๋ ฌ & ์ž์‹๋ผ๋ฆฌ๋Š” ๊ฐ’ ํฌ๊ธฐ ์ค‘์š” x


๐Ÿ“ Heap Tree ์˜ ํŠน์ง•

 โ‘  ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ

  - ์‚ฝ์ž… ์‚ญ์ œ ์‹œ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„

 โ‘ก ์ค‘๋ณต๋œ ๊ฐ’ ์ €์žฅ 

  - ์ผ๋ฐ˜์ ์ธ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ ์ค‘๋ณต๋œ ๊ฐ’ ์ €์žฅ ๊ฐ€๋Šฅ

  - ํž™ํŠธ๋ฆฌ๋Š” ๋‹จ์ˆœํžˆ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ

 โ‘ข ์ตœ๋Œ€ / ์ตœ์†Œ ํž™

  - ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๊ณ  ์ ์  ์ž‘์€ ๊ฐ’์œผ๋กœ ๊ตฌํ˜„ ํ•œ๋‹ค๋ฉด ์ตœ๋Œ€ ํž™

  - ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด๊ณ  ์ ์  ํฐ ๊ฐ’์œผ๋กœ ๊ตฌํ˜„ ํ•œ๋‹ค๋ฉด ์ตœ์†Œ ํž™


๐Ÿ“ Heap Tree ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

 โ‘  ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

  - ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” 0(1)

 โ‘ก ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

   (1) ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ์ƒˆ๋กœ์šด ๊ฐ’ ์ €์žฅ

   (2) ์‚ฝ์ž…๋œ ๋…ธ๋“œ์™€ ๋ถ€๋ชจ์˜ ๊ฐ’ ๋น„๊ต

   (3) ์ตœ๋Œ€ ํž™์ผ ๊ฒฝ์šฐ ๋ถ€๋ชจ๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ์œ ์ง€, ์‚ฝ์ž…๋œ ๋…ธ๋“œ๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ์œ„์น˜ ๋ณ€๊ฒฝ

   (4) ๊ณ„์†ํ•ด์„œ (1)-(3) ๊ณผ์ • ๋ฐ˜๋ณต

โ‘ข ๋ฐ์ดํ„ฐ ์‚ญ์ œ

   (1) ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’ ์ œ๊ฑฐ

   (2) ๋ฃจํŠธ ์ž๋ฆฌ์— ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ๊ฐ’ ์‚ฝ์ž…

   (3) ์˜ฌ๋ผ๊ฐ„ ๋…ธ๋“œ์˜ ๊ฐ’๊ณผ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’ ๋น„๊ตํ•˜๋ฉฐ ๊ฐ’ ์œ„์น˜ ๋ณ€๊ฒฝ