Computer Science 29

네트워크 명령어

네트워크 규모 기반 분류 LAN(Local Area Network) : 근거리 통신망, 전송 속도가 빠르고 혼잡하지 않음 MAN(Metropolitan Area Network) : 도시 지역 네트워크, 전송 속도와 혼잡도가 중간 WAN(Wide Area Network) : 광역 네트워크, 전송 속도가 낮고 매우 혼잡함 네트워크 성능 분석 명령어 PING(Packet INternet Groper) 네트워크 상태를 확인하려는 대상 노드를 향해 일정 크기의 패킷을 전송하는 명령어 해당 노드의 패킷 수신 상태, 도달 시간 확인 해당 노드까지 네트워크가 잘 연결되는지를 확인 ICMP 프로토콜을 통해 동작 >> ICMP 프로토콜 지원되지 않는 기기는 실행이 어려움 NETSTAT 접속되어 있는 서비스들의 네트워크 상..

네트워크의 기초, 토폴로지

네트워크 노드와 링크가 서로 연결되어 있으며, 리소스를 공유하는 집합 노드 : 서버, 라우터, 스위치 등의 네트워크 장치를 총칭. 링크 : 유선 or 무선 처리량 링크 내에서 성공적으로 전달된 데이터의 양 보통 의미를 "얼만큼의 트래픽을 처리했는가?"로 생각하면 됨 트래픽 : 특정 시점에 링크 내에 흐르는 데이터의 양 단위 : bps(bits per second) 지연 시간 요청이 처리되는 시간(어떤 메세지가 두 장치 사이를 왕복하는 데 걸리는 시간) 매체 타입, 패킷의 크기, 라우터의 패킷 처리 시간에 영향을 받음 네트워크 토폴로지 노드의 링크가 배치되는 방식, 연결 형태 특정한 토폴로지는 노드 사이의 물리적, 논리적 연결 구성으로 결정 1. 트리 토폴로지 == 계층형 토폴로지 트리 형태로 배치한 네트..

버블 정렬

정의 가장 간단한 정렬 알고리즘 중 하나로, 이름에서 알 수 있듯이 "버블"처럼 큰 값이 배열의 끝으로, 작은 값이 배열의 시작으로 이동하게 다. 이 알고리즘의 기본 아이디어는 인접한 두 원소를 비교하여 필요한 경우 위치를 교환하는 것 과정 첫 번째 원소부터 마지막 원소까지 반복하면서 인접한 두 원소를 비교한다. 두 원소의 순서가 잘못되어 있다면(즉, 오름차순 정렬에서 첫 번째 원소가 두 번째 원소보다 크다면) 위치를 교환한다. 1~2의 과정을 배열의 끝까지 반복한다. 이렇게 하면 가장 큰 원소가 배열의 마지막 위치로 이동한다. 배열의 길이를 1 줄이고 위의 과정을 반복한다. 배열의 길이가 1이 될 때까지 위의 과정을 반복한다. 시간 복잡도 최선의 경우: O(n) (이미 정렬된 배열) 평균적인 경우: O..

해쉬(Hash)

해쉬란? 컴퓨팅에서 키를 값에 매핑할 수 있는 구조인, 연관 배열 추가에 사용되는 자료 구조 key : value의 형태를 갖는 자료구조 ex)전화번호부 (이름 : 전화번호) (검색어 : 검색결과) 해시 테이블은 해시 함수를 사용하여 색인(index)을 버킷(bucket)이나 슬롯(slot)의 배열로 계산한다. 모든 데이터 타입으로 접근 가능 데이터를 다루는 기법 중에 하나로 데이터의 검색과 저장이 아주 빠르게 진행된다. 해쉬 함수(Hash Function)는 임의의 길이를 갖는 메시지를 입력하여 고정된 길이의 해쉬값을 출력하는 함수이다. 파이썬 터미널로 작성해보면, 이미 해쉬 함수가 제공되고 있음을 알 수 있음 >>> hash("fast") -146084012848775433 >>> hash("slow..

스택(stack) / 큐(queue)

스택 한쪽 끝으로만 자료를 넣고 뺄 수 있는 자료 구조. Last in First out(LIFO) 구조 단순한 스택 형식 만들기는 append, list 형식으로 만들 수 있음 이 스택 형식을 잘 써먹는 함수로는 다음과 같은 함수가 있다. push(data) : 맨 앞에 데이터 넣기 pop() : 맨 앞의 데이터 뽑기 peek() : 맨 앞의 데이터 보기 empty() : 스택이 비어있는지의 여부를 반환하는 연산 top() : 스택의 가장 위에 있는 자료를 반환하는 연산 그럼 스택을 왜 쓸까? 스택과 위 함수와의 연관은 뭘까? 알고리즘 경험이 많진 않지만, 리스트 등의 데이터 형태에 들어온 것을 위 함수를 통해 꺼내어서 점검하는 형식으로 많이 이용한다. 콜스택 그리고 컴퓨터 프로그램에서 현재 실행중인 ..

배열과 리스트

배열 배열 : 크기가 정해진 데이터의 공간, 한 번 정해지면 바꿀 수 없다. 배열은 원소에 즉시 접근할 수 있다. 그 배열의 'Index'를 통해 접근한다. * 즉시 접근 가능 : O(1) = 상수 시간 내에 접근이 가능 그러나 배열은 수정, 삭제 시 모든 원소를 다 옮겨야 한다. 최악의 경우에는 모든 원소를 다 옮기면서 시간복잡도가 O(N)까지 증가할 수 있다. 크기가 정해진 데이터의 공간이기 때문에 원소를 추가할 시, 새로운 배열을 만들어야 하므로 수정에 있어 비효율적 리스트 리스트 = Linked List : 크기가 정해지지 않은 데이터의 공간, 연결고리만 주어진다면 바꿀 수 있다. 리스트는 특정 원소에 접근하려면 연결고리를 따라 접근해야 한다. 최악의 경우에는 모든 원소에 다 접근해야 하기 때문에..

컴퓨터 구조와 운영체제 핵심 개념

컴퓨터 구조를 이해해야 하는 이유 1. 문제 해결 능력 기본적으로 컴퓨터의 작동 원리에 대해 이해하는 사람은 그렇지 않은 사람보다 훨씬 문제해결이 편하다. 컴퓨터를 관조할 수 있는 능력 배양(분석 능력) 2. 성능, 용량, 비용 컴퓨터 구조는 결국 이 세 가지를 고려해서 보기 때문에 당연히 고려해야 하는 부분 컴퓨터가 이해하고 있는 정보 1. 데이터 숫자, 문자 등의 정적인 정보 컴퓨터와 주고받는 / 내부에 저장된 정보 2. 명령어 컴퓨터를 실질적으로 움직이게 하는 정보 데이터는 명령어를 위한 재료 명령 코드를 사람이 쓰면, 컴퓨터는 그것을 자신만의 명령 데이터로 변환해서 사용 ex) binary 컴퓨터의 핵심 부품 4개 1. CPU CPU란? : 메모리에 저장된 값을 읽어들이고, 실행하고, 해석하는 장..

시간복잡도/공간복잡도/점근표기법

작년 학교 강의를 통해서 알고리즘을 조금 찍먹만 해보았지만, 이 3가지 개념은 정말 수업 내내 나타났기 때문에 이번에는 제대로 공부하고 정리해보았다. 시간 복잡도 개념 시간 복잡도란? : 알고리즘이 문제를 풀기 위한 시간(혹은 연산)을 말한다. 단어로 말하자면 "수행시간" 우리가 프로그래머스에서 문제를 풀 때 문제를 해결하는 시간이 아래에 뜨는데, 이것이 시간복잡도를 간접적으로 나타내어 준다. 테스트 1의 0.03ms가 내 코드의 시간복잡도이다. 참고로 옆의 10.2MB는 공간복잡도! 시간 복잡도 풀이법 그렇다면 이 시간복잡도는 어떤 방식으로 구하는 걸까? 아래의 예시를 보면 금방 이해될 것이다. for num in array: # array 의 길이(N)만큼 아래 연산이 실행 for compare_nu..