까먹은 지식 437

[알고리즘] 힙 정렬 - 다시 정리 필요

힙 정렬(Heap Sort) 항상 가장 큰 원소가 루트 노드가 되고 삭제 연산을 수행하면서 항상 루트 노드의 원소를 삭제하며 반환 힙(Heap) 이란? 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기위해, 완전 이진트리(Complete Binary Tree)를 기본으로 한 자료구조 힙 종류 최대 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰 힙 최소 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 항상 작은 힙

[알고리즘] 퀵정렬 - 피봇 중심으로 왼쪽, 오른쪽 정리

퀵 정렬 기준 값을 중심으로 왼쪽과 오른쪽 부분집합으로 정렬 기준 값을 피봇(Pivot)이라고 함 첫번째 가운데 혹은 마지막에 위치한 원소 선택 분할 기준값(피봇) 중심으로 2개의 부분집합으로 분할 정복 기준값 기준 작은 원소 왼쪽, 큰 원소 오른쪽으로 부분집합의 크기가 1일 될때까지 반복 규칙 Left는 피봇보다 작으면 통과, 크면 정지 Right는 피봇보다 크면 통과, 작으면 정지 예시 첫 번째 원소 52를 피봇이라고 하자 52(피봇), 33, 87, 47, 99, 4, 65, 26, 77 33을 Left로 표시, 77은 Right로 표시 52와 33(Left) 비교해보니 33이 작다 그러니 Left를 87로 52와 77(Right) 비교해보니 77이 크다 그러니 Right을 26으로 이동 현재 상황..

[데이터베이스] 데이터의 세계, 데이터 모델링

데이터의 세계 3중 세계관 실세계 -> 개념의 세계 -> 컴퓨터의 세계 개체 -> 개체 타입 -> 레코드 사실 -> 추상적 표현 ->(데이터 모델링)논리적 구조 개체(Entity)의 개념 유용한 정보를 저장 관리하기 위한 것 사람, 장소, 물건, 사건 개념 저장 물질일 필요 없다 지속적인 관심을 가지고 있어야 하는 대상 동질성을 지닌 개체 또는 행위의 집합 정의의 조건 우리가 관리하고자 하는 것인가 집합의 개념인지 개체들 간의 동질성이 있는지 다른 개체와 확연히 구분되는 독립성을 가졌는가 개체가 행위를 한 집합인지 개체의 성질 업무에 필요하고 관리하고자 하는 정보 식별자에 의해 식별이 가능한가 영속적으로 존재하는 개체 업무 프로세스에서 그 개체를 반드시 이용 속성을 포함해야 된다 하나 이상의 다른 개체와..

[데이터베이스] 무결성 제약조건: 개체, 참조, 도메인

무결성 제약조건 관계형 모델 구조: 릴레이션(2차원 테이블) 연산: 관계대수(relational Algebra) 제약조건: 무결성 제약조건(Integrity Constraint) 모든 관계형 데이터 모델에 적용되는 일반적이고 기본적인 제약 이 제약을 기초로 세부적이고 특수한 제약을 생성 가능 스키마에 정의된 무결성 제약조건을 위반하지 않아야된다 개체 무결성 참조 무결성 도메인 무결성 개체 무결성(Entity Integrity) 의미: 서로 다른 두 튜플은 같을 수 없다 정의: 기본키 값은 널(Null)을 가질 수 없다. 튜플을 개체(Entity)를 나타낸다 개체는 본질적으로 구분 가능 구별할 수 있는 식별자가 필요하다 기본키는 이들을 유일하게 구별할 수 있는 기능을 제공 기본키: 유일성, 최소성을 만족하..

[데이터베이스] 후보키, 수퍼키, 기본키, 대체키 그리고 외래키

릴레이션: 튜플의 집합 키(Key) 란? 몇 개의 속성만 이용하면 모든 튜플을 식별할 수 있다. 튜플을 유일하게 식별할 수 있는 속성 집합 키의 종류 후보키, 기본키, 대체키: 유일성, 최소성 만족하는 속성 집합 수퍼키: 유일성만 만족하는 속성 집합 후보키(Candidate Key) 튜플의 유일성을 유지시키는 최소 속성 집합 유일성: 서로 다른 두 튜플의 속성 집합 K의 값이 같지 않는다 최소성: K는 서로 다른 두 튜플을 식별하기위한 최소한 속성의 집합 수퍼키(Super Key) 일반적으로 후보키는 수퍼키의 부분 집합 기본키(Primary Key) 하나의 릴레이션에 후보키가 여러 개 있을 수 있다 여러 개의 후보키 중 DBA가 지정한 1개의 키 대체키(Alternative Key) 후보키에 기본키를 제..

[JavaScript] 클래스(class)는 함수다

클래스란? 클래스는 특별한 함수(function)다. 오브젝트를 만들어주는 템플릿이다. class User { constructor(name) { this.name = name; } sayHi() { alert(this.name); } } alert(typeof User); //function이 나온다 여기서 class User { ... }이 한일을 알아보자 1. function 이름 User란 놈을 만든다. function의 코드는 constructor 메소드에서 가져온다(constructor 메소드를 안만들어주면 비어있다고 가정된다). 2. class 메소드를 저장해준다, User.prototype 안에 있는 sayHi 처럼 new User 오브젝트가 만들어지고, 안의 메소드를 부르면, 프로토타입 ..

[알고리즘] 셸 정렬 - 나눠서 삽입정렬을 하다

셸 정렬 주어진 자료에 매개 변수 h 길이를 갖는 부분집합으로 나누고, 삽입정렬 수행 매개변수 h값을 줄이며 반복, 매개 변수 h 값이 1이 되면 정렬 완성 부분집합 만드는 방법 부분집합 기준 간격을 h에 저장 한단계씩 h 값을 감소시키고 셸 정렬 호줄 h1가 1이 될 때까지 반복 예시 44, 88, 62, 38, 19, 49, 27, 73가 있다 매개변수를 원소 개수의 반으로 하는 경우 전체 원소 8개니까 매개 변수 h는 4 시작! 4간격씩 떨어져 있는 녀석들을 모아서 부분집합을 만든다 그 말은 44에서 오른쪽으로 4번 떨어진 19를 하나의 부분집합, 88에서 4번 떨어진 49를 부분집합으로 ... 나머지도 똑같이 부분집합 만들때 중요한 포인트 부분집합 할 때 삽입 정렬을 한다 이렇게 만들어진다 19,..

[알고리즘] 병합 정렬 - 분할해서, 정렬하며 합치다

병합정렬 여러개의 정렬된 자료를 병합해서 하나로 만든다 부분집합으로 분할하고, 각 부분집합에서 정렬을 완료하고 정렬된 부분집합을 결합 2-way 병합: 2개의 정렬된 자료를 1개로 병합 n-way 병합: n개의 정렬된 자료를 1개로 병합 2-way만 한번 알아보자 같은 크기의 부분집합 2개로 분할 부분집한 원소들 정렬 1개로 병합 예시 분할 단계 44, 88, 62, 38, 19, 49, 27, 73이 있다 이렇게 4개씩 2개로 나눠보자 44, 88, 62, 38 그리고 19, 49, 27, 73 왼쪽의 44, 88, 62, 38을 또 나눠보자 44, 88 그리고 62, 38 오른쪽 19, 49, 27, 73도 나눠보자 19, 49 그리고 27, 73 이제 각자 1개씩 나눈다 44 / 88 / 62 / ..

[알고리즘] 삽입 정렬 - 앞에서 꺼내서 뒤부터 비교

삽입 정렬 정렬이 필요한 요소를 뽑아서 적당한 곳에 삽입 두 부분으로 나눈다, 정렬된 집합과 정렬되지 않은 집합으로 가정 부분집합 S: 정렬된 원소 부분집합 U: 정렬안된 원소 U의 원소를 하나씩 꺼내서 S의 마지막 원소부터 비교해서 위치를 찾아 삽입 S는 하나씩 늘어나고, U는 하나씩 줄어든다 예시 S(정렬된 자료)= {44} U(정렬안된 녀석들) = {88, 62, 38, 19, 49} 먼저 U의 88을 S의 44와 비교후 88이 크니까 44뒤에 삽입 그럼 이렇게 된다 S = {44, 88} U = {62, 38, 19, 49} 그다음 62를 88과 비교한다, 62가 작으니 다음으로 다음 44와 비교한다, 62가 크니 44뒤에 집어넣는다 S = {44, 62, 88} U = {38, 19, 49} 이..

[알고리즘] 버블 정렬

버블 정렬 집합 내의 이웃 요소끼리 교환하는 정렬 1. 44 88 62 38 19 49로 시작! 44 88 비교 88이 커서 교환 x 88 62 비교 88이 커서 88을 뒤로 44 62 88 38 19 49로 다시 시작 88 38 비교 88이 커서 38 뒤로 이렇게 쭉 비교 44 62 38 19 49 88이 되면 88은 정렬 완료 2. 44 62 38 19 49 만 다시 시작 끝날때 까지 비교 레코드가 많이 불려진다. 별로 좋지 않아 보이네

728x90