λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Computer Science

[CS, 자료ꡬ쑰] Array, LinkedList에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

πŸ€” Arrayλž€ λ¬΄μ—‡μΌκΉŒ?

κ°€μž₯ 기본적인 자료ꡬ쑰인 Array (λ°°μ—΄)은 논리적 μ €μž₯ μˆœμ„œμ™€ 물리적 μ €μž₯ μˆœμ„œκ°€ μΌμΉ˜ν•œλ‹€. μ΄λŠ” 순차적으둜 μ €μž₯λ˜μ–΄ μžˆλŠ” μ›μ†Œλ“€μ˜ μˆœμ„œκ°€ λ…Όλ¦¬μ μœΌλ‘œ μƒκ°ν–ˆμ„ λ•Œ μ‹œμž‘μ μ—μ„œμ˜ μƒλŒ€μ μΈ μ›μ†Œ μœ„μΉ˜κ°€ μΌμΉ˜ν•œλ‹€λŠ” λœ»μ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 배열은 index 둜 μ ‘κ·Όν•  수 μžˆλ‹€. 

🧐 Array의 탐색, μ‚½μž…, μ‚­μ œ μ‹œκ°„ λ³΅μž‘λ„λŠ” μ–΄λ–»κ²Œ 될까?

즉, νƒμƒ‰ν•˜λŠ” κ³Όμ •μ—μ„œ random accessκ°€ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—, Big O(1) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀. 

 

μ‚½μž…, μ‚­μ œ μ‹œκ°„ λ³΅μž‘λ„λŠ” μ–΄λ–»κ²Œ 될까? μš°μ„ , μ‚½μž…, μ‚­μ œμ˜ λŒ€μƒμ„ νƒμƒ‰ν•˜λŠ” 과정이 ν•„μš”ν•˜λ‹€. 이 과정은 Big O(1) μ‹œκ°„ λ³΅μž‘λ„λ‘œ 탐색이 κ°€λŠ₯ν•˜λ‹€. κ°€λ Ή, μ‚½μž…μ„ ν•œλ‹€λ©΄ μ‚½μž…ν•  μœ„μΉ˜μ˜ κ°’λΆ€ν„° 순차적으둜 μ €μž₯λ˜μ–΄ μžˆλŠ” μ›μ†Œλ“€μ„ λ’€λ‘œ ν•œ μΉΈμ”© shift ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. μ‚­μ œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ μ‚­μ œν•œ μœ„μΉ˜λΆ€ν„° 순차적으둜 μ €μž₯λ˜μ–΄ μžˆλŠ” μ›μ†Œλ“€μ„ μ•žμœΌλ‘œ ν•œ μΉΈμ”© shift ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. μ΄λŠ” λ°°μ—΄μ˜ 연속적인 νŠΉμ§•μ„ μœ μ§€ν•΄μ£ΌκΈ° μœ„ν•΄μ„œμ΄λ‹€. 결둠적으둜 Big O(n) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀. 

πŸ€” LinkedListλž€ λ¬΄μ—‡μΌκΉŒ?

LinkedList (μ—°κ²°λ¦¬μŠ€νŠΈ)λŠ” μ΄λŸ¬ν•œ λ°°μ—΄μ˜ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ μƒκ²¨λ‚œ μžλ£Œκ΅¬μ‘°μ΄λ‹€. 각각의 μ›μ†Œκ°€ λ‹€μŒ μ›μ†Œκ°€ μ–΄λ–€ μ›μ†ŒμΈμ§€μ— λŒ€ν•œ 포인터λ₯Ό 가지고 μžˆλŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€.

🧐 LinkedList의 탐색, μ‚½μž…, μ‚­μ œ μ‹œκ°„ λ³΅μž‘λ„λŠ” μ–΄λ–»κ²Œ 될까?

μš°μ„ , μ‚½μž…, μ‚­μ œ 과정을 μƒκ°ν•΄λ³΄μž. μ‚½μž…ν•˜κΈ° μœ„ν•΄μ„  μ‚½μž… μœ„μΉ˜ 이전 κ°’μ˜ 포인터에 λŒ€ν•œ 정보와 μ‚½μž…λœ μ›μ†Œμ— λ‹€μŒ μ›μ†Œμ— λŒ€ν•œ 포인터 정보λ₯Ό λ„£μ–΄μ£Όλ©΄ λœλ‹€. λ˜ν•œ, μ‚­μ œν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‚­μ œν•  μ›μ†Œμ˜ 이전 μ›μ†Œμ˜ 포인터에 μ‚­μ œν•  μ›μ†Œκ°€ 가진 포인터 μ •λ³΄λ§Œμ„ 전달해주면 λœλ‹€. κ²°κ΅­, μ‚½μž…, μ‚­μ œλ  μ›μ†Œμ˜ 탐색이 μ™„λ£Œλ˜μ—ˆλ‹€λŠ” κ°€μ •ν•˜μ— Big O(1) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀. 

 

ν•˜μ§€λ§Œ, 탐색은 random accessκ°€ λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 첫 μ›μ†ŒλΆ€ν„° 찾고자 ν•˜λŠ” μ›μ†ŒκΉŒμ§€ 일일이 μ°Ύμ•„μ•Ό ν•œλ‹€. 즉, Big O(n) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀. κ²°κ΅­, μ‚½μž…, μ‚­μ œ λ˜ν•œ 탐색이 μš°μ„ μ μœΌλ‘œ 이루어져야 ν•˜κΈ° λ•Œλ¬Έμ— Big O(n) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀고 ν•  수 μžˆλ‹€.

 

LinkedList의 탐색, μ‚½μž…, μ‚­μ œκ°€ Array에 λΉ„ν•΄ μ„±λŠ₯이 κ°™λ”λ‚˜ 떨어진닀. ν•˜μ§€λ§Œ, LinkedListλŠ” Tree λΌλŠ” μžλ£Œκ΅¬μ‘°μ—μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.