Developer

QuickSort? - 말 그대로 빠른 정렬이다. - 퀵 소트는 평균적인 시간복잡도는 O(NlogN), 최악의 경우 O(N^2) 이다. - 따로 메모리를 저장하여 정렬하지 않아서 공간복잡도는 O(1)이다! - 이러한 불규칙적 성질 때문에 불안정 정렬이라 한다. - 일단 이론이 굉장히 어려우므로 바로 설명을 가보도록 하자 과정 1. 리스트 안에 있는 한 요소(pivot)를 고르자! 2. pivot을 기준으로 큰 값은 오른쪽, 작은 값은 왼쪽으로 정렬하자~! 3. pivot의 왼쪽 부분과 오른쪽 부분을 다시 재귀로 정렬하자! 4. 단 리스트의 크기가 0, 혹은 pivot 자신만 있을 때 (1) 이면 하지 않는다! Quick 정렬에 대한 고찰 - 파티션을 나누는 과정이 MergeSort와 동일하게 2분할이다...
MergeSort? - 대표적인 분할정복 정렬 알고리즘 중의 하나 cf> 분할정복(Divide And Conquer) ? : 문제를 작은 2개의 문제로 분리하여, 해결하고 결과를 합치는 전략이다. - 메모리를 잡아먹는 특징 때문에, 안정성이 많이 보장되는 정렬 알고리즘이다. - 시간복잡도는 O(NlogN), 공간복잡도는 O(N) 이다. ++ 배열을 1개로 될 때까지 각각을 n/2로 줄이니 당연히 logN 이다. ++ 합칠 때는 총 N번의 비교연산이 들어가므로 N*logN 이 되는 시간복잡도이다! - 보통 정렬의 공간복잡도는 O(1)인데, 병합정렬의 경우 복사할 배열이 새로 필요하다! 언제 써야될까? 1. 많은 데이터를 정렬할 때, 여분의 메모리가 충분할 때! 2. 반대로, 많은 데이터를 정렬하고 싶은데 ..
Priority Queue? - 우선순위 큐 : 일반적인 FIFO(First In First Out)의 Queue에서 우선순위의 개념을 도입한 Queue - 데이터에 대한 처리 절차를 순위에 따라 처리하기 위해 사용된다! - 보통 Heap으로 구현되어 사용된다! 언제 사용되나요? - 많고 복잡한 데이터에 대하여 처리하는 순위를 매겨야 할 때 사용된다! - 실제 사례 1. 시뮬레이션 시스템 2. 네트워크 트래픽 제어 3. 운영체제의 작업 스케쥴링 - 삽입, 삭제의 시간복잡도가 O(logN) 이므로 순위를 매길 때, 100만번의 연산을 대략 18번의 연산으로 줄일 수 있다!! Heap? - 완전 이진 트리(Complete Binary Tree)의 일종으로 우선순위 큐를 위하여 만들어진 자료구조다! cf > ..
배열? - 배열은 연속된 자료를 저장하기 위한 선형 자료 구조다 - 배열은 기본적으로 지역적 특성을 가지고 있기 때문에 CPU가 지역 참조를 할 때 속도가 빠르다 - 다시말해서, Cache Hit 의 가능성이 커진다! - 우리는 이미 배열을 사용하는 법 을 알고 있다!! But.... new int[1000] 는 한계성이 있다. * 입력으로 들어오는 개수가 N(미지수)일 때, 어떠한 근거로 메모리를 확보해야 되는가? 에 대한 문제점 --> 정적 배열을 동적 배열로 사용하면 된다!! -> ArrayList ArrayList? - 배열의 크기를 들어오는 자료의 양에 따라서 조절할 수 있다!! - 데이터를 추가하는 데에 시간복잡도는 O(1) 에 처리할 수 있다 ▶ 하지만.... - 동적으로 메모리가 늘어나는 ..
Collection Framework? - 대량의 데이터를 쉽고 효과적으로 처리할 수 있게 표준화된 방법을 제공하는 클래스의 집합이다. - 한마디로, 데이터를 저장하는 자료구조 + 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현했다!! - Java의 기능을 나타내기 위한 클래스, 각각의 Interface를 상속하여 구현이 되어있다 - 모든 클래스가 처럼 제네릭으로 표현되어 있다!! 제네릭이란? - Generic : 데이터의 타입(data type)을 일반화(generalize)한다. - 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일시에 미리 지정하는 방법이다. 그러면 결과적으로 다음과 같은 장점을 얻을 수 있다! ○ Class Method 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다..
Socket(TCP) 통신을 이용한 Chatting Project 만들기 특징 Server : 사용자가 접속할 때마다 쓰레드를 생성하여 메세지가 오면 BroadCast하는 방식 Client : 1. GUI를 awt의 BorderLayer로 설정하여 화면을 구성한다 Client : 2. 객체 생성시 파일을 읽고, 각각의 기능 수행시 ActionListener를 설정하여 버튼에 대한 Action을 수행한다. Client : 3. 전송되는 Object는 ObjectOutputStream을 이용하여 전송하고, 받는 것은 ObjectInputStream을 이용하여 수신한다. 구현 과정 서버(메인) 123456789101112131415161718public void go() { ServerSocket sv = n..
huisam
'Developer' 카테고리의 글 목록 (17 Page)