λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ
πŸ’» Computer Science/- Data Structure, Algorithm

[μ•Œκ³ λ¦¬μ¦˜-PS] Java μ—μ„œ 이진 검색 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜λŠ” 방법

by Wonit 2020. 2. 13.
이진 검색을 ν•˜κΈ° μœ„ν•΄ μ μš©λ˜λŠ” μ „μ œ 쑰건은 데이터가 ν‚€ κ°’μœΌλ‘œ μ •λ ¬λ˜μ–΄ μžˆλ‹€λŠ” κ°€μ •μ—μ„œ λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€. μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ˜ ν•™μŠ΅μ΄ ν•„μš”ν•œ μ‚¬λžŒμ€ 선택 μ •λ ¬ 에 λ“€μ–΄κ°€μ„œ κ°€λ³κ²Œ 읽고 μ˜€μ‹œλŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€.

이진 검색

이진 검색은 λ°°μ—΄μ˜ μš”μ†Œκ°€ λ‚΄λ¦Όμ°¨μˆœ, μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ μžˆλŠ” μƒνƒœμ—μ„œ 검색을 μ§„ν–‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ 이닀.


이진 κ²€μƒ‰μ˜ 배열을 절반으둜 λ‚˜λˆˆ λ’€ κ·Έ 쀑간 값보닀 크면 또 반으둜 λ‚˜λˆ„λŠ” 과정을 λ°˜λ³΅ν•˜μ—¬ μ›ν•˜λŠ” 값을 μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€..

이진 검색을 μˆ˜ν–‰ν•˜κΈ° 전에 μ•Œμ•„μ•Ό ν•  μš©μ–΄λ₯Ό μ •μ˜ν•΄λ³΄μž.

start

λ°°μ—΄μ˜ μ‹œμž‘ 인덱슀 (검색 λ²”μœ„μ˜ μ‹œμž‘)

center

λ°°μ—΄μ˜ 쀑간 인덱슀 (검색 λ²”μœ„μ˜ 쀑간)

end

λ°°μ—΄μ˜ 끝 인덱슀 (검색 λ²”μœ„μ˜ 끝)

 

 

이진 검색을 μœ„ν•΄μ„œ λ‹€μŒκ³Ό 같이 μ •μ˜ ν•˜μ˜€μœΌλ©΄ 이제 ꡬ동 원리λ₯Ό μ•Œμ•„λ³΄μž.

 

이진 검색은 start와 end μ‚¬μ΄μ˜ centerκ°’κ³Ό κ²€μƒ‰ν•˜λŠ” 값을 λΉ„κ΅ν•˜λ©° 검색 κ°’ 보닀 크면 start와 end, centerλ₯Ό μ„œλ‘œ μ‘°μ ˆν•˜μ—¬ 값을 μ°Ύμ•„λ‚΄λŠ” 방법을 말 ν•œλ‹€.

이진 κ²€μƒ‰μ˜ 검색 쑰건

λͺ¨λ‘ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •ν•˜μ—¬ μ§„ν–‰ν•œλ‹€.

 

center < key 일 경우

이 κ²½μš°λŠ” start와 end μ‚¬μ΄μ˜ center의 값보닀 key 값이 큰 경우λ₯Ό 뜻 ν•œλ‹€.


κ·Έλ ‡λ‹€λ©΄ start ~ center 사이에 값듀을 μ œμ™Έν•˜λ©° 검색 λ²”μœ„λ₯Ό center ~ end둜 λ°”κΎΈκ³  μ „ 과정을 λ°˜λ³΅ν•œλ‹€.

 

center > key 일 경우

이 κ²½μš°λŠ” start와 end μ‚¬μ΄μ˜ center의 값보닀 key 값이 μž‘μ€ 경우λ₯Ό 뜻 ν•œλ‹€.


κ·Έλ ‡λ‹€λ©΄ center ~ end 사이에 값듀을 μ œμ™Έν•˜λ©° 검색 λ²”μœ„λ₯Ό start ~ center둜 λ°”κΎΈκ³  μ „ 과정을 λ°˜λ³΅ν•œλ‹€.

 

이진 κ²€μƒ‰μ˜ μ’…λ£Œ 쑰건

λͺ¨λ‘ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •ν•˜μ—¬ μ§„ν–‰ν•œλ‹€.

 

center == key 일 경우

이 κ²½μš°λŠ” start와 end μ‚¬μ΄μ˜ center의 κ°’κ³Ό key의 값이 같을 λ•Œ μ΄λ―€λ‘œ 검색을 μ’…λ£Œν•œλ‹€.

 

start == end 일 경우

검색 쑰건을 λ°˜λ³΅ν•œ κ²°κ³Ό μ–Έμ  κ°€λŠ” start 와 end ν¬μΈνŠΈκ°€ κ°™μ•„μ§€λŠ” κ²½μš°κ°€ λ°œμƒν•  수 μžˆλŠ”λ° κ·Έ κ²½μš°λŠ” key 값이 ν•΄λ‹Ή λ°°μ—΄ μ•ˆμ— μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 뜻 μ΄λ―€λ‘œ 검색을 μ’…λ£Œν•œλ‹€.

μ†ŒμŠ€μ½”λ“œ

 

 

λŒ“κΈ€