1 / 49

Data Structure

문병로 교수님 강의자료를 많이 인용하였습니다. Data Structure. S amsung C onvergence S oftware C ourse 방학 특강 2014. 6. 23 ( 월 ). 들어가기 전에. 단대가 다들 어떻게 되시나요 ? 인문대 / 사회대 / 경영대 / 자연대 / 공대 프로그래밍 , 얼마나 아시나요 ? 프로그래밍 해본 적 있다 / 없다 어떤 언어 ? 객체 지향 프로그래밍 / 자료 구조에 대해 아시나요 ? 객체 지향 프로그래밍에 대해 안다 / 모른다

buzz
Download Presentation

Data Structure

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 문병로 교수님 강의자료를 많이 인용하였습니다. Data Structure Samsung Convergence Software Course 방학 특강 2014. 6. 23 (월)

  2. 들어가기 전에 • 단대가 다들 어떻게 되시나요? • 인문대/사회대/경영대/자연대/공대 • 프로그래밍, 얼마나 아시나요? • 프로그래밍 해본 적 있다/없다 • 어떤 언어? • 객체 지향 프로그래밍 / 자료 구조에 대해 아시나요? • 객체 지향 프로그래밍에 대해 안다/모른다 • Linked List, Stack, Queue, Tree에 대해 안다/모른다

  3. 저는… • 서울대학교 컴퓨터공학부 • 지능형 데이터 시스템 연구실 석박통합과정 • 데이터 마이닝, 추천, 텍스트 데이터 분석, 빅데이터 병렬 처리, 등등 • Interested in… • 사용자들이 남겨놓은 다양한 데이터들(SNS/리뷰 등 텍스트 기록, 상품구매 기록, 웹 서핑 기록, TV 시청 기록, 장소 체크인 기록, 등) • 이를 활용하여 사용자의 Preference를 예측하여 사용자들에게 다양한 Contents / Item / Service들을 추천하는 연구 • 이한빛, skcheon@europa.snu.ac.kr

  4. 저는… • 서울대학교 컴퓨터공학부 • 지능형 데이터 시스템 연구실 석박통합과정 • 데이터마이닝, 추천, 텍스트 데이터 분석, 빅데이터 병렬 처리, 등등 • Interested in… • 사용자들이 남겨놓은 다양한 데이터들(SNS/리뷰 등 텍스트 기록, 상품구매 기록, 웹 서핑 기록, TV 시청 기록, 장소 체크인 기록, 등) • 이를 활용하여 사용자의 Preference를 예측하여 사용자들에게 다양한 Contents / Item / Service들을 추천하는 연구 • 이한빛, skcheon@europa.snu.ac.kr

  5. 데이터, Data • 46 • 18.4 • “정도전” • true/false • “조재현”, “유동근”, “박영규” intcurr_ep_num = 46; double ratings = 18.4; String title = “정도전”; booleanlive_yn = true; String[ ] cast = {“조재현”, “유동근”, “박영규”}; 조금 더 높은 추상 단계의 데이터? 예를 들어, TV_Program?

  6. 데이터, Data • TV_program? • 정도전, 너포위, 마녀사냥, 아빠어디가, … • TV_program이 공통적으로 가지는 정보? 속성? • 프로그램이름, 방영시간, 장르, 출연진, 시청률, … • 이 정보/속성들을 이용해 할 수 있는 기능? • 방영시간 변경, 출연진 리스트 가져오기, …

  7. 데이터 구조, Data Structure • 앞에서 말한 개념적인 데이터를 담는 구체적인 구현. • Object-Oriented Programming (객체 지향 프로그래밍) • Abstraction (추상화)

  8. Java의 경우에는… ClassTV_program { Stringpg_title; intpg_duration; String genre; double rating; public StringgetPg_title() { returnthis.pg_title; } public voidsetPg_title(Stringnew_title) { this.pg_title = new_title; } … } field method

  9. 객체 지향 프로그래밍, Object-oriented Programming TV Program 정도전 왕좌의 게임 마녀사냥 슈퍼맨이 돌아왔다

  10. 객체 지향 프로그래밍, Object-oriented Programming ClassTV_program { Stringpg_title; intpg_duration; String genre; double rating; public StringgetPg_title() { returnthis.pg_title; } public voidsetPg_title(Stringnew_title) { this.pg_title = new_title; } … } 개념(Concept) TV_program정도전= newTV_program( ); 객체(Object)

  11. 객체 지향 프로그래밍, Object-oriented Programming ClassTV_program { Stringpg_title; intpg_duration; String genre; double rating; public StringgetPg_title() { returnthis.pg_title; } public voidsetPg_title(Stringnew_title) { this.pg_title = new_title; } … } 개념(Concept) TV_program왕좌의게임= newTV_program( ) 객체(Object)

  12. 객체 지향 프로그래밍, Object-oriented Programming ClassTV_program { Stringpg_title; intpg_duration; String genre; double rating; public StringgetPg_title() { returnthis.pg_title; } public voidsetPg_title(Stringnew_title) { this.pg_title = new_title; } … } 개념(Concept) TV_program마녀사냥= newTV_program( ) 객체(Object)

  13. 객체만 만들면… TV_program정도전 = new TV_program( ); 정도전.setPg_name(“대하드라마,정도전”); 정도전.setPg_duration(1); 정도전.setGenre(“drama”); 정도전.setRating(18.4); TV_program정도전 = new TV_program(“정도전”, 1, “drama”, 18.4);

  14. 다시, 클래스 • 필드, field • 생성자, constructor • 메쏘드, method • Getter/Setter : 모든 필드 변수들에 대해 보통 구현됨 • 이외의 method들

  15. Getter/setter public StringgetPg_title() { returnthis.pg_title; } public voidsetPg_title(Stringnew_title) { this.pg_title = new_title; } … (also for pg_duration, genre, rating) public doubleratingToPercent( ) { return (this.rating * 100); } } field ClassTV_program{ Stringpg_title; intpg_duration; Stringgenre; doublerating; TV_program( ) { this.pg_title = null; this.pg_duration = 1; this.genre = null; this.rating = 0.0; } TV_program( String title, intdur, String genre, double rating) { this.pg_title = title; this.pg_duration = dur; this.genre = genre; this.rating = rating; } constructor Other method

  16. 사용자 정의 데이터 타입 ClassEPG_schedule { int year; int month; intday; Stringdayofweek; TV_program[ ]program_list; … } ClassTV_program { Stringpg_title; intpg_duration; String genre; double rating; public StringgetPg_title() { returnthis.pg_title; } public voidsetPg_title(Stringnew_title) { this.pg_title = new_title; } … }

  17. Java의 OOP적 기능들 • 상속, inheritance • 부모클래스와 자식클래스. 자식클래스는 부모클래스의 것들을 상속받아 재정의하지않고 사용하면서 자신만의 새로운 것들을 정의하여 사용 가능. • 오버로딩, overloading • 하나의 이름으로 된 함수들을 여러 타입의 파라미터들에대해 사용 가능. • 인터페이스, interface • 구현하는 함수들의 이름, 입력, 출력 형태만 적어놓고 이 인터페이스를 구현하는 클래스를 따로 두어 실제 구현을 함으로써 안의 구현을 몰라도 사용가능하도록캡슐화. • 등등 • 자세한 설명은 생략한다.

  18. 대표적인 데이터 구조 • Linked List, Stack, Tree, … • 데이터를 어떤 형태의 구조로 담을 것인가?

  19. 클래스로 정의하는 법만 잘 알면 된다. • 클래스의 필드, 메쏘드만 잘 정의할 수 있으면, Java에서 어떤 데이터 구조든 자기 입맛에 맞는 데이터 구조를 정의하여 사용이 가능하다. • 나중에 알게 될 진실.

  20. 연결 리스트, Linked List

  21. Figure 5.1 a) A linked list of integers; b) insertion; c) deletion

  22. Linked List • Each node contains • Data (item) • Link number, string, object, …

  23. A naïve structure public class IntegerNode { public int item; public IntegerNode next; } • Not good information hiding • Not good data abstraction Example: IntegerNode n1 = new IntegerNode( ); IntegerNode n2 = new IntegerNode( ); n1.item = 5; n2.item = 9; n1.next = n2;

  24. An Intermediate Version Example: IntegerNode n1 = new IntegerNode( ); IntegerNode n2 = new IntegerNode( ); n1.setItem(5); n2.setItem(9); n1.setNext(n2); public class IntegerNode { private int item; private IntegerNode next; public void setItem(int newItem) { item = newItem; } public int getItem( ) { return item; } public void setNext(IntegerNode nextNode) { next = nextNode; } public IntegerNode getNext( ) { return next; } }

  25. Example: IntegerNode n1 = new IntegerNode(5, new IntegerNode(9)); AnImproved Version public class IntegerNode { private int item; private IntegerNode next; // constructors publicIntegerNode(int newItem) { item = newItem; next = null; } publicIntegerNode(int newItem, IntegerNode nextNode) { item = newItem; next = nextNode; } // setItem, getItem, setNext, getNext as before … } Example: IntegerNode n2 = new IntegerNode(9); IntegerNode n1 = new IntegerNode(5, n2);

  26. Head Node • Linked lists usually have a head reference Node head = null; Node head = new Node(new Integer(5)); • Here, head is a simplereference variable

  27. Displaying the Contents • Sequential display of the contents of the linked list referenced by head for (Node curr = head; curr != null; curr = curr.getNext( )) { System.out.println(curr.getItem( )); }

  28. Deleting a Specified Node • Removing the node referencedby variable curr • The previous node of curr is referenced by prev prev.setNext(curr.getNext( )); In C,prev->next = curr->next; • Removing the 1st node head = curr.getNext( );

  29. Inserting a Node In C, newNode = malloc(sizeof Node); newNode->item = 30; newNode->next = curr; prev.next = newNode; • Inserting a node between prevand curr newNode = new Node(new Integer(30)); newNode.setNext(curr); prev.setNext(newNode);

  30. 스택, Stack

  31. Stack • 도입을 위한 예 • “←” in keyboard input line • E.g., abcd←←efgh←←←ij←km← • abeik • 한 character를 읽어 ‘←’ 이 아니면 저장하고 ‘←’ 이면 최근에 저장된 character를 제거한다.

  32. A Stack Example 최근에 쌓은 접시를 꺼낸다 Stack of cafeteria dishes

  33. Example: Checking Balance of Braces

  34. Stack Implementation public interfaceStackInterface { publicbooleanisEmpty( ); public void push(Object newItem); public Object pop( ); public voidpopAll ( ); public Object peek( ); }

  35. Items[ ] top –1 0 1 2 3 4 … MAX_STACK–1 Array-Based Implementation public class StackArrayBased implements StackInterface { final int MAX_STACK = 50; private Object items[ ]; private int top; // index for stack top public StackArrayBased( ) { items = new Object[MAX_STACK]; top = –1; }

  36. publicboolean isEmpty( ) { return (top < 0); } public boolean isFull ( ) { return (top == MAX_STACK–1); } public void push(Object newItem) { if (!isFull( )) items[++top] = newItem; else {exception 처리} }

  37. publicObjectpop( ) { if (!isEmpty( )) return items[top--]; else {exception 처리} } public void popAll( ) { items = new Object[MAX_STACK]; top = –1; } public Object peek( ) { if (!isEmpty( )) return items[top]; else {exception 처리} } } // end class StackArrayBased

  38. Reference-Based Implementation public class StackReferenceBased implements StackInterface{ private Node top; public StackReferenceBased( ) { top = null; }

  39. 5 publicboolean isEmpty( ) { return (top == null); } public void push(Object newItem) { top = new Node(newItem, top); } public Object pop( ) { if (!isEmpty( )) { Node temp = top; top = top.getNext( ); return temp.getItem( ); } else {exception 처리} }

  40. public voidpopAll ( ) { top = null; } public Object peek( ) { if (!isEmpty( )) returntop.getItem( ); else {exception 처리} } } // end class StackReferenceBased

  41. 트리, Tree

  42. A family tree An organization chart

  43. newItem newItem right left Reference-Based Implementation of Binary Tree public classTreeNode{ private Object item; privateTreeNodeleftChild; privateTreeNoderightChild; publicTreeNode(Object newItem) { item = newItem; leftChild = rightChild = null; } publicTreeNode(Object newItem, TreeNode left, TreeNode right) { item = newItem; leftChild = left; rightChild = right; }

  44. left public Object getItem( ) { return item; } publicvoidsetItem(Object newItem) { item = newItem; } publicTreeNodegetLeft( ) { returnleftChild; } public TreeNodegetRight( ) { returnrightChild; } publicsetLeft(TreeNode left) { leftChild = left; } publicsetRight(TreeNode right) { rightChild = right; } } // end TreeNode

  45. Search in a Binary Search Tree search(root, searchKey) { if (root is empty) return “Not found!”; else if (searchKey == root’s key) returnroot; else if (searchKey < root’s key) returnsearch(root’s left child, searchKey); else returnsearch(root’s right child, searchKey); }

  46. Insertion in a Binary Search Tree insert (root, newItem) { if (root is null) { newItem을 key로 가진 새 node를 매단다; } else if (newItem < root’s key) insert(root’s left child, newItem); else insert(root’s right child, newItem); }

  47. 사실 이 모든 것은 Java에 모두 아주 잘 구현이 되어 있습니다. • 컴퓨터 공학에서 자료구조를 배우는 이유: Object-Oriented Programming을 배우기에 가장 좋은 주제. • 사실 이론이 아닌 실제 구현을 해보는 것이 목적. • Java구현에 대해 조금이나마 아셨기를 바라며!

More Related