ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2-1 데이터 입출력 구현
    자격증/정처기 2023. 5. 16. 05:44

    1.자료구조

    -어떠한 자료구조에서도 필요한 모든 연산들을 처리하는 것이 가능하다

     

    1)배열

    - 동일한 자료형, 크기의 데이터를 순서대로 나열

    - 정적 = 데이터 추가가 어렵고 데이터 삭제시 빈공간으로 남아 메모리 낭비

    - 반복에 유리, 동일한 변수 이름

    - arr[2]에서 arr은 변수 이름, 2는 첨자(subscript)

     

    2)선형리스트

    - 연속 리스트(배열): 배열의 삽입과 삭제 개선 (밀도 1)

    - 연결 리스트(포인터): 삽입과 삭제에 용이, 포인터 = 공간 효율이나 속도가 구림

    *노드 = data + link(포인터)

     

    3)스택

    - 후입선출 (LIFO)

    - 재귀호출, DFS, 전/후위표기, 퀵정렬

    - 함수 호출 제어, 복귀주소, 인터럽트, 수식 계산, 컴파일러 언어 번역

    - Push땐 TOP을 1 증가시키고 Overflow 체크,

    - Pop땐 Underflow 체크후 TOP을 1 감소

     

    4)큐

    - 선입선출 (FIFO)

    - 운영체제 스케쥴링에 사용

    - F = Front, R = Rear

    *Rear은 다음 삽입 위치가 아닌 마지막 자료 위치

    +데큐(deque): 양방향 = 스택으로도, 큐로도 쓸 수 있음

     

    5)그래프

    - 그래프 G, 정점 V = Vertex, 간선 E = Edge

    - 방향, 무방향 그래프로 나뉨

    - 정점이 N개면 최대 간선수는 N(N-1), N(N-1)/2

    - 통신망 + 이항관계, 연립방정식, 화학구조식, 무향선분

    *트리: 싸이클이 없는 크래프

    *그래프와 트리는 비선형구조

     

     

    2.트리

    - 정점(Node)와 선분 = 가지(Branch) = 링크 = 서브트리로 구성

    - Root = "근"

    - 잎(Leaf) = 단말(Terminal) 노드

    - 차수(degree) - 아래로 연결된 노드 수

    *트리의 차수는 degree중 최대값

     

    트리 운행(Traversal)

    C랑 H 제외

    1)Preorder: Root - Left - Right  //  ABE-FJK-DGLI  *루트가 무조건 시작

    2)Inorder: Left - Root - Right  //  E-B-JFK-A-LGDI

    3)Postorder: Left - Right - Root  //  E-JKF-B-LGIDA  *루트가 무조건 마지막

     

    수식 표기

    1)전위(prefix) +AB

    2)중위(infix) A+B

    3)후위(postfix) AB+

    *전/후위는 스택으로 처리 가능, 중위는 둘중 하나로 변경

     

     

    3.정렬

     

    1)삽입 정렬

    - N번째 키를 이전 N-1개의 키와 전부 비교

    - N번째 키를 맞는 위치로 옮기고 나머지를 뒤로 한칸씩 옮김

    85624

    85624 -> [58]624

    58624 -> [568]24

    56824 -> [2568]4

    25684 -> [24568]

     

    2)쉘 정렬

    - 삽입 정렬의 개선판

    - 매개변수 H칸 떨어져 있는 키의 값을 비교

    - 평균 O(N^1.5), 최악 O(N^2)

     

    3)선택 정렬

    - N번째 키를 이후 (M-N)개의 값중 최소값과 교환

    85624

    [85624] -> [25684] 

    2[5684] -> 2[4685]

    24[685] -> 24[586]

    245[86] -> 24568

     

     

    4)버블 정렬

    - 서로 인접한 값을 비교

    - 플래그 비트를 통해 정렬이 완료 됐는지 체크해야함

    85624 -> [58]624 -> 5[68]24 -> 56[28]4 -> 562[48] -> 5[26]48 -> 52[46]8 -> [25]468 -> 2[45]68

     

    5)퀵정렬

    - 기준값 피봇을 중심으로 분할, 정복

    - 가장 빠름, 스택 필요

     

     

    6)힙 정렬

    -전이진 트리 = 완전 이진 트리 = Complete Binary Tree를 힙 트리로 변환

    *힙: 부모의 값이 자식보다 항상 큼/작음

    *루트가 최대값이면 max heap, 최소값이면 min heap

     

    7)2-WAY 합병 정렬 (Merge Sort)

    85624913

    [85] [62] [49] [13]

    [58] [26] [49] [13]

    [2568] [1349]

    [12345689]

    *퀵은 분할이, 머지는 합병이 중심

     

    8)기수 정렬 (Radix = Bucket sort) 

    -큐를 이용하여 자릿수별로 정렬

     

     

    시간 복잡도

    삽입, 선택, 버블 // 평균, 최악 O(n^2)

    힙, 머지 // 평균 최악 O(nlog2n)

    퀵 평균O(nlog2n), 최악 O(n^2)

     

     

     

    4.검색

    1)이분 검색

    1~100에서 50 찾기

    (1+100)/2 = 50.5 = 50 -> 15는 50보다 작으므로 1~49 탐색

    *정렬되어있어야 함

     

    2)해싱

    - 버킷: 하나의 주소를 갖는 파일의 한 구역

    *버킷 크기 = 같은 주소에 포함 가능한 레코드(슬롯) 수

    - Synonym: 충돌(Collision)로 인해 같은 주소를 갖는 레코드의 집합

     

    해싱 함수

    1.제산법: 키(K)를 소수(Q)로 나눈 나머지를 주소값으로 사용

    *Q는 테이블 크기보다 큰 소수중 가장 작은 값

    2.제곱법: 키 값을 제곱 후 중간 값 사용 (256 -> 256*256 = 262144 -> 26[21]44 -> 21 사용)

    3.폴딩법: 키 값을 여러 부분으로 나눠 더하거나 XOR

    4.기수 변환: 진수 변환 (10진수 64를 16진수 6*16+4*1 = 100으로 변경)

    5.대수적 코딩법:키 값을 계수로 한 다항식 -> 해시 다항식으로 나눠 얻은 값 사용

    6.숫자 분석법: 키 값의 분포를 고려, 분포가 고른 자리값을 골라 사용

    7.무작위법: 랜덤

     

    + 개방 주소법(순차), 폐쇄 주소법(포인터)

     

     

     

    5.DBMS

    -통합, 저장, 운영, 공용 데이터

    -필수 기능: 정의(D), 조작(M), 제어(C)

    정의: 모든 자료형 정의

    조작: 검색, 삽입, 삭제 등 기능(인터페이스 수단) 제공

    제어: 정확한 수행(무결성,안정성), 보안(권한), 병행 제어(동시 접근)

     

    DDL(정의) - 스키마나 테이블을 정의 / 변경 / 삭제 할때 사용

    DML(조작) - SELECT(검색), INSERT, UPDATE, DELETE

    DCL(제어) - 보안, 회복, 병행제어

     

     

    스키마

    - DB의 구조와 제약조건에 관한 명세(Specification) 집합

    - 데이터 개체(엔티티), 속성, 관계, 제약 조건에 대해 정의

    - 사용자 관점에 따라 구분됨

     

    1)외부 스키마 - 개인의 필요에 따른 정의

    2)개념 스키마 - 전체적인 논리 관점, 하나만 존재

    3)내부 스키마 - 물리적 저장장치 관점

     

    트랜잭션

    - 논리적 수행의 단위

    - TCL: COMMIT or ROLLBACK (-> SAVEPOINT)

     

    절차형 SQL

    - 효율은 떨어지지만 연속적인 제어 가능

    - 프로시저(일련의 작업 수행, 함수와 비슷), 트리거 (이벤트마다 관련 작업 수행), 사용자 정의 함수 (리턴값 무조건 있음)

     

    데이터 접속

    - SQL 맵핑: SQL문을 직접 입력해 DB에 접속 -> JDBC, ODBC, Mybatis

    - ORM: (객체 지향 프로그래밍의) 객체와 (관계형) DB의 데이터를 연결 -> JPA, Hibernate, Django

     

     

    '자격증 > 정처기' 카테고리의 다른 글

    2-3 어플리케이션 테스트 관리  (0) 2023.05.17
    2-2 소프트웨어 패키징  (0) 2023.05.16
    1-4 인터페이스 설계  (0) 2023.05.14
    1-3 어플리케이션 설계  (0) 2023.05.14
    1-2 화면 설계  (0) 2023.05.14
Designed by Tistory.