λΉ μ€ νκΈ°λ² / λ²λΈ μ λ ¬ μκ³ λ¦¬μ¦ / λ°°μ΄μ μ€λ³΅ κ° μλμ§ νμΈνλ λ°©λ² / μ ν μ λ ¬ μκ³ λ¦¬μ¦ / λΉ μ€μ μν / κ°μ λΆλ₯μ μνλ μκ³ λ¦¬μ¦μ ν¨μ¨μ± λΉκ΅
μκ³ λ¦¬μ¦ μ½λ ꡬν (μλ°μ€ν¬λ¦½νΈ)
[TIL] 211010 μ°Έκ³
μλ‘κ² μκ² λ λ΄μ©λ€ μμ£Όλ‘ μ 리ν¨
π κ²½μ μλ£ κ΅¬μ‘°μ μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λλ₯Ό νννλ νμμ μΈ λ°©λ²
π λΉ μ€ νκΈ°λ²μΌλ‘ μ€μ μ°μ΄λ μλ리μ€λ₯Ό λΆμν΄μ κ²½μ μλ£ κ΅¬μ‘°μ μκ³ λ¦¬μ¦ μ€ μ΅μ μ κ³ λ₯Ό μ μλ€.
π λΉ μ€ νκΈ°λ²μ μΌλ°μ μΌλ‘ 'μ΅μ μ μλ리μ€'λ₯Ό μλ―Ένλ€.
π‘ λ°μ΄ν°κ° μ¦κ°ν μλ‘, λ¨κ³ μλ μ΄λ»κ² λ³νλκ°?
λ°μ΄ν°κ° μ¦κ°ν΄λ λ¨κ³ μλ νμ μΌμ
ex. λ°°μ΄ μ½κΈ° / λ°°μ΄ λ§¨ λ μ½μ , μμ
λ°μ΄ν°κ° μ¦κ°ν λ§νΌ λ¨κ³ μκ° μ¦κ°
ex. μ£Όμ΄μ§ μκ° μμμΈμ§ νλ³νλ μκ³ λ¦¬μ¦
cf. μμ : 1λ³΄λ€ ν° μμ°μ μ€ 1κ³Ό μκΈ° μμ λ§μ μ½μλ‘ κ°μ§λ μ
p.69
Pythonλ‘ κ΅¬νλ μ½λ β JavaScriptλ‘ μμ
function isPrimeNumber (num) {
for (let i = 2; i < num; i++) {
if (num % i === 0) {
return false;
}
return true;
}
}
console.log(isPrimeNumber(13)); // true
νμ μκΈ° μμ μ, 2λΆν° μμν΄μ μκΈ° μμ λ°λ‘ μ΄μ μκΉμ§λ‘ λλλ κ³Όμ μ κ±°μΉλ€.
μ¦, ν¨μμ μΈμλ‘ μ λ¬λλ μ«μκ° μ¦κ°νλ©΄ κ·Έ μ¦κ°λΆκ³Ό λΉλ‘νμ¬ λ¨κ³ μλ μ¦κ°νλ―λ‘, μ μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λλ O(N)μ΄λ€.
λ°μ΄ν°κ° 2λ°°μ© μ¦κ°ν λλ§λ€ 1λ¨κ³ μΆκ°
π λΉ μ€λ₯Ό μ¬μ©ν΄ μμ±ν μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ νκ°νκ³ , ν¨μ¨μ±μ λμ΄κΈ° μν΄ μκ³ λ¦¬μ¦μ μμ νκ³ μ ν¨
π‘ μ λ ¬ μκ³ λ¦¬μ¦ > λ¨μ μ λ ¬ μκ³ λ¦¬μ¦ > λ²λΈ μ λ ¬
μ λ ¬ μκ³ λ¦¬μ¦
μ λͺ¨λ λ€μμ λ¬Έμ λ₯Ό ν΄κ²°νλ€.
μ λ ¬λμ§ μμ λ°°μ΄μ΄ μ£Όμ΄μ‘μ λ, μ΄λ»κ² μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν μ μμκΉ?μ λ ¬ μκ³ λ¦¬μ¦ μ€μλ
λ¨μ μ λ ¬ μκ³ λ¦¬μ¦
μ΄ μλ€.
μ΄λ μ΄ν΄νκΈ° μ¬μμ λΆμ¬μ§ μ΄λ¦μΌ λΏ, μ€μ λ‘λ μ΄λ³΄λ€ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ΄ μ‘΄μ¬νλ€.λ¨μ μ λ ¬ μκ³ λ¦¬μ¦μλ
λ²λΈ μ λ ¬ / μ ν μ λ ¬ / μ½μ μ λ ¬
μκ³ λ¦¬μ¦μ΄ μλ€.
κ° ν¨μ€μ€λ£¨λ§λ€, μ λ ¬λμ§ μμ κ° μ€ κ°μ₯ 'ν° κ°'μΈ λ²λΈμ΄, μ¬λ°λ₯Έ μμΉλ‘ κ°κ² λλ€.
cf. ν¨μ€μ€λ£¨(passthrough)λ?
ν κ°μ λ°μ΄ν°λ₯Ό μ μ리μ μμΉμν€λ μκ³ λ¦¬μ¦μ μ£Όμ μ μ°¨
μ²μ ν¨μ€μ€λ£¨μμ κ΅νμ μ μ΄λ ν λ² μννλ€λ©΄, λ€μ ν¨μ€μ€λ£¨λ₯Ό μνν΄μΌ νλ€.
p.81
PythonμΌλ‘ ꡬνλ μ½λ β JavaScriptλ‘ μμ
function bubbleSort (arr) {
// μ΄λ€ μΈλ±μ€κΉμ§ μμ§ μ λ ¬λμ§ μμλμ§
let unsorted_until_index = arr.length - 1;
// λ°°μ΄μ μ λ ¬ μ¬λΆ
let sorted = false;
let swap;
// ν¨μ€μ€λ£¨
while (!sorted) {
sorted = true;
// λΉκ΅ & κ΅ν
for (let i = 0; i < unsorted_until_index; i++) {
if (arr[i] > arr[i+1]) {
swap = arr[i];
arr[i] = arr[i+1];
arr[i+1] = swap;
sorted = false;
}
}
unsorted_until_index = unsorted_until_index - 1;
}
return arr;
}
const arr1 = [4, 3, 2, 1]
console.log(bubbleSort(arr1)); // [1, 2, 3, 4]
μ²μ ν¨μ€μ€λ£¨μμ κ΅νμ μ μ΄λ ν λ² μννλ€λ©΄(sortedκ° falseκ° λ¨), λ€μ ν¨μ€μ€λ£¨λ₯Ό μνν΄μΌ νλ€.(sortedκ° falseμ΄λ―λ‘)
ν¨μ€μ€λ£¨λ₯Ό ν λ² μνν λλ§λ€, μ λ ¬λμ§ μμ κ° μ€ κ°μ₯ ν° κ°μ΄ μ¬λ°λ₯Έ μμΉμ μ λ ¬λλ―λ‘, unsorted_until_indexμ΄ 1μ© κ°μνλ€.
unsorted_until_indexκ° 0μ΄ λλ©΄, for ꡬ문μ 쑰건μ(i < unsorted_until_index)μ λ§μ‘±νμ§ λͺ»ν΄ for ꡬ문μ μ€νν μ μμΌλ―λ‘ while λ¬Έμ μ’ λ£νκ² λλ€.
'μ²μλΆν° μ λ ¬λμ΄ μλ λ°°μ΄'μ κ²½μ°,
unsorted_until_indexκ° 0μ΄ μλλ―λ‘ μ²μμ for ꡬ문μ μ§μ
μ νμ§λ§,
if ꡬ문μ 쑰건μμΈ arr[i] > arr[i+1] μ λ§μ‘±νμ§ λͺ»ν΄ if κ΅¬λ¬Έμ΄ μ€νλμ§ μμΌλ―λ‘ sorted = trueμΈ μ±λ‘ while λ¬Έμ μ’
λ£νκ² λλ€.
λ²λΈ μ λ ¬ μκ³ λ¦¬μ¦μλ λ μ’
λ₯μ λ¨κ³, λΉκ΅ & κ΅ν
μ΄ ν¬ν¨λμ΄ μλ€.
λΉκ΅
λ°μ΄ν°κ° Nκ°μΌ λ
첫 λ²μ§Έ ν¨μ€μ€λ£¨μμ N-1λ² λΉκ΅ν΄μΌ νκ³
λ λ²μ§Έ ν¨μ€μ€λ£¨μμ N-2λ² λΉκ΅ν΄μΌ νκ³
μΈ λ²μ§Έ ν¨μ€μ€λ£¨μμ N-3λ² λΉκ΅ν΄μΌ νκ³
...
λ§μ§λ§ ν¨μ€μ€λ£¨μμ 1λ² λΉκ΅ν΄μΌ νλ€.
μ μμ μ κ²½μ°, λ°μ΄ν°κ° 4κ°μ΄λ―λ‘ μ΄ 3+2+1 μ¦, 6λ² λΉκ΅λ₯Ό ν΄μΌ νλ€.
κ΅ν
λ°μ΄ν°κ° Nκ°μΌ λ
μ΅μ
μ μλ리μ€(λ°°μ΄μ΄ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬λμ΄ μλ κ²½μ°)λ₯Ό κ°μ νλ©΄
κ΅νμ 맀 λΉκ΅λ§λ€ ν΄μΌ νλ€
μ μμ (μ΅μ μ μλ리μ€)μ κ²½μ°, λ°μ΄ν°κ° 4κ°μ΄λ―λ‘ λΉκ΅ν νμλ§νΌ 6λ² κ΅νμ ν΄μΌ νλ€.
λ°μ΄ν°κ° 4κ°μΌ λ, λΉκ΅ & κ΅νμ μ΅λ λ¨κ³ μ
λ 12κ°κ° λλ€.
κ·Έλ°λ°, λ°μ΄ν°μ κ°μκ° 5, 10, 15, 20κ°...λ‘ λμ΄λλ©΄, μ΅λ λ¨κ³ μλ κΈκ²©ν λμ΄λλ€. (λ°μ΄ν° κ°μ, μ΅λ λ¨κ³ μ: 5κ°, 20κ° / 10κ°, 90κ° / 15κ°, 210κ° / 20κ°, 380κ°)
μ 리νλ©΄, λ°μ΄ν°μ κ°μκ° Nκ°μΌ λ, λλ΅ N^2 λ¨κ³κ° κ±Έλ¦°λ€.
λ°λΌμ λ²λΈ μ λ ¬μ ν¨μ¨μ±μ O(N^2)
λΌκ³ ν μ μλ€.
μ΄λ μ’μ μκ³ λ¦¬μ¦μ μλλ―λ‘ μμ ν μ μλμ§ κ³ λ―Όν΄λ΄μΌ νλ€.
μ½λ ꡬν
p.86
function hasDuplicateValue (arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (j !== i && arr[i] === arr[j]) {
return true;
}
}
}
return false;
}
const arr1 = [5, 1, 1, 4];
console.log(isNested(arr1)); // true
λΉ
μ€(Big-O)λ λ°μ΄ν°λμ λΉλ‘ν΄ μκ³ λ¦¬μ¦μ μΌλ§λ λ§μ λ¨κ³κ° νμνμ§λ₯Ό μΈ‘μ νλ λꡬμ΄λ€.
λ°λΌμ, μ μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ μμ보기 μν΄ μ ν¨μλ₯Ό λΉ
μ€λ‘ νννλ €λ©΄ μλ μ§λ¬Έμ λ΅ν΄μΌ νλ€.
μ ν¨μμ μΈμλ‘ λ°μ΄ν° Nκ°λ₯Ό ν¬ν¨νλ λ°°μ΄μ΄ μ£Όμ΄μ‘μ λ, μ΅μ μ μλ리μ€μμ μΌλ§λ λ§μ λ¨κ³κ° 걸리λκ°?
μ ν¨μμμ μκ³ λ¦¬μ¦μ ν¬ν¨λ λ¨κ³μ μ νμ
λΉκ΅
μ΄λ€.μ΅μ μ μλ리μ€λ, λ°°μ΄μ΄ μ€λ³΅ κ°μ ν¬ν¨νμ§ μλ κ²½μ°μ΄λ€.
μ΄ κ²½μ°, iλ₯Ό μ¬μ©ν΄ λ°°μ΄ λ΄ μμλ₯Ό λͺ¨λ μνν λλ§λ€ jλ₯Ό μ¬μ©ν΄ λ°°μ΄ λ΄ μμλ₯Ό λͺ¨λ μνν΄μΌ νλ€.
μ¦, λ°°μ΄μ μμμ κ°μκ° Nκ°μΌ λ,N^2(λ°°μ΄μ μμμ κ°μ x λ°°μ΄μ μμμ κ°μ) λ¨κ³
κ° κ±Έλ¦°λ€.β μ€μ²© 루ν μκ³ λ¦¬μ¦μ ν¨μ¨μ± : O(N^2)
μ ν¨μμ λ¨κ³ μλ₯Ό κΈ°λ‘νλ μ½λλ₯Ό μΆκ°νλ©΄ μλμ κ°λ€.
function hasDuplicateValue (arr) {
let steps = 0;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
steps++;
if (j !== i && arr[i] === arr[j]) {
return true;
}
}
}
console.log(steps);
return false;
}
const arr1 = [5, 1, 2, 4];
console.log(hasDuplicateValue(arr1)); // 16 false
p.88
function hasDuplicateValue (arr) {
const IndexIsNumberAlreadySeen = [];
for (let i = 0; i < arr.length; i++) {
if (IndexIsNumberAlreadySeen[arr[i]] === undefined) {
IndexIsNumberAlreadySeen[arr[i]] = 1;
} else {
return true;
}
}
return false;
}
const arr1 = [5, 9, 2, 9];
console.log(hasDuplicateValue(arr1)); // true;
λ§μ°¬κ°μ§λ‘ μ μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ μμλ³΄λ €λ©΄
μ ν¨μλ₯Ό λΉ
μ€λ‘ νννκΈ° μν΄
μ΅μ
μ μλ리μ€μΌ λ μκ³ λ¦¬μ¦μ νμν λ¨κ³ μλ₯Ό μμλ΄μΌ νλ€.
μ ν¨μμμ μκ³ λ¦¬μ¦μ ν¬ν¨λ λ¨κ³ μ€ μ£Όμ μ νμ
λΉκ΅
μ΄λ€.
(μ΄λ μ½μ μ μ€μμΉ μκ² λ³Έλ€. λ€μμ μ€λͺ ν κ².)μ΅μ μ μλ리μ€λ, λ°°μ΄μ΄ μ€λ³΅ κ°μ ν¬ν¨νμ§ μλ κ²½μ°μ΄λ€.
μ΄ κ²½μ°, iλ₯Ό μ¬μ©ν΄ λ°°μ΄ λ΄ μμλ₯Ό λͺ¨λ μνν΄μΌ νλ€.
μ¦, λ°°μ΄μ μμμ κ°μκ° Nκ°μΌ λ,Nλ¨κ³
κ° κ±Έλ¦°λ€.β μμ ν μκ³ λ¦¬μ¦μ ν¨μ¨μ± : O(N)
μ ν¨μμ λ¨κ³ μλ₯Ό κΈ°λ‘νλ μ½λλ₯Ό μΆκ°νλ©΄ μλμ κ°λ€.
function hasDuplicateValue (arr) {
let steps = 0;
const IndexIsNumberAlreadySeen = [];
for (let i = 0; i < arr.length; i++) {
steps++;
if (IndexIsNumberAlreadySeen[arr[i]] === undefined) {
IndexIsNumberAlreadySeen[arr[i]] = 1;
} else {
return true;
}
}
console.log(steps);
return false;
}
const arr1 = [5, 9, 2, 8];
console.log(hasDuplicateValue(arr1)); // 4 false
π‘ (1)μ (2)λ‘ μμ ν¨μΌλ‘μ¨ μ½λκ° μ’ λ ν¨μ¨μ μΌλ‘ μλνλλ‘ μ΅μ ννλ€.
O(N^2) β O(N)
π λΉ μ€ νκΈ°λ²μΌλ‘λ λ μκ³ λ¦¬μ¦μ μλκ° κ°μλ°, μ€μ λ‘λ μ΄λ νμͺ½μ΄ λ λΉ λ₯Έ κ²½μ°κ° μμ
π μ΄μ²λΌ λΉ μ€ νκΈ°λ²λ§μΌλ‘ μ μλ―Έν μ°¨μ΄λ₯Ό λ°κ²¬ν μ μλ μκ³ λ¦¬μ¦λ€μ ν¨μ¨μ±μ νκ°νκ³ μ ν¨
π‘ μ λ ¬ μκ³ λ¦¬μ¦ > λ¨μ μ λ ¬ μκ³ λ¦¬μ¦ > μ ν μ λ ¬
κ° ν¨μ€μ€λ£¨λ§λ€, μ λ ¬λμ§ μμ κ° μ€ κ°μ₯ 'μμ κ°'μ΄, μ¬λ°λ₯Έ μμΉλ‘ κ°κ² λλ€.
p.100
λ΄κ° μμ±ν μ½λ
λ§μ μ€ μμλλ° μ± μ νμΈνλ νλ¦° κ±° κ°λ€.
λ΄ μ½λλ arr[i]κ° κ° ν¨μ€μ€λ£¨μ μ΅μκ°μ΄λΌ for 루νμ if κ΅¬λ¬Έμ΄ μ€νλμ§ μμμλ(β λΉκ΅x) μΈλ°μμ΄ κ°μ μ리(μ«μ)λΌλ¦¬μ κ΅νμ μΌμ΄λλ€.(β κ΅νo)
μ¦, arr[i]κ° κ·Έ μμ²΄λ‘ κ° ν¨μ€μ€λ£¨μ μ΅μκ°μΈ κ²½μ°(μ΅μκ°μ΄ μ΄λ―Έ μ¬λ°λ₯Έ μμΉμ μλ κ²½μ°)λ₯Ό κ³ λ €νμ§ μμλ€.
π₯ μΆκ°!
λ€λ§, μ΄μ°¨νΌ λΉ μ€λ (μμ κ³ λ €x / κ°μ₯ λμ μ°¨μλ§ κ³ λ €o)μ΄λ―λ‘, μ ν μ λ ¬μ κ²½μ° μ΅μκ°μ κ³ λ €νλ μ νλ λΉ μ€λ‘ νκΈ°λλ ν¨μ¨μ±μλ μ°¨μ΄κ° μλ€.
function selectionSort (arr) {
// ν¨μ€μ€λ£¨
for (let i = 0; i < arr.length - 1; i++) {
let min = arr[i];
let minIndex = i; // κ° ν¨μ€μ€λ£¨ μ΅μκ°μ μΈλ±μ€ minIndex
// λΉκ΅
for (let j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
minIndex = j;
}
}
// κ΅ν
arr[minIndex] = arr[i];
arr[i] = min;
}
return arr;
}
const arr1 = [9, 2, 5, 1];
console.log(selectionSort(arr1)); // [1, 2, 5, 9]
μ± μ μ°Έκ³ ν΄ μμ
κ΅ν λΆλΆμ if (minIndex !== i) λ₯Ό μΆκ°ν ν min λ³μ μ΄λ
function selectionSort (arr) {
// ν¨μ€μ€λ£¨
for (let i = 0; i < arr.length - 1; i++) {
let minIndex = i; // κ° ν¨μ€μ€λ£¨ μ΅μκ°μ μΈλ±μ€ minIndex
// λΉκ΅
for (let j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
// κ΅ν
if (minIndex !== i) {
let min = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = min;
}
}
return arr;
}
const arr1 = [9, 2, 5, 1];
console.log(selectionSort(arr1)); // [1, 2, 5, 9]
μ ν μ λ ¬ μκ³ λ¦¬μ¦μλ λ μ’
λ₯μ λ¨κ³, λΉκ΅ & κ΅ν
μ΄ ν¬ν¨λμ΄ μλ€.
λΉκ΅
λ°μ΄ν°κ° Nκ°μΌ λ
첫 λ²μ§Έ ν¨μ€μ€λ£¨μμ N-1λ² λΉκ΅ν΄μΌ νκ³
λ λ²μ§Έ ν¨μ€μ€λ£¨μμ N-2λ² λΉκ΅ν΄μΌ νκ³
μΈ λ²μ§Έ ν¨μ€μ€λ£¨μμ N-3λ² λΉκ΅ν΄μΌ νκ³
...
λ§μ§λ§ ν¨μ€μ€λ£¨μμ 1λ² λΉκ΅ν΄μΌ νλ€.
κ΅ν
κ° ν¨μ€μ€λ£¨λ§λ€ μ΅λ 1λ²μ κ΅νμ΄ μΌμ΄λλ€.
μ΅μκ°μ΄ μ΄λ―Έ μ¬λ°λ₯Έ μμΉμ μλλμ λ°λΌ κ΅νμ μ νκ±°λ κ΅νμ ν λ² νκΈ° λλ¬Έμ΄λ€.
μ΅μ μ κ²½μ°λ₯Ό κ°μ ν΄λ λ°μ΄ν°κ° Nκ°μΌ λ, κ΅νμ N - 1λ²λ°μ μΌμ΄λμ§ μλλ€.
μμμ μ΄ν΄λ΄€λ―μ΄, μ ν μ λ ¬μ λ¨κ³ μκ°, λ²λΈ μ λ ¬μ λ¨κ³ μλ³΄λ€ ν¨μ¬ μ λ€. μμΈν λ°μ Έλ³΄λ©΄, λλ΅ 2λ°° μ λ μ λ€. κ·Έλ¬λ―λ‘ μ ν μ λ ¬
μ΄ λ²λΈ μ λ ¬λ³΄λ€ λ ν¨κ³Όμ μμ μ μ μλ€.
κ·Έλ¬λ, μ ν μ λ ¬κ³Ό λ²λΈ μ λ ¬μ λΉ
μ€λ‘ νννλ©΄, λ λ€ O(N^2)
μ΄λ€.
μ ν μ λ ¬μ μκ° λ³΅μ‘λλ O(N^2 / 2)λ‘ ννν΄μΌ λ§μ κ² κ°μ§λ§, κ·Έλ μ§ μλ€.
λΉ
μ€ νκΈ°λ²μ μμλ₯Ό 무μνκΈ° λλ¬Έμ΄λ€.
λ§μ°¬κ°μ§λ‘, μ€μ λ‘λ O(N)λ³΄λ€ 100λ°° λλ¦° O(100N)μ΄λΌ ν΄λ, λΉ μ€ νκΈ°λ²μΌλ‘λ λκ°μ΄ O(N)μ΄λ€.
κ·Έλ λ€λ©΄ λΉ μ€ νκΈ°λ²μ μν°λ¦¬μΈ κ²μΈκ°?
κ·Έλ μ§ μλ€.
λΉ
μ€ νκΈ°λ²μ 'λ€λ₯Έ' λΆλ₯μ μνλ μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ λΉκ΅ν λ λ§€μ° μ μ©νλ€.
μλ₯Ό λ€μ΄, O(100N)κ³Ό O(N^2)μ λΉκ΅νλ©΄
νΉμ μμ μ΄μ κΉμ§λ O(100N)μ΄ O(N^2)λ³΄λ€ λ리μ§λ§,
νΉμ μμ μ΄νλΆν°λ κ³μν΄μ
O(100N)μ΄ O(N^2)λ³΄λ€ λΉ λ₯΄λ€.
λ°λΌμ, O(100N)μ΄ O(N)μΌλ‘ νμλλ€ νλλΌλ
λ°μ΄ν°κ° λ§μ λ
O(N)μ O(N^2)λ³΄λ€ νμ λΉ λ₯΄λ€κ³ ν μ μλ€.
κ·Έλ¬λ, μ ν μ λ ¬κ³Ό λ²λΈ μ λ ¬μ κ²½μ°μ²λΌ 'κ°μ' λΆλ₯μ μνλ μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ λΉκ΅νκΈ° μν΄μλ μμμμ²λΌ λ μμΈν λΆμν΄μΌ νλ€.
π‘ 'κ°μ' λΆλ₯μ μνλ μκ³ λ¦¬μ¦μ ν¨μ¨μ± λΉκ΅
ex. λ μμλ§λ€ νλ κ±Έλ¬ νλλ₯Ό λ½μ μ λ°°μ΄ μμ±
ν΄λΉ μκ³ λ¦¬μ¦μλ λ μ’ λ₯μ λ¨κ³,룩μ (lookup) & μ½μ
μ΄ ν¬ν¨λμ΄ μλ€.p.108
Rubyλ‘ κ΅¬νν μ½λ β JavaScriptλ‘ μμ
첫 λ²μ§Έ λ°©λ²
λ°μ΄ν°κ° Nκ°μΌ λ, Nλ²μ 룩μ κ³Ό N/2λ²μ μ½μ β O(1.5N)
λΉ μ€ νκΈ°λ²μΌλ‘ ννν λ, O(N)function makeNewArray (arr) { const newArray = []; for (let index in arr) { // 룩μ (lookup) if (index % 2 === 0) { newArray[index/2] = arr[index]; // μ½μ } } return newArray; } const arr1 = [5, 3, 7, 4, 6]; console.log(makeNewArray(arr1)); // [5, 7, 6]
λ λ²μ§Έ λ°©λ²
λ°μ΄ν°κ° Nκ°μΌ λ, N/2λ²μ 룩μ κ³Ό N/2λ²μ μ½μ β O(N)
첫 λ²μ§Έ λ°©λ²λ³΄λ€ λΉ λ₯΄λ€function makeNewArray (arr) { const newArray = []; let index = 0; for (let i = 0; i < arr.length / 2; i++) { newArray[i] = arr[index]; // 룩μ & μ½μ index += 2; } return newArray; } const arr1 = [5, 3, 7, 4, 6]; console.log(makeNewArray(arr1)); // [5, 7, 6]