μ ν νμ(Linear Search) μκ³ λ¦¬μ¦ or μμ°¨ νμ(Sequential Search) μκ³ λ¦¬μ¦ :
μμκ° μ§μ λͺ¨μμΌλ‘ λμ΄μ§ λ°°μ΄μμ μνλ ν€ κ°μ κ°λ μμλ₯Ό λ§λ λ κΉμ§ 맨 μλΆν° μμλλ‘ νμ
μ λ°°μ΄μμ μμλ₯Ό νμνλ©΄
κ° 5λ₯Ό νμνλ©΄ Linear[2] μμ νμμ μ±κ³΅νμ§λ§
κ° 3μ νμνλ©΄ Linearμ κ° 3μ΄ μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ νμμ μ€ν¨νλ€.
μ μμλ₯Ό 보면 λ°°μ΄ νμμ μ’ λ£ μ‘°κ±΄μ΄ λ€μ 2κ°μμ μ μ μλ€.
쑰건 1 : νμν κ°κ³Ό κ°μ μμλ₯Ό λ°κ²¬ν κ²½μ° (νμ μ±κ³΅)
쑰건 2 : νμν κ°μ λ°κ²¬νμ§ λͺ»νκ³ λ°°μ΄μ λμ μ§λκ° κ²½μ° (νμ μ€ν¨)
λ°°μ΄μ μμ μκ° nκ° μΌ λ 쑰건 1,2λ₯Ό νλ¨νλ νμλ νκ· n/2ν μ΄λ€. => O(n)
λ©μλ seqSearch() : λ°°μ΄ a μ μ²μλΆν° λκΉμ§ μ΄ nκ°μ μμ μ€μμ κ°μ΄ keyμΈ μμλ₯Ό μ ν νμ
맀κ°λ³μ : int[] a, int n, int key
λ°νκ° : ν€ κ°μ΄ μ¬λ¬κ° μ‘΄μ¬ν κ²½μ°, μ²μ λ°κ²¬ν μμμ μΈλ±μ€λ₯Ό, ν€ κ°μ΄ μ‘΄μ¬νμ§ μμΌλ©΄ -1μ λ°ν
- whileλ¬ΈμΌλ‘ ꡬνν κ²½μ°
쑰건 1 : a[i] == key (νμ μ±κ³΅)
쑰건 2 : i == n (νμ μ€ν¨)
int seqSearch(int[] a, int n, int key) {
int i = 0;
while(true) {
if(i == n) {
return -1;
}
if(a[i] == key) {
return i;
}
i++;
}
}
- forλ¬ΈμΌλ‘ ꡬνν κ²½μ°
쑰건 1 : a[i] == key (νμ μ±κ³΅)
쑰건 2 : forλ¬Έ μ’ λ£ (νμ μ€ν¨)
int seqSearch(int[] a, int n, int key) {
for(int i = 0; i < n; i++) {
if(a[i] == key) {
return i;
}
}
return -1;
}
보μ΄λ² :
μ ν νμμ λ°λ³΅ν λ λ§λ€ 쑰건 1κ³Ό 2λ₯Ό λͺ¨λ νλ¨. νμνκΈ° μ νμνκ³ μ νλ ν€ κ°μ λ°°μ΄μ μμ 맨 λμ μΆκ°. ν€ κ°μ μ°Ύμ§ λͺ»νμ λλ₯Ό νλ¨νλ μ’ λ£ μ‘°κ±΄ 2κ° νμνμ§ μκ² λ§λ€μ΄ νλ¨ νμλ₯Ό λ°μΌλ‘ μ€μΈλ€.
κ° 5λ₯Ό νμνλ©΄ νμμ μ±κ³΅νμ§λ§
κ° 3μ νμνλ©΄ λ°°μ΄μ 맨 λ§μ§λ§μμ ν€ κ°μ λ°κ²¬, νμμ μ±κ³΅νμ§λ§ λ°°μ΄μ κΈ°μ‘΄ κ°μ΄ μλ μ§μ μΆκ°ν 보μ΄(Sentinel)μ΄λ€.
쑰건 1 : a[i] == key (νμ μ±κ³΅)
+ return i == n ? -1 : i (μ°Ύμ κ°μ΄ μλ λ°°μ΄μ λ°μ΄ν°μΈμ§ μΆκ°ν 보μ΄μΈμ§ νλ¨)
static int seqSearchSen(int[] a, int n, int key) {
int i = 0;
a[n] = key;
while(true) {
if(a[i] == key) {
break;
}
i++;
}
return i == n ? -1 : i ;
}
μ ν νμ Linear Search : O(N)