달력

12

« 2019/12 »

  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  


 

 

리스트(list)

·       리스트(list) 데이터를 순차적으로 나열해 놓은 집합을 가리키는 자료구조의 추상적인 개념으로 비슷한 성질의 데이터를 순서를 고려하여 그룹화 시키고자 주로 사용하는 자료구조입니다.

·       자료를 나열한 목록이나 도표처럼 여러 데이터를 관리할 있는 자료형을 추상화한 것입니다.

·       데이터 삽입, 삭제, 검색 필요 작업을 수행할 있습니다.

·       스택과 큐는 리스트의 특수한 형태에 해당합니다.

 


Posted by codedragon codedragon

댓글을 달아 주세요



 

연결 리스트(Linked List)

·       재귀적 자료구조입니다.

·       메모리에 불연속적으로 동적할당되어집니다.

·       연결 리스트는 저장된 요소가 비순차적으로 분포되며, 이러한 요소들 사이를 링크(link) 연결하여 구성합니다.

·       연결 리스트는 노드가 데이터와 포인터(참조값) 가지고 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조를 말합니다.

·       연결 리스트는 이름에서 있듯이 데이터를 담고 있는 노드(node)들이 서로 연결(link)되어 있으며, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 됩니다.

 



 

 

Linked List 요소(node)들은 데이터 연결된 다음 요소에 대한 참조값(주소값)으로 구성되어 있습니다.(데이터 + 참조값)

 


 


'Development > Algorithm, DataStructure' 카테고리의 다른 글

Queue 활용 사례  (0) 2018.08.28
리스트(list)  (0) 2018.08.21
연결 리스트(Linked List)  (0) 2018.08.16
Think Data Structures: Algorithms and Information Retrieval in Java  (0) 2018.08.14
배열(array) vs 리스트(list)  (0) 2018.08.13
알고리즘 조건  (0) 2018.08.12
Posted by codedragon codedragon

댓글을 달아 주세요


 

 

Think Data Structures: Algorithms and Information Retrieval in Java

http://greenteapress.com/thinkdast/html/index.html


 



 

https://amzn.to/2P6A2tj

http://bit.ly/2P2YYSu

 

 

 

 

직접 다운로드

thinkdast.pdf

thinkdast.z01

thinkdast.zip

 

or

http://greenteapress.com/thinkdast/thinkdast.pdf

https://github.com/yudong80/ThinkDataStructures

 



Posted by codedragon codedragon

댓글을 달아 주세요


 

배열(array) vs 리스트(list)

·       리스트는 배열과 같은 다중 자료형 형태이나, 다른 속성을 지닙니다.

·       배열은 이미 정해진 크기의 메모리 공간이 필요하지만, 리스트는 필요 없습니다. 데이터를 하나씩  집어 넣을 때마다 메모리 공간을 생성합니다.

·       배열은 데이터의 위치에 대해서 직접적인 엑세스가 가능하지만, 리스트는 불가능하며 가장 처음위치부터 몇 번째인지 하나씩 세어가면서 위치를 찾아갑니다.

·       배열은 데이터의 추가나 삭제가 상당히 불편하지만, 리스트는 매우 쉽게 추가하거나 삭제할 수 있습니다.

 

배열

·       미리 정해진 크기의 메모리 공간 사용

·       데이터의 위치에 대해서 직접적인 접근 가능

·       데이터의 삽입이나 삭제가 상당히 불편

리스트

·       메모리 공간이 가변

·       데이터의 위치에 대해서 직접적인 접근 불가능

·       데이터의 삽입이나 삭제가 용이

·       데이터를 순차적으로 나열해 놓은 집합을 서로 연결한 구조

 

 



 



Posted by codedragon codedragon

댓글을 달아 주세요


 

 

알고리즘 조건

알고리즘이 되기 위해서는 아래의 조건을 만족해야 합니다.

구분

설명

입력

0 이상의 입력이 존재해야 합니다.

출력

1 이상의 출력이 존재해야 합니다.

명백성

명령어의 의미는 모호하지 않고, 명확해야 합니다.

유한성

한정된 수의 단계 후에는 반드시 종료되어야 합니다.

유효성

명령어들은 실행 가능한 연산이어야 합니다.

 

 



Posted by codedragon codedragon

댓글을 달아 주세요


 

Raft: The Understandable Distributed Consensus Protoco

 

https://speakerdeck.com/benbjohnson/raft-the-understandable-distributed-consensus-protocol


 


Posted by codedragon codedragon

댓글을 달아 주세요



 

 

The Raft Consensus Algorithm

 

https://raft.github.io/


 

 


Posted by codedragon codedragon

댓글을 달아 주세요

 

배열(array) 장단점

장점

·       구현이 쉽습니다.

·       검색 성능이 좋습니다. 인덱스(index) 이용한 무작위 접근(random access) 가능하므로 검색에서 빠른 성능을 기대할 있습니다.

·       순차 접근(sequential access) 경우에도 배열은 데이터를 하나의 연속된 메모리 공간에 할당하므로 연결 리스트(Linked list)보다 빠른 성능을 보여줍니다.

·       참조를 위한 추가적인 메모리 할당이 필요 없습니다..

단점

·       자료의 삽입과 삭제에 비효율적입니다. 자료의 삽입(Insert) 삭제(Delete) 다음 항목의 모든 요소를 이동시켜야 합니다. 이를 연산 작업이 수행되어 비효율적이며 자료의 수가 많이지면 비례하여 성능이 떨어지게 됩니다.

·       크기를 바꿀 없습니다. 배열은 생성할 지정한 크기를 바꿀 없기 때문에 너무 크게 잡으면 메모리가 낭비되고 너무 작게 잡으면 이상의 자료를 저장할 없게 됩니다.

·       메모리의 재사용이 불가능합니다. 배열은 초기 사이즈만큼의 메모리를 할당 받아 사용하기 때문에 데이터의 존재 유무와 상관없이 일정한 크기의 메모리 공간을 점유하고 있습니다. 이미 삭제한 데이터라고 하더라도(배열 요소를 삭제) 배열 자체가 메모리에서 제거되지 않는 이상 삭제된 데이터의 메모리 공간을 재사용 없습니다.

 

 

Posted by codedragon codedragon

댓글을 달아 주세요

 

 

VISUALGO

·       싱가폴 대학에서 만든 알고리즘 학습 사이트

·       알고리즘을 시각적으로 학습하고 테스트할 수 있는 서비스

·       컨트롤과 키보드를 통해 알고리즘의 수행 상태를 확인해 볼 수 있습니다.

 

 

https://visualgo.net/


 

맨처음에 있는 Sorting 알고리즘 카테고리를 선택한 경우

가장 상단에 보면 Sorinting 카테고리에 속하는 알고리즘 목록을 확인할 수 있습니다.


 

해당 알고리즘을 선택한 후 좌측 하단에 보면 이 알고리즘으로 조작할 수 있는 메뉴가 오픈됩니다.


 

오른쪽에는 알고리즘이 수행되고 있을 때의 코드 변화를 표시해줍니다.

위의 녹색은 설명이고 아래의 파란색은 코드부분입니다. 코드 부분은 특정 언어에 국한 되지 않고 모든 언어를 포괄할 수 있도록 pseudocode코드형태로 표시되어 집니다.


 

 

 

Mode 선택하기

우측 상단 Mode가 있습니다.

Exploration Mode

직접 사용자가 조작하면서 학습하는 모드

e-Lecture Mode

사용법과 알고리즘에 대한 가이드를 통해 학습할 수 있게 해주는 모드


 

 


 

 

 

연습문제 풀기

우측 상단에 [Trainning] 버튼을 클릭하면 연습문제를 풀면서 내가 학습한 알고리즘의 내용을 확인해 볼 수 있습니다.


 

알고리즘과 난읻를 선택한 다음 [Start training!] 버튼을 클릭하여 문제를 풀 수 있습니다.


 


 

Posted by codedragon codedragon

댓글을 달아 주세요


 

 

피보나치 수열 (Fibonacci Sequence)

피보나치 수열의 항들을 피보나치 (Fibonacci Number)라고 부릅니다.

 


 

https://ko.wikipedia.org/wiki/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98_%EC%88%98

https://namu.wiki/w/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98%20%EC%88%98%EC%97%B4

 

 

피보나치 수는 0 1 시작하며, 다음 피보나치 수는 바로 앞의 피보나치 수의 합이 됩니다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,

 


 

n

0

1

2

3

4

5

6

7

8

...

Fn

0

1

1

2

3

5

8

13

21

...

 

 


Posted by codedragon codedragon

댓글을 달아 주세요