이진 탐색 트리

이진 탐색 트리는 '이진 탐색'을 위한 '이진 트리' 입니다.이진 탐색 알고리즘의 경우 배열인 경우에만 사용할 수 있는 문제가 있습니다.링크드 리스트는 중앙 요소를 알 수 없기때문에 이진 탐색이 불가능합니다.이 딜레마를 해결해주는 자료구조가 바로 '이진 탐색 트리' 입니다. 이진 트리 탐색은 규칙이 있습니다. 왼쪽 자식 노드는 부모 노드보다 작고, 오른쪽 자식 노드는 부모 노드보다 크다. 위에서 부터 자식노드를 탐색을 하게 됩니다. 데이터도 위의 규칙대로 추가 되게 됩니다. 만약 20 노드가 삭제 될 시에는 삭제된 노드의 오른쪽 하위 트리에서 가장 작은 값을 가진 노드로 위치가 옮겨가면 됩니다. 이진트리의 문제점 이진 탐색 트리의 경우 동적으로 크기가 증가해도 잘 대처 하며 탐색속도도 매우 훌륭합니다. ..

순차 탐색 / 이진 탐색

순차 탐색 순서대로 무식하게 찾는 방식입니다. 단순합니다. 조금 더 효율적인 방식을 위해 자기 구성 순차탐색이라는 방식이 존재합니다. 자기 구성 순차 탐색 자기 구성법은 자주 사용되는 항목을 데이터 집합의 앞쪽에 배치함으로써 순차 탐색의 검색 효율을 끌어올리는 방법입니다.아래 세가지 방식으로 구분됩니다.- 전진 이동법(Move To Front)- 전위법(Transpose)- 빈도 계수법(Frequency Count) 전진 이동법 전진 이동법은 어느 항목이 한번 탐색되고 나면, 그 항목을 데이터 집합의 가장 앞 (링크드 리스트에서는 헤드)에 위치시키는 방법입니다. 이렇게 할 경우 한번 찾은 항목을 연이어 또 찾을 때 단번에 탐색을 완료 할 수 있습니다. MS 워드의 '최근 문서' 기능과 같은 원리로 동작 ..

퀵 정렬

퀵 정렬은 전쟁 전략중의 하나인 분할 정복에 기반한 알고리즘입니다.분할 정복 전략은 적군의 전체를 공략하는 대신, 전체를 구성하는 구성 요소들을 나누어 잘개 쪼개진 적을 공략하는 전법입니다. 퀵 정렬은 아래과정을 거칩니다. 1. 데이터 집합 내에서 임의의 기준 요소를 선택하고, 기준 요소보다 작은 요소들은 순서에 관계없이 기준 요소의 왼편에, 큰 값은 오른편에 위치시킵니다. 2. 이렇게 나눈 데이터 집합들을 다시 1에서와 같이 임의의 기준 요소를 선택 후 같은 방법으로 데이터 집합을 분할합니다. 3. 1, 2의 과정을 더 이상 데이터 집합을 나눌 수 없을 때까지 반복하면 정렬된 데이터 집합을 얻게 됩니다. function quickSort(array){ if(array.length < 2) return ..

삽입 정렬

삽입정렬이란?데이터 집합을 순회하면서 정렬이 필요한 요소를 뽑아내어 이를 다시 적당한 곳에 삽입해 나가는 알고리즘입니다.뒤섞여있는 트럼프 카드를 순서대로 정리하는 모습과 비슷합니다.데이터 집합에서 요소를 하나씩 뽑아 적절한 곳에 끼워 넣는 것을 반복하여 정렬된 데이터 집합을 찾아냅니다. 버블정렬은 반드시 모든 반복에 대해서 비교를 거치지만 삽입 정렬은 데이터 집합이 정렬되어 있는 경우에는 한번도 비교를 거치지 않습니다. var array= [1,9,-1,5,10,23,-2,7,4,5]; for (i = 0; i 0) && (array[j-1] > temp)) { array[j] = array[j-1];..

버블 정렬

버블정렬이란 데이터를 정렬하는 과정이 마치 거품이 수면을 향해서 올라오는 모습과 같다고 붙여진 이름입니다.데이터 집합을 순회하면서 집합 내의 이웃 요소들 끼리의 교환을 통해서 정렬을 수행합니다. 아래 그림을 보시면 스텝이 진행 될 때마다 값을 비교하여 더 큰 숫자가 뒤로 가게 정렬되고 있습니다. 위 그림은 5번에 스텝에 정렬이 완료 되었지만, 더 복잡하게 섞인 정렬의 경우 위의 동작이 계속 반복되게 됩니다.아래 자바스크립트 코드를 참고하시기 바랍니다. #소스코드 var array= [1,9,-1,5,10,23,-2,7,4,5,1]; for (i = 0; i array[i+1]) { temp = array[i+1]; array[i+1] = array[i]; array[i] = temp; i = i-2; }..

누워서 읽는 알고리즘

누워서 읽는 알고리즘 프로그래밍 상상력을 키워주는 알고리즘 이야기 - 임백준 지음 팟캐스트 '나는 프로그래머다'의 진행자가 쓴 책? 3년 전 자취를 시작하며 직장에 양재시민의숲에서 교대까지 버스로 출퇴근 했었다. 그러던 어느 날 버스나 자전거나 소요시간이 별로 차이 나지 않는 걸 깨닫고 3달 버스비 정도 하는 자전거를 구매하여 춥지 않은 계절이 되면 자전거로 출퇴근하였다. 군산, 부산으로 자전거 여행을 했을 정도로 자전거 타기를 좋아했기 때문에 꾸준히 할 수 있었는데, 매번 같은 코스를 다니다보니 지루함을 달랠 무언가가 필요했다 그런 와중 같은 팀 형님의 추천으로 팟캐스트라는 플랫폼을 알게 됐는데, 라디오 같으면서 다양한 카테고리가 분포해 있어서 듣다보면 라이딩 중 찾아오는 지루함이 해소되었다. 가끔 흥..

인터랙티브 디벨로퍼 -구글 엔지니어의 포트폴리오

인터렉티브 디벨로퍼 - 구글 엔지니어의 포트폴리오 한국에서 IT 경력 5년, 뉴욕과 실리콘밸리에서의 디자이너 생활 에세이고졸 PC방 알바에서 구글본사의 인정받는 엔지니어가 되기까지. - 김종민 지음 현대적인 성공신화 책을 다 읽고 덮으며 한가지 느낌을 받았는데, 위인전집에서 위인전 하나 꺼내 본듯한 느낌이었다.물론 저자가 알에서 태어난 것도 아니고 독립하거나 나라를 세운 것도 아니다. 하지만 한국에서 태어나 고졸 PC방 알바가 10년만에 구글로 가고 구글 I/O 에서 자신의 프로젝트를 소개할 수 있다니? 보통 다른 사람이 할 수 없는 걸 이뤄냈다는데 그 궤를 같이하지 않는가.10년이 짧은 시간은 아니지만, 저자의 10년간의 삶과 포트폴리오를 본다면 그 10년이 짧게만 느껴진다. 항상 영화나 책을 볼 때 ..

[MySQL] RowNum 만들기

MySql에는 rownum이 없습니다.그렇기 때문에 따로 만들어 주어야 하는데요. 아래 소스가 만드는 예제입니다. ex1) SELECT @RNUM := @RNUM + 1 AS ROWNUM FROM ( SELECT @RNUM := 0 ) R ex2) SELECT @RNUM := @RNUM + 1 AS ROWNUM, t.* FROM ( SELECT * FROM table ORDER BY column1 ) t, ( SELECT @RNUM := 0 ) R ex2) 처럼 구현하게 되면 ordering 된 상태에서 rownum이 0부터 순서대로 부여됩니다.[출처] [MySQL] rownum 구현하 cnf기|작성자 카퍼

RFP/RFI [ Request For Proposal/Request For Information ]

RFP : 제안 요청서 RFI : 정보 요청서(자료 의뢰서) 새로운 정보기술을 접목해 시스템을 구축할 때 어떤 기술과 업체를 선택할 것인가 하는 점은 일반적으로 제안요청서(RFP;REquest For Proposal)와 제안서라는 연속된 절차를 통해 결정난다. 이중 RFP는 사용자가 자사의 시스템에 대한 요구사항을 체계적으로 정식문서로 공급업체가 제안서를 작성할 때 기본적인 자료로 활용한다. 최근 정보기술의 발전속도가 급속도로 빨라지고, 다양한 기술을 통합한 정보시스템에 대한 요구가 높아지면서 RFP에 대한 중요성이 어느 때보다 커지고 있다. 얼마나 체계적으로 RFP를 작성느냐에 따라 제안서의 품질이 결정되는가 하면, 프로젝트의 성공여부에도 큰 영향을 미친다는 인식이 확산되고 있는 것이다. 대형 프로젝트..

디자인 패턴을 배우기 전에

0. 디자인 패턴은 클래스 라이브러리가 아니다.디자인 패턴은 클래스 라이브러리보다 더 일반적인 개념이다.클래스 라이브러리는 부품이 되는 프로그램을 의미하지만 디자인 패턴은 부품이 어떻게 조립되어 있고, 각각의 부품이 어떻게 관련해서 큰 기능을 발휘하는지를 표현한 것이다. 1. 클래스 라이브러리 안에서 디자인 패턴이 사용되고 있다. Java의 표준적인 클래스 라이브러리 안에는 디자인 패턴이 많이 활용되고 있습니다.디자인 패턴을 이해하고 있으면 클래스 라이브러리의 역할을 이해하는데 도움이 될 것입니다. 2. 프로그램을 완성품으로 보지 않는다.디자인 패턴의 목표중 하나는 프로그램의 재사용성을 강하게 하는것이다.즉 프로그램을 부품으로써 재이용할 수 있는가를 생각해야한다.따라서 프로그램을 완성품이 아닌 기능을 확..

UML에 대해서

UML(Unified Modeling Language)- 시스템을 시각화하거나 시스템의 사양이나 설계를 문서화하기 위한 표현방법이다. 클래스 다이어그램- 클래스나 인스턴스, 인터페이스 등의 정적인 관계를 표현한 것. 클래스 다이어그램(Class Diagram)은 시스템의 정적인 상태인 논리적인 구조(클래스)를 표현합니다. Class, Interface, Collaboration 간의 관계를 나타내며, 객체지향 개발에서 가장 공통적으로 많이 사용합니다. 클래스 다이어그램을 구성하는 것은 클래스와 관계입니다. 클래스 다이어그램은 다음과 같은 특징을 가집니다.시스템의 요구사항에 표현된 작업 즉, 시스템이 처리해야 하는 작업에 대한 책임을 분할모델은 점점 증가되며 관련된 클래스들 끼리 패키지화클래스를 너무 작게..

[Oracle] RowNum 만들기

오라클에서 rowNum을 사용할 경우 select * from table where rownum = 3; 위 쿼리를 실행해도 rownum 3번째 값이 나오지 않고 아무것도 없다고 뜰것이다 하지만 rownum = 1은 된다. rownum 이라는 것은 Select된 Row가 나오고..그 row의 번호를 의미하기 때문이다. rownum=3이라는 것이 안나오는 이유는 where조건에 걸러진 조건중에서 아직 row 1,2가 없기 때문이다. rownum