Skip to content

Latest commit

ย 

History

History
119 lines (84 loc) ยท 6.02 KB

File metadata and controls

119 lines (84 loc) ยท 6.02 KB

01. ๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด(p.133-138)

  • ๋ฐฐ์—ด์ด๋‚˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ๋ฌธ์ œ๋“ค์€ ์„œ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•ด์‹œํ…Œ์ด๋ธ”

  • ํ•ด์‹œํ…Œ์ด๋ธ”(hash table)

    • ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
    • ํ‚ค(key)๋ฅผ ๊ฐ’(value)์— ๋Œ€์‘์‹œํ‚ด
  • ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„๋ฐฉ๋ฒ•: ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(linked list) + ํ•ด์‹œ ์ฝ”๋“œ ํ•จ์ˆ˜(hash code function)

  • ํ•ด์‹œํ…Œ์ด๋ธ”์— ํ‚ค์™€ ๊ฐ’์„ ๋„ฃ๋Š” ๊ณผ์ •

    1. ํ‚ค์˜ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ํ‚ค์˜ ์ž๋ฃŒํ˜•์€ ๋ณดํ†ต int ๋˜๋Š” long์ด๋‹ค. ํ‚ค์˜ ๊ฐœ์ˆ˜๋Š” ๋ฌดํ•œํ•˜์ง€๋งŒ int์˜ ๊ฐœ์ˆ˜๋Š” ์œ ํ•œํ•˜๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ‚ค๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ช…์‹ฌํ•˜๋ผ.
    2. hash(key) % array_length์™€ ๊ฐ™์ด ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•œ๋‹ค.
    3. ๋ฐฐ์—ด์˜ ๊ฐ ์ธ๋ฑ์Šค์—๋Š” ํ‚ค์™€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ํ‚ค์™€ ๊ฐ’์„ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์ €์žฅํ•œ๋‹ค. ์ถฉ๋Œ์— ๋Œ€๋น„ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

    ์ถฉ๋Œ: ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ‚ค๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ•ด์‹œ ์ฝ”๋“œ๊ฐ€ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ

  • ํƒ์ƒ‰ ์‹œ๊ฐ„๋ณต์žก๋„

    • ์ถฉ๋Œ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„(worst case runtime) -> O(N) (N์€ ํ‚ค์˜ ๊ฐœ์ˆ˜)
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด์‹œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ๋Š” ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๋„๋ก ์ž˜ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ • -> O(1)
    • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(balanced binary search tree)๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„-> O(logN)
      • ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐฐ์—ด์„ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด ๋†“์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์ž ์žฌ์ ์œผ๋กœ ์ ์€ ๊ณต๊ฐ„์„ ์‚ฌ์šฉ
      • ํ‚ค์˜ ์ง‘ํ•ฉ์„ ํŠน์ • ์ˆœ์„œ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

ArrayList์™€ ๊ฐ€๋ณ€ ํฌ๊ธฐ ๋ฐฐ์—ด

  • ๋ฐฐ์—ด(array)
    • Python, JavaScript ๋“ฑ ํŠน์ • ์–ธ์–ด: ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ ˆ -> "๋ฆฌ์ŠคํŠธ(list)"
    • Java: ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ณ ์ •๋˜์–ด ๋ฐฐ์—ด ์ƒ์„ฑ ์‹œ ํฌ๊ธฐ๋ฅผ ํ•จ๊ป˜ ์ง€์ •ํ•ด์•ผ ํ•จ
  • ArrayList
    • ๋™์  ๊ฐ€๋ณ€ ํฌ๊ธฐ ๊ธฐ๋Šฅ์ด ๋‚ด์žฌ๋˜์–ด ์žˆ๋Š” ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
    • O(1)์˜ ์ ‘๊ทผ ์‹œ๊ฐ„(access time)
    • ๋ฐฐ์—ด์ด ๊ฐ€๋“ ์ฐจ๋Š” ์ˆœ๊ฐ„, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆฐ๋‹ค. ํฌ๊ธฐ๋ฅผ ๋‘ ๋ฐฐ ๋Š˜๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(N)์ด์ง€๋งŒ, ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ผ์ด ์•„๋‹ˆ๋ผ์„œ ์ƒํ™˜ ์ž…๋ ฅ ์‹œ๊ฐ„(amortized insertion time)์œผ๋กœ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ ์—ฌ์ „ํžˆ O(1)์ด ๋œ๋‹ค.

์ƒํ™˜ ์ž…๋ ฅ ์‹œ๊ฐ„์€ ์™œ O(1)์ด ๋˜๋Š”๊ฐ€

  • ํฌ๊ธฐ๊ฐ€ N์ธ ๋ฐฐ์—ด์„ ์ƒ๊ฐํ•ด ๋ณด์ž. ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ K๋กœ ๋Š˜๋ฆฌ๋ฉด ๊ทธ ์ „ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” K์˜ ์ ˆ๋ฐ˜์ด์—ˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ K/2๋งŒํผ์˜ ์›์†Œ๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ N๊ฐœ์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ์›์†Œ์˜ ์ด ๊ฐœ์ˆ˜๋Š” N/2 + N/4 + N/8 + ... + 2 + 1, ์ฆ‰ N๋ณด๋‹ค ์ž‘๋‹ค.
  • ๋”ฐ๋ผ์„œ N๊ฐœ์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ์†Œ์š”๋˜๋Š” ์ž‘์—…์€ O(N)์ด ๋œ๋‹ค. ๋ฐฐ์—ด์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ตœ์•…์˜ ๊ฒฝ์šฐ์— O(N)์ด ์†Œ์š”๋˜๋Š” ์‚ฝ์ž… ์—ฐ์‚ฐ๋„ ์กด์žฌํ•˜๊ธด ํ•˜์ง€๋งŒ ํ‰๊ท ์ ์œผ๋กœ ๊ฐ ์‚ฝ์ž…์€ O(1)์ด ์†Œ์š”๋œ๋‹ค.

StringBuilder

๋ฌธ์ž์—ด์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ด ๋ฌธ์ž์—ด๋“ค์„ ํ•˜๋‚˜๋กœ ์ด์–ด ๋ถ™์ด๋ ค๊ณ  ํ•œ๋‹ค. ๋ชจ๋“  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด(x)๊ฐ€ ๊ฐ™์€ n๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

String joinWords(String[] words) {
    String sentence = "";
    for (String w : words) {
        sentence = sentence + w;
    }
    return sentence;
} 

๋ฌธ์ž์—ด์„ ์ด์–ด๋ถ™์ผ ๋•Œ๋งˆ๋‹ค ๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์ฝ์–ด ๋“ค์ธ ๋’ค ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์— ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” x๊ฐœ, ๋‘ ๋ฒˆ์งธ๋Š” 2x๊ฐœ, ์„ธ ๋ฒˆ์งธ๋Š” 3x๊ฐœ, n๋ฒˆ์งธ๋Š” nx๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ˆ˜ํ–‰ ์‹œ๊ฐ„์€ O(x + 2x + ... + nx), ์ฆ‰ O(xn^2)์ด ๋œ๋‹ค.

StringBuilder๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค. StringBuilder๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ๊ฐ€๋ณ€ ํฌ๊ธฐ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ์ž์—ด์„ ๋ณต์‚ฌํ•˜๊ฒŒ๋” ํ•ด์ค€๋‹ค.

String joinWords(String[] words) {
    String sentence = new StringBuilder();
    for (String w : words) {
        sentence.append(w);
    }
    return sentence.toString();
} 

์ถ”๊ฐ€๋กœ ์ฝ์„ ๊ฑฐ๋ฆฌ

ํ•ด์‹œํ…Œ์ด๋ธ”์—์„œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•(p.814)

๋ชจ๋“  ํ•ด์‹œํ…Œ์ด๋ธ”์—์„  ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

์ฒด์ด๋‹(chaining)

  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ ์ฒด์ด๋‹
    • ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ๊ฐ ์›์†Œ๊ฐ€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๋Œ€์‘๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ๊ฐ€์žฅ ํ”ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ถฉ๋Œ ํšŸ์ˆ˜๊ฐ€ ๊ฝค ์ž‘์„ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค.
    • ํ•ด์‹œํ…Œ์ด๋ธ”์— N๊ฐœ์˜ ์›์†Œ๊ฐ€ ์žˆ์„ ๋•Œ, ์ตœ์•…์˜ ๊ฒฝ์šฐ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„: O(N)
      • ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ฃผ ์ด์ƒํ•˜๊ฑฐ๋‚˜ ํ•ด์‹œ ํ•จ์ˆ˜ ์„ฑ๋Šฅ์ด ์•„์ฃผ ๋‚˜์  ๋•Œ(ํ˜น์€ ๋‘˜ ๋‹ค์ผ ๋•Œ) ๋ฐœ์ƒ
  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์ฒด์ด๋‹
    • ์ตœ์•…์˜ ๊ฒฝ์šฐ: O(logN)
    • ์‹ค์ œ๋กœ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทน๋‹จ์ ์œผ๋กœ ๊ท ์ผํ•˜๊ฒŒ ๋ถ„ํฌ๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ์ด์ƒ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์„ ํ˜• ํƒ์‚ฌ๋ฒ•(linear probing)์„ ์ด์šฉํ•œ ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•(open addressing)

  • ์„ ํ˜• ํƒ์‚ฌ๋ฒ•(linear probing)์„ ์ด์šฉํ•œ ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•(open addressing)
    • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์„ ๋–„(์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค์— ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ์„ ๋•Œ), ๋น„์–ด ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค(index + 5์ฒ˜๋Ÿผ ๊ณ ์ •๋œ ๊ฑฐ๋ฆฌ๋งŒํผ ์›€์ง์ธ๋‹ค).
    • ์ถฉ๋Œ ํšŸ์ˆ˜๊ฐ€ ์ž‘์„ ๋•Œ, ์•„์ฃผ ๋น ๋ฅด๊ณ  ๊ณต๊ฐ„ ์ ˆ์•ฝ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ๋‹จ์ 
      • ํ•ด์‹œํ…Œ์ด๋ธ”์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ์— ์ œํ•œ๋œ๋‹ค. != ์ฒด์ด๋‹
      • ํด๋Ÿฌ์Šคํ„ฐ๋ง(clustering)
  • 2์ฐจ ํƒ์ƒ‰(quadratic probing)๊ณผ 2์ค‘ ํ•ด์‹œ(double hashing)
    • ํƒ์ƒ‰ ๊ฑฐ๋ฆฌ๋ฅผ 2์ฐจ์‹์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค.
    • ํ˜น์€ ํƒ์‚ฌ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ๋‘ ๋ฒˆ์งธ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Rabin-Karp ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(p.815)

๋ฉด์ ‘ ๋ฌธ์ œ

  1. ์ค‘๋ณต์ด ์—†๋Š”๊ฐ€
  2. ์ˆœ์—ด ํ™•์ธ
  3. URLํ™”
  4. ํšŒ๋ฌธ ์ˆœ์—ด
  5. ํ•˜๋‚˜ ๋นผ๊ธฐ
  6. ๋ฌธ์ž์—ด ์••์ถ•
  7. ํ–‰๋ ฌ ํšŒ์ „
  8. ()ํ–‰๋ ฌ
  9. ๋ฌธ์ž์—ด ํšŒ์ „