선형 탐색은 n개의 배열에서 하나씩 조회하여 조건과 맞는지 확인하는 것이다.
선형탐색은 순서가 무작위인 정렬되지 않은 데이터일 경우 최적의 탐색 조건이다.
시간복잡도는 O(n)이다.
배열에 해당 아이디가 존재하는지 판별하기
-> 입력: 배열, 아이디
-> 출력: 존재하면 index 반환, 존재하지 않으면 false
function SearchLinear(arr, id){
for(let i = 0; i < arr.length; i++){
if(arr[i] === id) return i;
}
return false;
}
이진 탐색은 배열안에 요소들이 순서대로 정렬되어 있어야 한다. 정렬 안 되어있으면 못 씀 ..!
이진 탐색은 배열 길이의 반을 중간지점으로 지정하고 비교하고자 하는 값에따라 중간지점을 시작 지점 or 종료 지점으로 설정한다. 찾는 값이 나올때 까지 이 과정을 반복한다.
시간복잡도는 O(logn)이다.
배열에 해당 숫자가 존재하는지 판별한다.
-> 입력: 배열, 숫자
-> 출력: 존재하면 index 반환, 존재하지 않으면 false
function SearchBinary(arr, val){
let start = 0;
let end = arr.length-1;
if(arr[start] === val) return start;
if(arr[end] === val) return end;
while(start < end){
let middle = Math.floor((start + end) / 2);
if(arr[middle] === val) return middle;
if(arr[middle] < val){
start = middle;
}else{
end = middle;
}
}
return false;
}
음 .. 일단 이 코드는 문제가 있는데 ... 배열에 없는 숫자를 val로 입력하게 되면 무한반복되어 false가 나오지 않는다 .. 이유는 마지막쯤에 start, middle 같고 end보다 하나작기때문에 무한 반복이 되는데 ... 이거는 뒤에 강의에서 나오니 좀 더 살펴봐야겠다.
일단! 중요한건 반씩 잘라서 버려버리니까 정렬된 배열에서는 선형 검색보다 찾는 속도가 훨씬 빨라진다.
구글에서 개발한 웹페이지 성능 , 품질 개선할 수 있는 도구이고 지표를 나타내줌!
사용자가 특정 웹 페이지로 이동했을 때, 브라우저가 첫 번째 DOM의 콘텐츠를 렌더링하는 데 걸리는 시간을 나타낸다.
사용자가 페이지를 불러오기 시작하면서 스크롤을 내리지 않은 채 제일 먼저 볼 수 있는 영역에 존재하는 주요한 콘텐츠를 렌더링하는 데 걸리는 시간
Lighthouse 버전 6.0 이후로 사용되지 않는다. (작은 차이에도 매우 민감하게 측정되어 일관성 없는 결과를 초래하였기 때문이다.)
웹 페이지를 불러올 때, 콘텐츠가 시각적으로 표시되는 데까지 걸리는 시간
웹 페이지가 최소한으로 상호작용할 수 있는 상태가 될 때까지 걸리는 시간
Lighthouse 버전 6.0 이후로 사용되지 않는다. (Time To Interactive와 측정 기준이 유사했지만 의미 있는 결과값을 보이지 못했다.)
웹 페이지가 완전히 상호작용할 수 있는 상태가 될 때까지 걸리는 시간
사용자가 웹 사이트와 처음 상호작용(버튼 클릭)할 때부터 브라우저가 실제로 해당 상호작용에 응답할 수 있을 때까지 걸리는 가장 긴 시간
(즉, 최악의 경우를 측정)
웹 페이지가 사용자 입력에 응답하지 못하도록 차단된 총 시간
= 로딩 중 메인 스레드가 긴 시간동안 중단되어 응답을 받을 수 없을 정도로 걸린 시간
뷰포트에서 가장 큰 콘텐츠 요소가 화면에 렌더링 될 때까지 걸리는 시간