검색 선형 검색 : 배열의 각 항목을 한 인덱스씩 순차적으로 접근하면서 동작 function linearSearch(array, n) { for (var i = 0; i < array.length; i++) { if (array[i] == n) { return true; } } return false; } console.log(linearSearch([1,2,3,4], 4)); console.log(linearSearch([1,2,3,4], 5)); 시간복잡도: O(n) 이진 검색 : 중간 값을 확인해 원하는 값보다 해당 중간 값이 큰지 작은지 확인한다. 원하는 값이 중간 값보다 작은 경우 이진 검색 알고리즘은 중간 값보다 작은 쪽을 검색하고 원하는 값이 중간 값보다 중간 값보다 큰 경우 중간 값보다 큰..
집합은 정렬되지 않은 유일한 항목들의 그룹이다. var exampleSet = new Set(); exampleSet.add(1); // exampleSet: Set(1) {1} exampleSet.delete(1); // true exampleSet.has(1); // false 기타 유틸리티 함수 function intersectSets (setA, setB) { var intersection = new Set(); for (var elem of setB) { if (setA.has(elem)) { intersection.add(elem); } } return intersection; } var setA = new Set([1, 2, 3, 4]), setB = new Set([2, 3]); inter..
재귀 호출은 운영체제의 메모리 스택에 저장돼야 하는데, 재귀함수는 이러한 재귀 호출로 인해 발생하는 추가적인 공간 복잡도 비용을 지닌다. 피보나치수열 기본 function getNthFibo(n) { if (n = endPos) { return true; } if (word.charAt(beginPos) != word.charAt(endPos)) { return false; } else { return isPalindromeHelper(word, beginPos + 1, endPos - 1); } } isPalindromeRecursive('hi'); // false isPalindromeRecursive('iii'); // true isPalindromeRecursive('ii'); // true is..
DOM 메모리 누수 DOM 항목을 가리키는 변수가 이벤트 콜백 외부에 선언된 경우 해당 DOM 항목을 제거하더라도 해당 항목은 여전히 메모리에 남게 된다. // DOM leak: var one = document.getElementById("one"); var two = document.getElementById("two"); one.addEventListener('click', function(){ two.remove(); console.log(two); // will print the html even after deletion }); // fix for above var one = document.getElementById("one"); one.addEventListener('click', func..
배열에서 2개더한게 weight인 배열 index 찾기(hash table 사용) function findSumBetter(arr, weight) { var hashtable = {}; for (var i = 0, arrLength = arr.length; i < arrLength; i++) { var currentElement = arr[i], difference = weight - currentElement; // check the right one already exists if (hashtable[currentElement] != undefined) { return [i, hashtable[currentElement]]; } else { // store index hashtable[differen..
데이터 과학 데이터 과학은 데이터를 수집한 후 분석을 통해 데이터를 정확히 이해함으로써 그 속에 숨겨진 새로운 지식을 발견하고 이를 문제 해결에 활용하는 모든 과정의 활동을 의미하며, 그러한 활동을 지원하는 수단이나 기술을 포함한다. 데이터 과학의 목표를 보다 잘 이해하기 위해서는 데이터가 지혜가 되는 과정을 설명할 때 많이 언급되는 DIKW(Data-Information-Knowledge-Wisdom) 계층 구조를 살펴볼 필요가 있다. 데이터는 관찰하거나 측정하여 수집한 사실이나 값을 의미한다. 이러한 데이터를 상황에 대한 이해를 바탕으로 목적에 맞게 가공한 것이 정보다. 그리고 규칙과 패턴을 통해 찾아낸 의미 있고 유용한 정보가 지식이다. 최종적으로 지식에 통찰력을 더해 새롭고 창의적인 아이디어를 도..
객체지향 데이터베이스 일반적으로 많이 사용되는 관계 데이터베이스는 현실 세계의 데이터를 관계 데이터 모델의 구조적 특성을 만족하면서 정규화 규칙을 따르는 릴레이션으로 저장하고 관리한다. 사용자는 SQL을 사용해 관계 데이터베이스를 정의하거나 조작 및 제어할 수 있다. 하지만 다양한 응용 분야에 부적합하다는 문제가 제기되었다. 이런 이유로 다른 형태의 데이터베이스를 구축하기 위해 새로운 데이터 모델을 연구해왔는데, 이 중 하나가 객체지향 데이터 모델이다. 객체지향 데이터 모델 객체지향 데이터 모델은 객체와 객체 식별자, 속성과 메서드, 클래스, 클래스 계층 및 상속, 복합 객체 등을 지원하는 객체지향 개념에 기반을 둔 데이터 모델이다. 객체와 객체 식별자 객체object는 현실 세계에 존재하는 개체를 추상..
보안 데이터베이스의 보안을 유지하여 데이터를 보호하는 방법은 고려하는 측면에 따라 다양하게 구분할 수 있지만, 일반적으로 다음 세 가지 유형으로 구분한다. 1. 물리적 환경에 대한 보안 : 자연 재해 등으로부터 보호 2. 권한 관리를 통한 보안 : 권한이 없는 사용자로부터 보호 3. 운영 관리를 통한 보안 : 권한이 있는 사용자로부터 보호 권한 관리 권한 관리의 개념 데이터베이스 관리 시스템은 데이터베이스의 보안을 유지하기 위해, 계정이 발급된 사용자가 로그인에 성공했을 경우에만 데이터베이스에 접근이 가능하도록 하는 접근 제어 기능을 기본으로 제공한다. 그러므로 모든 사용자는 자신에게 발급된 계정으로 로그인해야 데이터베이스에 접근할 수 있다. 로그인을 통해 데이터베이스에 접근할 수 있더라도 데이터베이스 ..