Skip to content

Latest commit

ย 

History

History
112 lines (73 loc) ยท 3.52 KB

File metadata and controls

112 lines (73 loc) ยท 3.52 KB

Searching Algorithms

Objectives

  • ์„œ์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•œ๋‹ค.
  • ๋ฐฐ์—ด์—์„œ Linear Searching ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด๋ณธ๋‹ค.
  • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ Binary Searching ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด๋ณธ๋‹ค.
  • ๋ฐฐ์—ด์—์„œ KMP String Searching ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด๋ณธ๋‹ค.

1. Linear Searching

How do we search?

๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์— ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•œ๋ฒˆ์”ฉ ํ™•์ธ ํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์žˆ๋Š” Linear Searching

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช‡ ๊ฐ€์ง€ Linear Searching ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

  • IndexOf
  • includes
  • find
  • ใ…‡findIndex

Linear Search ์˜์‚ฌ์ฝ”๋“œ

  1. ํ•จ์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ์ธ์ž๋Š” ๋ฐฐ์—ด๊ณผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด๋‹ค.
  2. Loop๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’๊ณผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๊ฐ™์€์ง€ ์ฒดํฌํ•œ๋‹ค.
    • ๊ฐ™์œผ๋ฉด ๊ทธ ๊ฐ’์„ return
    • ๋‹ค๋ฅด๋ฉด -1 ์„ return

Linear Search BIG O

  • Best Case : O(1) ์ œ์ผ ์ฒ˜์Œ์— ์žˆ๋Š” ๊ฒฝ์šฐ
  • Worst Case : O(n) ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ๊ฒฝ์šฐ
  • Average Case : O(n)

2. Binary Search

  • Binary Search ๋Š” ๋” ๋น ๋ฅธ ์„œ์นญ ํ˜•ํƒœ์ด๋‹ค.
  • ํ•œ๋ฒˆ์— ํ•œ๋ฒˆ์”ฉ ์š”์†Œ๋“ค์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „์ฒด์˜ ๋ฐ˜์”ฉ ์ œ๊ฑฐ ํ•ด ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • Binary Search ๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Binary Search Pseudocode

  • Binary Search ํ•จ์ˆ˜๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด๊ณผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.
  • ๋ฐฐ์—ด ์‹œ์ž‘์ ์— Left ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐฐ์—ด ๋์— Right ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • Left ํฌ์ธํ„ฐ๊ฐ€ Rightํฌ์ธํ„ฐ ์˜ค๊ธฐ์ „์—
    • ์ค‘๊ฐ„์— ํฌ์ธํ„ฐ๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ ๋‹ค.
    • ๋งŒ์•ฝ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์œผ๋ฉด ๊ทธ ๊ฐ’์„ index๋ฅผ returnํ•œ๋‹ค.
    • ๋งŒ์•ฝ ๊ฐ’์ด ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด, left ํฌ์ธํ„ฐ๋ฅผ ์˜ฌ๋ฆฐ๋‹ค.
    • ๊ฐ’์ด ๋„ˆ๋ฌด ํฌ๋ฉด, Right ํฌ์ธํ„ฐ๋ฅผ ๋‚ด๋ฆฐ๋‹ค.
  • ๋งŒ์•ฝ ์ฐพ๋Š” ๊ฐ’์ด ์—†์œผ๋ฉด return -1๋ฅผ ํ•œ๋‹ค.

Binary Search ์˜์‚ฌ์ฝ”๋“œ

  • ํ•จ์ˆ˜๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด๊ณผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.
  • ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ index๋กœ, ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ index์— ๋งŒ๋“ ๋‹ค.
  • ์™ผ์ชฝ ํฌ์ธํ„ฐ๊ฐ€ ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ ์˜ค๊ธฐ ์ „์— while ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.
    • ์ค‘๊ฐ„์— middle ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค.
    • ๋งŒ์•ฝ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์œผ๋ฉด ์ด index ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    • ๋งŒ์•ฝ ๊ฐ’์ด ์ž‘์œผ๋ฉด ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ค‘๊ฐ„๊นŒ์ง€ ์˜ฎ๊ธด๋‹ค
    • ๋ฐ˜๋Œ€๋กœ ๊ฐ’์ด ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ค‘๊ฐ„๊นŒ์ง€ ์˜ฎ๊ธด๋‹ค.
  • ๋งŒ์•ฝ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์—†์œผ๋ฉดreturn -1 ์„ ํ•œ๋‹ค.

Binary Search BIG O

  • Worst and Average Case : O(log n)
  • Best Case : O(1)

3. Naive String Search

  • ๊ธด ๋ฌธ์ž์—ด ์•ˆ์— ์ž‘์€ ๋ฌธ์ž์—ด์ด ๋ช‡๋ฒˆ ์žˆ๋Š”์ง€ ์„ธ๋Š” ๊ณผ์ •์„ ๊ฐ€์ •ํ•ด๋ณด์ž.
  • ๊ฐ„๋‹จํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ ๊ฐ๊ฐ์˜ ๋ฌธ์ž ์Œ์ด ๋ช‡๋ฒˆ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜์‚ฌ์ฝ”๋“œ

  1. ๊ธด ๋ฌธ์ž์—ด์— Loop ๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ์งง์€ ๋ฌธ์ž์—ด์—๋„ Loop ๋ฅผ ๋งŒ๋“ ๋‹ค
    • ๋งŒ์•ฝ ๊ธ€์ž๊ฐ€ ๋งž์ง€ ์•Š์œผ๋ฉด ์•ˆ์— ์žˆ๋Š” ๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜์˜จ๋‹ค.
    • ๋งŒ์•ฝ ๊ธ€์ž๊ฐ€ ๋งž์œผ๋ฉด Loop ๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•œ๋‹ค.
  3. ๋งŒ์•ฝ ์•ˆ์— Loop์™€ ๋ชจ๋‘ ์ผ์น˜ํ•˜๋ฉด ์นด์šดํ„ฐ๋ฅผ 1 ์ฆ๊ฐ€ํ•œ๋‹ค.
  4. count ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

์ฝ”๋“œ

const naiveSearch = (long, short) => {
  let count = 0;
  for (let i = 0; i < long.length; i++) {
    for (let j = 0; j < short.length; j++) {
      if (short[j] !== long[i + j]) break;
      if (j === short.length - 1) count++;
    }
  }
  return count;
};


naiveSearch('lorie loled','lol')