자스에서의 구문은 세미콜론(;)으로 끝난다. 표현식은 어떤 값을 생성하기 위해 평가되지만 구문은 어떤 일을 하기 위해 실행된다. 표현문 자스 구문 중에서 가장 간단한 형태는 부수 효과가 있는 표현식이다. 할당문이 이러한 표현문의 주요 항목에 속한다. 표현문의 다른 종류로 함수 호출이 있다. 복합문과 빈 구문 하나의 표현식 안에 여러 표현식을 합칠 때에는 쉼표(,) 연산자를 사용한다. 복합문은 자스 문법에서 하나의 구문이 있어야할 곳에 여러 구문을 사용할 수 있게 한다. 빈 구문은 정 반대다. 선언문 var와 function은 각각 변수와 함수를 선언하는 선언문이다. 이러한 선언문은 각각 변수나 함수 이름 같은 식별자를 정의한다. 선언문에서 정의된 식별자는 프로그램 내에서 사용할 수 있고, 이 식별자를 통..
원시 표현식 가장 간단한 형태의 표현식은 원시 표현식으로 다른 표현식을 포함하지 않은 그 자체다. 자스에서 원시 표현식은 상수나 리터럴 값 또는 특정 언어 키워드들과 변수 참조를 말한다. ex) 1.23 "hello" /pattern/ true false null this 객체와 배열의 초기화 표현식 객체와 배열 초기화 표현식은 말 그대로 새로운 객체나 배열을 값으로 하는 표현식이다. 이들 초기화 표현식은 종종 객체 리터럴과 배열 리터럴이라고 한다. 하지만 일반 리터럴과는 달리, 이들은 원시 표현식이 아니다. 이들 리터럴은 특정 프로퍼티와 원소의 값을 지정하는 수많은 하위 표현식을 포함할 수 있기 때문이다. 배열 리터럴 : [], var matrix=[[1,2],[3,4]]; 객체 리터럴 : var p=..
데이터 타입 : 프로그램 언어로 다룰 수 있는 값의 종류 타입은 크게 원시 타입과 객체 타입으로 나뉜다. 원시 타입 : 숫자, 텍스트의 나열(문자열), 불리언, null, undefined null과 undefined는 원시 값이긴 하지만 하나의 형식으로 봐야 한다. 객체 타입 : 이름과 값을 갖는 프로퍼티의 집합 일반적인 객체는 순서가 없는 값들의 집합이며, 각 값에는 이름이 지정되어 있다. 자바스크립트는 배열이라는 특별한 종류의 객체를 정의한다. 배열은 순서가 있는 값들의 집합이며, 각 값에는 번호(index)가 부여된다. 자바스크립트는 함수라는 특별한 객체를 정의한다. 함수는 실행 코드를 가지고 있는 객체로서, 실행 코드를 수행하고 계산된 값을 반환한다. 생성자 함수 : 새로 생성된 객체를 (new..
문자집합 Unicode 문자 집합을 사용해 작성 대소문자 구분 자바스크립트는 대소문자를 구분한다.(HTML은 대소문자를 구별하지 않는다.) 공백, 개행, 제어 문자 자바스크립트는 프로그램 코드 내에 토큰들 사이에 있는 공백들을 무시한다.(예외) 유니코드 이스케이프 시퀀스 자바스크립트에서는 16비트 유니코드 글자를 표현할 수 있는 일련의 6자리 ASCII 문자열 시퀀스를 정의한다. \u로 시작, 16진수 숫자 네개를 사용 유니코드 정규화 유니코드는 한 문자를 인코딩하는 방법이 하나 이상일 수 있다. ex) é는 유니코드 글자 \u00E9를 사용할 수도 있지만 ASCII 글자 e에 강조 표식인 \u0301을 결합해서 사용 가능 주석 // 한 줄짜리 주석 /* /* 여러 줄짜리 주석 리터럴 리터럴은 프로그램에..
그래프의 이해와 종류 쾨니히스베르크의 다리 문제 모든 다리를 한번씩만 건너서 처음 출발한 장소로 돌아올 수 있는가? 정점 별로 연결된 간선의 수가 모두 짝수여야, 간선을 한번씩만 지나서 처음 출발했던 정점으로 돌아올 수 있다. 무방향 그래프 : 방향성 x 방향 그래프 : 방향성 o 완전 그래프 : 각각의 정점에서 다른 모든 정점을 연결한 그래프 가중치 그래프 : 간선에 가중치 정보를 두어서 그래프를 구성(이동시간) 부분 그래프 : 원 그래프의 일부 정점 및 간선으로 이뤄진 그래프를 뜻한다. 그래프의 집합 표현 그래프 G의 정점 집합 : V(G)={A,B,C,D} 그래프 G의 간선 집합 무방향 E(G)={(A,B),(A,C),(A,D)} 방향 E(g)={,,} 그래프를 구현하는 두 가지 방법 인접 행렬 기..
빠른 탐색을 보이는 해쉬 테이블 AVL 트리는 탐색과 관련하여 매우 만족스러운 성능을 보였다. 하지만 탐색 키의 비교 과정을 거치면서 찾는 대상에 가까워지는 방식이기 때문에, 원하는 바를 단번에 찾아내는 방식이라고 말하기는 어렵다. 이럴 때 도입을 검토할 수 있는 자료구조가 바로 테이블이다. AVL 트리의 탐색 연산 : O(log2 n)의 시간복잡도 테이블의 시간 복잡도 : O(1) 해쉬 함수 : 넓은 범위의 키를 좁은 범위의 키로 변경하는 역할 충돌 : 서론 다른 두 개의 키가 해쉬 함수를 통과하였는데 그 결과가 같은 경우 좋은 해쉬 함수의 조건 : 데이터가 전체 영역에 고루 분포되어 있는 경우 ex) Person.h #ifndef __PERSON_H__ #define __PERSON_H__ #defi..
이진 탐색 트리의 문제점 : 이진 탐색 트리의 연산은 O(log2 n)의 시간 복잡도를 가진다. 그런데 균형이 맞지 않을수록 O(n)에 가까운 시간 복잡도를 보인다. 이러한 이진 탐색 트리의 단점을 해결한 트리를 가리켜 균형 잡힌 이진 트리라 하며, 그 종류 중 AVL 트리를 선택한다. 균형인수 = 왼쪽 서브 트리의 높이 - 오른쪽 서브 트리의 높이 LL회전 : LL상태 : 균형 인수 +2가 연출된 상태. RR회전 : RR상태 : 균형 인수 -2가 연출된 상태. LR회전 : LR상태 : 자식 노드가 왼쪽으로 하나, 그리고 이어서 오른쪽으로 하나 달린 상태. RR회전을 통해 LL상태로 RL회전 : RL상태 : 자식 노드가 오른족으로 하나, 그리고 이어서 왼족으로 하나 달린 상태. LL회전을 통해 RR상태로
탐색은 알고리즘보다 자료구조에 더 가까운 주제이다. 왜냐하면 효율적인 탐색을 위해서는 어떻게 찾을까만 고민해서는 안 되고 효율적인 탐색을 위한 저장방법이 무엇일까를 고민해야되기 때문이다. 보간탐색 이론적으로 보간 탐색과 이진 탐색의 유일한 차이점은 탐색의 대상을 선정하는 방법이다. InterpolSearch.c #include int ISearch(int ar[], int first, int last, int target) { int mid; //if(first > last) //return -1; // -1의 반환은 탐색의 실패를 의미 if(ar[first]>target || ar[last]
