★★ 자료구조
1) 분류
- 선형 구조: 배열, 스택, 큐, 데크, 선형리스트
- 비선형 구조: 트리, 그래프
2) 배열
- 정적인 자료 구조로 기억 장소 추가가 어렵고 메모리 낭비 발생, 첨자 사용
- 반복적인 데이터 처리 작업에 적합한 구조, 동일한 이름의 변수를 사용해 처리가 간편
3) 스택
- 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이뤄짐(후입선출)
4) 큐
- 한족에서는 삽입, 한쪽에서는 삭제 작업
- 선입선출
- 시작과 끝을 표시하는 2개 의 포인터가 있음
- 운영체제의 작업 스케줄링에 사용함
5) 데크
- 양쪽 끝에서 삽입과 삭제작업
6) 선형 리스트
- 연속 리스트:
>연속되는 기억장소에 저장되는 자료구조
>연속된 빈 공간이 있어야 함.
>삽입 삭제 시 자료의 이동이 필요함
- 연결 리스트
>노드의 포인터 부분을 이용해 서로 연결
>노드의 삽입, 삭제 작업이 용이
>순차리스트에 비해 기억 공간의 효율이 좋지 않음
>접근 속도가 느림
7)트리★★
- 정점과 선분을 이용해 사이클을 이루지 않도록 구성한 그래프의 특수한 형태
- 노드, 근노드(맨위), 디그리(가지의 수), 단말 노드(마지막 노드), 자식 노드, 부모노드, 형재 노드,
-> 트리의 디그리(디그리 중 가장 많은 수) 자식이 3개인 게 제일 많으면 그게 트리의 디그리.
8) 그래프
- 방향 그래프: 선에 방향이 있음. 최대 간선수 = n(n-1)
- 무방향 그래프: 방향 없음. 최대 간선 수 = n(n-1)/2
★데이터베이스/DBMS
1) 데이터베이스★
- 공용데이터, 통합된 데이터, 운영 데이터(없어선 안 됨), 저장된 데이터
2) DBMS
- 데이터베이스를 관리해주는 소프트웨어
- 정의 기능(데이터 타입과 구조에 대한 정의, 이용 방식, 제약 조건 명시) -> DDL
- 조작 기능(인터페이스 수단을 제공하는 기능) - DML
- 제어 기능(무결성, 보안, 권한, 병행 제어)
★★데이터 입출력
1) SQL: 관계대수와 관계 해석을 기초로 한 혼합 데이터 언어
- 데이터 정의어(DDL): 도메인, 스키마, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 삭제할 때 사용하는 언어
- 데이터 조작어(DML): SELECT(검색), INSERT, UPDATE, DELETE로 저장된 데이터를 실질적으로 처리하는 데 사용되느 ㄴ언어
- 데이터 제어어(DCL): 무결성, 보안, 회복, 병행 제어 등을 정의하는 데 사용되는 언어
2) 데이터 접속: 프로그래밍 코드와 데이터베이스의 데이터를 연결하는 것
- SQL Mapping★: SQL을 직접 입력해 데이터에 접속하는 기술(JDBC, ODBC, MyBatis)
- ORM★: 객체와 관계형데이터베이스의 데이터를 연결하는 기술(JPA, Hibernate, Django)
3) 트랜잭션★★
- COMMIT: 변경 내용을 DB에 반영
- ROLLBACK: 비정상 적으로 종료되어 변경 작업 취소하고 이전 상태로 되돌리는 연산
- SAVEPOINT: 롤백한 저장점을 지정하는 명령어
- 트랜잭션의 특징(ACID)
> Atomicity 원자성: 모두에 반영 또는 반영하지 말아야 함.
> Consistency 일관성: 일관성 있는 상태 유지
> Isolation 동립성: 한개의 트랜잭션만 접근이 가능하여 간섭 불가
> Durability 영속성: 영구적으로 반영
★절차형 SQL
1) 개요
- 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL
- 프로그래밍 언어에 비해 효율이 떨어짐. 연속적 작업 처리에 적합
- BEGIN ~ END 형식으로 작성되는 블록 구조로 기능별 모듈화 가능
> 프로시저: 미리 저장한 SQL 작업 수행. 처리 결과는 한 개 이상의 값 혹은 반환을 아예 하지 않음
> 트리거: 입력, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업을 자동 수행
> 사용자 정의 함수: 일련의 작업을 연속적으로 처리함. 종료 시 예약어 RETURN으로 처리 결과를 단일값으로 반환
2) 테스트와 디버깅
- 테스트 전 구문 오류나 참조 오류의 존재 여부 확인
- 오류 및 경고 메시지가 상세히 출력되지 않으므로 SHOW 명령어 통해 내용 확인
- 실제로 SQL문을 주석으로 처리하고 디버깅
3) 쿼리 성능 최적화
- 성능 향상 위함
- 성능 측정도구(APM - Application Performance Management/Monitoring)을 사용해 최적화할 쿼리 선정
- 옵티마이저가 수립한 실행 계획을 검토하고 SQL 코드와 인덱스 재구성
★★개발 지원 도구
1) 통합 개발 환경(IDE) - 안드로이드 스튜디오, Eclipse etc
2) 빌드 자동화 도구: 소스코드 -> 소프트웨어로 변환하는 과정에 필요한 전처리, 컴파일 등의 작업 수행
> Ant: XML 기반 빌드 스크립트 사용, 개발자가 모든 것 정의, 스크립트 재사용 어려움, 자바의 공식적인 빌드 자동화 도구
> Maven: 컴파일과 빌드를 동시에 수행할 수 잇음, 의존성 설정하여 라이브러리 관리
> Gradle★: 안드로이드 스튜디오의 공식 빌드 도구, 의존성 활용, 그루비 기반, 태스크로 만든 후 태스크 단위로 실행, 빌드 캐시 기능 지원
> Jenkins: JAVA 기반의 오픈소스 형태로 가장 많이 사용됨. 서블릿 컨테이너에서 실행. 대부분의 형상 관리 도구와 연동
3) 기타 협업 도구
- 일정 관리 도구, 프로젝트 관리 도구, 정보 공유 및 커뮤니케이션 도구, 디자인 도구, 아이디어 공유 도구, 형상 관리 도구
★소프트웨어 패키징
- 사용자를 중심
- 기능 식별 -> 모듈화 -> 빌드 진행 -> 사용자 환경 분석 -> 패키징 및 적용 실험 -> 패키징 변경 개선 -> 배포
고려사항: 보안, 복잡성 및 비효율성, 암호화 및 알고리즘, 이기종 연동
★릴리즈 노트
- 소프트웨어의 고객과 공유하기 위한 문서
- 머리말: 릴리즈 노트 이름, 소프트웨어 이름
- 개요, 목적, 문제 요약, 재현 항목, 수정/개선 내용, 사용자 영향도, SW 지원 영향도, 노트, 면책 조항, 연락처
- 추가 버전 작성 시 고려사항: 모든 수정한 내용
- 순서: 모듈 식별 -> 릴리즈 정보 확인 -> 릴리즈 노트 개요 작성 -> 영향도 체크 -> 정식 릴리즈 노트 작성 -> 추가 개선 항목 식별
★★디지털 저작권 관리(DRM)
1) DRM 흐름★
- 콘텐츠 제공자, 분배자(유통), 소비자
- 패키저: 배포 가능한 형태로 묶어 암호화 프로그램
- 클리어링 하우스: 사용 권한, 라이선스 발급, 결제관리
- DRM 컨트롤러: 이용 권한을 통제하는 프로글매
- 보안 컨테이너: 전자적 보안 장치
2) DRM 기술요소★
- 암호화, 키 관리, 식별 기술, 저작권 표현, 암호화 파일 생성, 정책 관리, 크랙 방지, 인증
★★형상 관리
1) SCM(소프트웨어 패키징의 형상 관리)
- 형상 관리 = 개발 과정에서 소프트웨어 변경 사항을 관리하기 위해 개발된 일련의 활동. 개발의 전 단계에 적용되는 활동
2) 중요성: 변경 사항 체계적으로 추적하고 통제할 수 있음. 무절제한 변경 방지. 진행 정도 확인
3) 형상 관리 기능: 형상 식별(수정 및 추적), 형상 통제(변경 관리), 형상 감사(무결성), 형상 기록, 버전 제어
4) 관련 용어
- 저장소: 정보들 저장(레퍼지토리)
- 가져오기 임포트
- 체크아웃: 저장소에서 파일 받아오는 것
- 체크인: 저장소 파일 새로운 버전으로 갱신
- 커밋: 충돌을 알리고 diff 도구를 이용해 수정한 후 갱신 완료
- 동기화: 최신 버전으로 자신의 작업 공간 동기화
5) 소프트웨어 버전 등록 과정
- 가져오기 -> 인출 -> 예치(커밋) -> 동기화(업데이트) -> 차이(Diff)
6) 제품 소프트웨어의 형상 관리 역할★
- 형상 관리를 통해 이전 리비전이나 버전에 대한 정보에 접근 가능하여 배포본 관리에 유용
- 소스 수정 제한
- 동일한 프로젝트에 대해 여러 개발자 동시 개발 가능
★★버전 관리 도구
1) 공유 폴더 양식: 로컬 컴퓨터 공유 폴더에 저장. 변경사항 DB에 기록하며 관리 ex) SCCS, RCS, RVCS, QVCS
2) 클라이언트/서버 방식: 중앙 시스템에 저장 관리. ex) CVS, SVN
3) 분산 저장소 방식: 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식 ex) Git, Bitkeeper
4) SVN:(Subversion) CVS를 개선한 것. 서버는 유닉스. 오픈소스로 무료 사용
-> add, commit(서버 소스파일에 적용), update(클라이언트 소스파일에 적용), checkout, lock/unlock, import, export, info, diff, merge
5) Git★: 협업을 위해 버전을 공동 관리. 파일 변화를 스냅샷으로 저장
-> add, commit(로컬 저장소에 저장), branch, checkout(브랜치로 이동), merge, init(로컬 저장소 생성), remote add, push, fetch(변경 이력만을 로컬 저장소로 가져와 반영), clone, fork(원격 저장소로 복제)
★★애플리케이션 테스트
- 결함을 찾아내는 일련의 행위 또는 절차, 확인, 검증
- 기본 원리★
> 결함이 존재함을 밝히는 것. 완벽한 테스팅 불가능. 갭라 초기 테스팅 시작.
> 결함 집중★(파레토 법칙 20%의 모듈에서 80%의 결함 발견).
> 살충제 패러독스★(동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾아내지 못함)
> 테스팅은 정황에 의존적, 오류-부재의 궤변
★★애플리케이션 테스트의 분류
1) 실행 여부에 따른 테스트
- 정적 테스트: 소스코드를 대상을 분석(워크스루, 인스펙션, 코드 검사)
- 동적 테스트: 프로그램 실행
2) 테스트 기반에 따른 테스트
- 명세 기반 테스트: 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인
- 구조 기반 테스트: 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트
- 경험 기반 테스트: 경험 기반
3) 시각에 따른 테스트
- 검증 테스트: 개발자의 시각
- 확인 테스트: 사용자의 시각에서 생산된 제품의 결과 테스트 -> 인수 테스트(알파 테스트, 베타 테스트)★
4) 목적에 따른 테스트
- 회복 테스트, 안전 테스트, 강도 테스트, 성능 테스트, 구조 테스트, 회귀 테스트(새로운 결함 ㅇ벗음 확인★), 병행 테스트(동일한 데이터 입력하여 결과 비교)
★★화이트박스 테스트, 블랙박스 테스트
1) 화이트박스 테스트★
- 모듈 안의 내용을 직접 볼 수 있음
- 내부의 논리적인 모든 경로를 테스트해 테스트 케이스를 설계
- 소스코드의 모든 문장을 한번 이상 수행함으로써 진행
-> 기초 경로 검사: 대표적인 화이트박스 테스트 기법
-> 제어 구조 검사: 조건 검사, 루프 검사, 데이터 흐름 검사(변수 정의와 변수 사용 위치에 초점)
2) 블랙박스★
- 모듈 안에서 어떤 일이 일어나는지 알 수 없음
- 특정 기능 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트로 기능 테스트
> 동치 분할 검사: 자료에 맞는 결과 출력 확인
> 경계값 분석
> 원인-효과 그래프 검사
> 비교 검사(버전)
> 오류 예측 검사(다른 블랙박스 테스트 기법으로 찾아낼 수 업슨ㄴ 오류를 찾아내는 일련의 보충적 검사 기법(데이터 확인 검사)
★개발 단계에 따른 애플리케이션 테스트
1) 단위 테스트: 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트(구조 기반 테스트)
2) 통합 테스트: 완료된 모듈들을 결합하여 하나의 시스템으로 완성시크는 과정에서의 테스트
3) 시스템 테스트: 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트
4) 인수 테스트★: 사용자의 요구사항을 충족하는지에 중점을 두는 테스트
> 알파테스트: 통제된 환경에서 사용자가 개발자와 함께 테스트
> 베타테스트: 통제되지 않은 환경에서 여러 명의 사용자가 행하는 테스트 기법
★★통합 테스트
1) 상향식 통합 테스트
- 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터 필요
- 하위의 모듈들을 클러스터로 결합 -> 더미 모듈인 드라이버 작성 -> 클러스터 단위로 테스트 -> 상위로 이동해 결합 후 드라이버는 실제 모듈로 대체
2) 하향식 통합 테스트★
-> 깊이 우선 통합법, 넓이 우선 통합법 사용.
- 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있음.
3) 혼합식 통합 테스트: 하위에서는 상향식, 상위 수준에서는 하향식 통합 사용
★★테스트
1) 테스트케이스: 설계된 입력 값, 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서
2) 테스트 시나리오: 여러 개의 테스트 케이스들을 묶은 집합, 테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서
- 여러 개의 시나리오로 분리해 작성
- 사용자의 요구사항과 같은 설계 문서 등을 토대로 작성
3) 테스트 오라클: 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입해 비교하는 활동
- 제한된 검증: 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법: 값을 수학적 기법을 이용해 구할 수 있음
- 자동화 기능: 프로그램 실행, 결과 비교, 커버리지 측정 등을 자동화할 수 있음
> 참오라클: 모든 테스트 케이스의 입력값에 대해 기대하는 효과 제공
> 샘플링 오라클: 특정 몇몇 테스트케이스의 입력값들에 대해서만 기대하는 결과 제공
> 휴리스틱 오라클: 나머지 입력 값들에 대해서는 추정으로 처리
> 일관성 검사 오라클: 수행 전과 후의 결과값이 동일한지 확인하는 오라클
4) 테스트 하네스★
- 테스트 드라이버: 하위 모듈 호출 수행 후 결과 도출
- 테스트 스텁: 상위 모듈 대신
- 테스트 슈트: 테스트 케이스 집합
- 테스트 케이스: 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목 명세서
- 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서
- 목 오브젝트: 행위를 조건부로 입력해두면 예정된 행위를 수행하는 객체
★결함 관리
1) 결함 상태 추적
- 결함 분포, 결함 추세(진행 시간에 따른 결함 수), 결함 에이징(지속되는 시간)
2) 결함 추적 순서
- 결함 등록 -> 결함 검토 -> 결함 할당 -> 결함 수정 -> 결함 조치 보류 -> 결함 종료 -> 결함 해제
3) 결함 심각도, 우선순위
- 결함 심각도: 치명적 > 주요 > 보통 > 경미 > 단순
- 결함 우선순위: 치명적 > 높음 > 보통 > 낮음
★★ 애플리케이션 성능 분석
1) 애플리케이션 성능★★
- 처리량: 애플리케이션이 처리하는 일의 양
- 응답 시간: 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
- 경과 시간: 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸리는 시간
- 자원 사용률
2) 애플리케이션 성능 저하 원인 분석
- DB에 필요 이상의 많은 데이터를 요청한 경우
- 커넥션 풀의 크기를 너무 작거나 크게 설정한 경우
- JDBC, ODBC 같은 미들웨어를 사용한 후 종료하지 않아 연결 누수가 발생한 경우
- 대량의 파일을 업로드하거나 다운로드해 처리 시간이 길어진 경우
3) 소스 코드 최적화
- 클린 코드 작성 원칙: 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화(가단의중추)
4) 소스코드 품질분석 도구의 종류
- 정적 분석 도구: pmd, cppcheck, checkstyle,sonalQube, com, cobertuna
- 동적 분석 도구: Avalanche, valgrind
★★ 모듈 연계
1) EAI(Enterprise Application Integration)★
- 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
> 포인트 투 포인트: 점대점으로 연결
> 허브 앤 스포크: 허브 시스템을 통해 데이터 전송하는 중앙 집중형 방식
> 메시지 버스: 미들웨어를 두어 처리하는 방식
> 하이브리드: 허브, 메시지 박스의 혼합방식
(포허메하★)
2) ESB(Enterprise Service Bus)
- 애플리케이션 간 연계, 데이터 변환, 웹 서비스 지원 등 표준 기반의 인터페이스를 제공하는 솔루션
- 서비스 중심의 통합을 지향
- 결합도를 약하게 유지
- 관리 및 보안 유지가 쉽고, 높은 수준의 품질 지원이 가능
★★인터페이스 구현, 보안
1) 데이터 통신을 이용한 인터페이스 구현
- 데이터 포맷을 인터페이스 대상으로 전송하고 수신 측에서 파싱해 해석하는 방식
- 주로 JSON이나 XML 형식의 데이터 포맷을 사용해 인터페이스 구현
> JSON: 속성-값-쌍으로 이뤄진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷★
> XML: HTML문법이 각 웹 브라우저에서 상호호환적이지 못하다는 문제와 SGML의 복잡함을 해결 위해 개발★
2) 인터페이스 엔터티를 이용한 인터페이스 구현
- 시스템 사이 별도의 인터페이스 엔터티로 성호 연계하는 방식
- 일반적으로 인터페이스 테이블을 엔터티로 활용
3) 인터페이스 보안 기능 적용: 네트워크, 애플리케이션, 데이터베이스 영역
* 스니핑: 중간에서 남의 패킷 정보를 도청
* 시큐어 코딩: 일련의 보안활동(입력 데이터 검증 표현, 보안 기능, 시간 및 상태, 에러 처리, 코드 오류, 캡슐화, API 오용)
★★인터페이스 구현 검증, 오류 확인
1) 인터페이스 구현 검증 도구★
-xUnit: 다양한 언어를 지원하는 단위 테스트 프레임워크
- STAF: 컴포넌트 재사용 등 다양한 환경 지원하는 테스트 프레임워크★
- FitNesse: 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
- NTAF: STAF의 강점인 재사용 및 확장성과 FitNesse의 장점 협업 기능을 통합한 NHN의 테스트 자동화 프레임워크
- Selenium: 다양한 브라우저 및 개발 언어 지원
- watir: Ruby언어를 사용
2) 인터페이스 오류 발생 즉시 확인: 오류 메시지 알람, SMS발송, 이메일 발송
3) 인터페이스 오류 발생 주기적 확인: 오류 로그 확인, 오류 테이블 확인, 감시(APM) 도구 사용
★★★ 트리 순회
★★★ 이진 트리
> 차수가 2 이하인 노드로 구성
> 이진 트리, 편향 트리, 포화 이진트리, 완전이진트리
논리데이터 저장소
개체, 속성, 관계
물리데이터 저장소
단위 개체를 테이블로 변환 -> 속성을 컬럼으롭 ㅕㄴ환 -> UID를 기본키로 변환 -> 관계를 외래키로 변환 -> 컬럼 유형과 길이 정의 -> 반정규화 수행
인덱스
- 분포도 10~15% 이내
- 수정이 빈번하지 않는 컬럼
- ORDER BY, GROUP BY, UNION이 빈번한 컬럼
- 분포도가 좋은 컬럼은 단독 인덱스로 생성
- 인덱스들이 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성
- 지나치게 많은 인덱스는 오버헤드 발생
- 인덱스만의 추가적인 저장 공간이 필요
뷰
- 기본테이블로부터 유도된, 이름을 가지는 가상 테인블로 기본 테이블과 같은 형태의 구족 사용
- 가상 테이블이기 때문에 물리적으로 구현되어 있지 않지만 사용자에게 있는 것처럼 간주
- 논리적 독립성 제공 가능
- 정의된 뷰로 다른 뷰를 정의할 수 있음
- 다른 뷰도 자동을 삭제됨
> REPLACE: 뷰가 이미 존재하는 경우 재생성
> FORCE: 존재 여부 상관 없이 뷰 생성
> NOFORCE: 존재할 때만 뷰 생성
> WITH CHECK OPTION: 조건을 만족하는 행만 변경
> WITH READ ONLY: 데이터 조작어 작업 불가
- 장점: 논리적 데이터 독립성 제공, 자동 보안 제공
- 단점: 독립적인 인덱스 가질 수 없음. 뷰의 정의를 ALTER로 변경할 수 없음. 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약
클러스터
- 인덱스의 단점 해결한 기법 -> 분포도가 넓을수록 유리
- 분포도가 넓은 '테이블'의 클러스터링은 저장 곤간의 절약이 가능
- 대량의 범위를 자주 액세스하는 경우 적용
> 클러스터 테이블 선정
- 수정이 빈번하지 않은 '테이블'
- ORDER BY, GROUP BY, UNION이 빈번한 테이블
- 처리 범위가 넓어 단일 테이블 클러스터링
- 조인이 많아 문제 발생 시 다중 테이블 클러스터링
- 조회 속도를 향상시켜주지만 입력, 수정, 삭제 시 성능이 저하됨
파티션
- 레인지 파티셔닝(범위분할): 지정한 열의 값을 기준을 분할
- 해시 파티셔닝(해시분할): 해시 함수에 따라 데이터 분할
- 리스트 파티셔닝: 정해진 그룹핑 기준에 따라 분할
- 컴포지트 파티셔닝(조합분할): 범위분할 이후 해시 함수 적용
-> 장점: 성능 향상, 가용성 향상, 백업 가능, 경합 감소
PL/SQL
선언부: 참조할 모든 변수, 상수, CURSOR, EXCEPTION 선언
실행부: BEGIN, END 사이에 기술되는 영역
예외부: 실행부에서 에러가 발생했을 때 문장 기술
장점: 컴파일 불필요, 모듈화 기능, 절차적 언어 사용, 에러 처리
객체 활용: 저장된 프로시저, 저장된 함수, 저장된 패키지, 트리거
단위 모듈 구현의 원리
- 정보 은닉, 분할과 정복, 데이터 추상화, 모듈 독립성(낮은 결합도와 높은 응집도)
알고리즘 설계 기법★
- 분할과 정복(문제를 나누어 풀고 병합해 답 얻음),
- 동적 계획법(과거에 구한 해 활용),
- 탐욕법(그 순간 가장 좋은 거),
- 백트래킹(유망하지 않으면 부모노드로 돌아가 다른 자손 검색)
★★시간 복잡도에 다른 알고리즘
O(1) 상수형 복잡도, 항상 일정 속도로 작동★ ex)해시함수
O(logN) 로그형 복잡도 ex)이진 탐색
O(n) 선형 복잡도 정비례 ex)순차 탐색
O(N logN) 선형 로그형 복잡도 ex)퀵정렬, 합병 정렬★
O(N2) 제곱형 N의 크기가 작으면 log2N보다 느릴 수 있음. ex) 선택 정렬, 버블 정렬, 삽입 정렬★
'정처기' 카테고리의 다른 글
정보처리기사 실기 정리 (0) | 2021.07.07 |
---|---|
정보시스템 구축 관리 (0) | 2021.05.14 |
프로그래밍 언어 활용 (0) | 2021.05.09 |
데이터베이스 구축 (0) | 2021.05.07 |
소프트웨어 설계 (1) | 2021.05.06 |