[๐Ÿ“ฐ ์œ„ํด๋ฆฌํŽ˜์ดํผ] HashSet? O(n) vs O(log n)?

han91ยท2026๋…„ 1์›” 19์ผ

[์œ„ํด๋ฆฌํŽ˜์ดํผ]

๋ชฉ๋ก ๋ณด๊ธฐ
3/11

๐Ÿ“Œ HashSet

๐Ÿง HashSet์ด๋ž€?

"์ค‘๋ณต์ด ์—†๋Š” ์ง‘ํ•ฉ(Set)"์„ ์•„์ฃผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์ปฌ๋ž™์…˜
-> ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” HashMap์„ ์‚ฌ์šฉํ•จ

public class HashSet<E> {
    private transient HashMap<E,Object> map;
    private static final Object PRESENT = new Object();
}
  • HashSet์— ์ €์žฅํ•˜๋Š” ๊ฐ’(E) โ†’ HashMap์˜ key
  • HashMap์˜ value โ†’ ์ „๋ถ€ ๋™์ผํ•œ ๋”๋ฏธ ๊ฐ์ฒด(PRESENT)
set.add("A");

๋‚ด๋ถ€์ ์œผ๋กœ๋Š”

map.put("A", PRESENT);

๐Ÿง HashSet์˜ ์ค‘๋ณต ํŒ๋‹จ ๊ธฐ์ค€

๐Ÿ” hashCode()

  • ๊ฐ์ฒด๋ฅผ ์–ด๋А ๋ฒ„ํ‚ท์— ๋„ฃ์„์ง€ ๊ฒฐ์ •
  • ๋น ๋ฅธ 1์ฐจ ํ•„ํ„ฐ ์—ญํ• 

๐Ÿ” equals()

  • ๊ฐ™์€ ๋ฒ„ํ‚ท ์•ˆ์—์„œ ์ง„์งœ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธ
  • ์ตœ์ข… ์ค‘๋ณต ํŒ์ •

๊ฒฐ๋ก 

hashCode()๊ฐ€ ๊ฐ™๊ณ  eqauals() ๊ฐ€ true -> ์ค‘๋ณต

๐Ÿ’ป HashSet์ด ์ค‘๋ณต ์ฒดํฌ์— ํšจ์œจ์ ์ธ ์ด์œ 

  • ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1)

    ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ -> ์ˆœ์ฐจ ํƒ์ƒ‰X
    = ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์•ˆ ๋ด„

  • hashCode๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๊ทน๋‹จ์ ์œผ๋กœ ์ค„์ž„

    List -> ์ตœ๋Œ€ N๋ฒˆ ๋น„๊ต
    HashSet -> ํŠน์ • ๋ฒ„ํ‚ท๋งŒ ํ™•์ธ

  • equals๋Š” "ํ•„์š”ํ•  ๋•Œ๋งŒ" ํ˜ธ์ถœ๋จ

    hashCode๊ฐ€ ๋‹ค๋ฅด๋ฉด equals์กฐ์ฐจ ์•ˆ ํ•œ๋‹ค๋Š” ๋œป

๐Ÿ“Œ O(n) vs O(log n)

๐Ÿง O(n) vs O(log n)?

O(n) : ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๊ทธ๋งŒํผ ๋” ๋งŽ์ด ์ผ์„ ํ•จ
O(log n) : ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋„ ์กฐ๊ธˆ๋งŒ ๋” ์ผ์„ ํ•จ

๐Ÿ” O(n): ํ•œ ๋ช…์”ฉ ์ „๋ถ€ ํ™•์ธ

์šด๋™์žฅ์— 100๋งŒ ๋ช…์ด ์„œ ์žˆ๊ณ , ๊ทธ์ค‘ ํ•œ ๋ช…์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ

ex) ์ถœ์„๋ถ€๋กœ ์ด๋ฆ„ ์ฐพ๊ธฐ, ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ๊ฐ’ ์ฐพ๊ธฐ (์„ ํ˜• ํƒ์ƒ‰)

๐Ÿ” O(log n): ์ ˆ๋ฐ˜์”ฉ ์ค„์ด๊ธฐ

์‚ฌ์ „(์ •๋ ฌ๋œ ์ƒํ™ฉ)์—์„œ ์ด๋ฆ„ ์ฐพ๊ธฐ

ex) ์ด๋ถ„ ํƒ์ƒ‰, ํŠธ๋ฆฌ ํƒ์ƒ‰, Hash ๊ตฌ์กฐ์˜ ๋‚ด๋ถ€ ๋กœ์ง ์ผ๋ถ€

๐Ÿ’ป 100๋งŒ ๊ฐœ ๋ฐ์ดํ„ฐ์—์„œ ์—ฐ์‚ฐ ํšŸ์ˆ˜ ๋น„๊ต

๐Ÿ“Œ ๊ธฐ์ค€

  • n = 1,000,000
  • log2(1,000,000) ~= 20
profile
์ฒœ๋ฐฉ์ง€์ถ•์–ด๋ฆฌ๋‘ฅ์ ˆ๋น™๊ธ€๋น™๊ธ€๋Œ์•„๊ฐ€๋Š”๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€