728x90
반응형

컴퓨터(Computer Science) 205

Floating point, 부동소수점 [컴퓨터구조]

이번에는 Floating Point에 대해서 알아보겠다. 실수 표현의 예를 들어보자 ** scientific notation 이란 소수점 옆에 한자리만 표현하는 것을 의미한다. 그 한자리는 1~9의 범위를 갖는다. ++ 만약 0이면 .. 앞자리로 당길 수 있음에도 안 당긴거니까 잘못표현한 방식 A number in scientific notation that has no leading 0s is called a normalized number, which is the usual way to write it. ( 그니까 쓸 데없는 0이 앞으로 오지 않는 것을 의미한다. ) 기본 개념을 알고가자 우리는 normalized된 것, scientific notation 된 숫자를 다룰 것이다. 10진법으로 표현된..

[C언어] 자료구조 -정렬(sorting) - 4, 퀵정렬

정말 정렬이 빨라서 Quick이다. 퀵정렬... 앞서 말한 정렬보다 훨씬 빠르다. 정렬알고리즘은 항상 N이 커질 때 그 진가를 발한다. 1,3,5,7,9,10,8,6,4,2 Divide & Conquer를 이용, 분할 정복을 이용한 알고리즘이다. Pivot, 피벗을 설정해서 정렬의 기준을 잡고 시작한다. ++보통 첫번째 원소를 Pivot으로 정한다. ex) (1) 3,5,7,9,10,8,6,4,2 즉, 피벗보다 큰 숫자를 왼쪽부터 찾기시작하고 피벗보다 작은 숫자를 오른쪽부터 찾는다. ** 만약 엇갈리지 않고 찾는다면 그 숫자의 위치를 서로 바꿔준다. (1) /3/,5,7,9,10,8,6,4,2 3찾았고 1보다 작은 걸 찾지 못했다. 결국 1에 도달한다. 작은 숫자의 인덱스가 큰숫자의 인덱스보다 작아지면 ..

[C언어] 자료구조 -정렬(sorting) - 3, 삽입정렬

삽입 정렬은 딱 느낌에도 삽입해서 만드니까 삽입정렬이다. 하지만 역시 느리다. 말로 표현하자면 #include int main(void){ int i, j, temp; int array[10] = {1,3,5,7,9,10,8,6,4,2}; for(i = 0; i = 0 && array[j] > array[j + 1]) { //이미 정렬되어 있는 상태라면 while문을 안들어감 temp = array[j] //크면 옆의 인덱스와 값을 바꾼다. 때문에. 바꿔진 값에 대해서도 while문 안에서 계속 비교해서 위치를 알려준다. array[j] = array[j+1] array[j+1] = temp; j--; } } return 0; ..

[C언어] 자료구조 -정렬(sorting) - 2, 버블정렬

이번에 버블정렬은 가장 가까운 것과 비교해 작으면 왼쪽으로 크면 오른쪽으로 보내는 정렬이다. 구현하기는 딱봐도 쉽다. 하지만 딱봐도 정렬 드럽게 안될 것 같다. #include int main(void){ int i, j, temp; int array[10] = {1,3,5,7,9,10,8,6,4,2}; for(i = 0; i array[j+1]){ // 다음 인덱스와 비교해서 왼쪽에 있는 값이 더 크면 temp = array[j] array[j] = array[j+1] array[j+1] = temp; // 오른쪽으로 보냄 // 결국 맨 오른쪽 값이 가장 큰 값이 됨. } } } return 0; } 각 싸이..

[C언어] 자료구조 -정렬(sorting) - 1, 선택정렬

정말 정말 고대하고 기대하고 기다렸던 매우 아주 심히 중요한 정렬을 배울 단계과 왔다. 사실 해싱에서 살짝 건드리기는 했지만 해싱은 조금 달라보여서 다르게 정리했고 여기서는 진짜 데이터를 정렬하는 시간을 가져보자. 정렬이란 어떠한 기준을 삼아서 오름차순 또는 내림차순으로 자료를 나열하는 것이다. 어떠한 기준이란 대부분(숫자)가 대신한다. 여기서 다시 레코드랑 필드를 다시 정의해볼건데 복습이라고 생각하자 ㅎㅎ 어차피 데이터 배우면 항상 나옴 결국 저기 key 값이 기준이 되어서 정렬을 하는 거시다 ㅎㅎ 그런데 어떻게 정렬할 것이냐????????? 를 이제부터 알아볼 건데 여러가지의 방법이 있다. 그니까 정렬마다 장단점이 있어서 그렇게 여러 방법을 고안해낸 것이다. 모든 경우에 대해 최적인 정렬 알고리즘은 ..

데이터베이스, 트랜잭션(Transaction) - 3(장애와 복구)

이 글에서는 트랜잭션 장애(failure)와 복구(recovery)에 대해서 알아보겠다. 살다보면 원치 않는 일을 마주하는 것처럼 DBMS도 정상적인 수행을 하다가도 장애가 발생할 수 있다. 원인도 각양각색이다. -소프트웨어 장애와 하드웨어 장애 하지만 우리는 하드웨어 장애라면 자신있다 -> 걍 새거로 교체하면 다 되는 것이다 ㅎㅎ 근데 소프트웨어적 에러는 우리가 참 처리하기 힘들다. 장애가 일어났을 경우 장애 이전의 상태로 복원하는 과정인 복구를 진행하기도 어렵다. 왜 위에 말이 나온건진 모르겠지만 그렇다면 우선 DB에서의 종류는 무엇이 있을까?? (3가지가 있다) -트랙잭션 장애 트랜잭션 내의 논리적 오류나 잘못된 입력 데이터 또는 시스템 내의 자원 부족으로 인한 트랜잭션의 중단이다. -시스템 장애 ..

데이터베이스, 트랜잭션(Transaction) -2(동시성 제어)

저번 글에서 상태 전이도를 보면서 트랜잭션에 대해서 동시성 제어를 해야한다고 말했다. 그것부터 이어서 가보자 동시성 제어(Concurrency Control) 동시성 제어는 꼭 필요하다. 컴퓨터 프로그래밍에서 무엇을 배웠든 간에 빠지지 않고 등장하는 주제 중 하나다. 혼자 사용하면 거의 필요 없지만 항상 다중 사용자 DBMS를 염두에 두고 설계한다.(왜? 돈벌어야지 ㅎ) -> 하나의 트랜잭션이 완료되지 않은 상태에서 다른 트랜잭션이 실행 가능?? 트랜잭션 간의 간섭이 발생하여 일관성이 깨지면 안되니까 제어를 하는 것이다. 바로 그것이 동시성 제어. 무슨 연산이길래 서로 간섭을 한다는 것일까??? 알아보자 역시나 읽고 쓰는 문제다. ㅎㅎ 내가 다 읽기 전에 누가 내용을 바꿔 써버리면 잘못읽게 되니까? re..

데이터베이스, 트랜잭션(Transaction) -1 (개념과 정의)

데이터베이스 모델도 설계를 다했으니 이제 진짜로 사용하는 단계에 돌입해야 한다. 하지만 그 전에 데이터베이스의 논리적 연산 단위인 트랜잭션에 대해 알 필요가 꼭 있다. 우선 응용프로그램에 대해서 살펴보자 일반 응용 프로그램의 구성 - 명령어들의 집합(메서드나 클래스 단위로 구성) 하지만 데이터베이스들은 다른 방식으로 응용프로그램을 바라봐야 한다. -> 세부 프로그램이 작업 단위가 된다. 데이터베이스 응용 프로그램의 구성 - 업무처리에 관련된 세부 프로그램 단위 - 세부 프로그램들은 데이터베이스에 대한 연산(검색/삽입/삭제/수정)으로 구성 - 예를 들면 은행에서 계좌이체, 대출, 예금, 출금 업무 다시 트랜잭션의 본 뜻은 - 논리적인 작업 단위를 구성하는 연산들의 집합 - 실행 중 멈추거나 중단되지 않는 ..

데이터베이스의 물리적 저장 구조와 인덱스

** 물리적 저장구조와 인덱스는 뗄레야 뗄 수 없는 조합이므로 같이 배워보자 관계형 데이터 모델에서 데이터베이스는 테이블의 집합이고 테이블은 레코드들의 집합이다. 최종적으로 디스크에 저장되어 관리해야하는데 저장 매체의 관점으로 살펴보는 것이다. 바로 그것이 물리적 저장 구조다. 물리적 데이터베이스는 운영체제가 관리하는 파일 시스템의 기능들을 이용하는데 DBMS 와 파일 시스템과의 관계는 아래 그림과 같다. ** 입출력 단위는 블록(Block)이 된다. -> 우리가 다루는 데이터 수준 블록이란 하나 이상의 레코드들이 저장된 단위를 말한다. 파일이란 하나 이상의 테이블들이 저장된 단위를 말한다. DBMS는 물리적 저장소가 아니라는 것이다. 도대체 어떻게 블록 내에 레코드를 저장하는 것일까?? 이런 SQL문이..

728x90
반응형