9. 해시테이블
|
|
- 미라 묘
- 5 years ago
- Views:
Transcription
1 9. 해시테이블
2 해시테이블 자료구조의두가지접근패턴 : 순차접근, 직접접근 순차접근 (sequential access) 연결리스트에의해서제공 구조의한쪽끝에서시작해각원소를하나씩살펴보면서목표에도달하거나다른끝에도달할때까지탐색을진행 탐색알고리즘은선형시간에실행 예, 오디오테이프나비디오테이프의자료구조 직접접근 (direct access), 임의접근 (random access) 배열에의해서제공 인덱스 i를이용해직접 a[i] 원소를찾음. i는 a[i] 의주소 순차접근보다훨씬더빠르고상수시간에실행 원소의인덱스에대한사전지식을필요 예, 오디오 CD 나비디오 DVD 의자료구조 2
3 해시테이블 (hash table) 원소의인덱스에대한사전지식없이직접접근을제공 원소의내용으로부터원소의인덱스를계산하는해시함수 (hash function) 를이용 해시 (hash) : 원소들이아무런순서없이마구뒤섞여있다는의미 이장에서는 java.util 패키지에구현되어있는해시테이블을포함한여러종류의해시테이블을기술 3
4 9.1 테이블과레코드 레코드 (record) 여러개의컴포넌트를가진복합적인자료구조 각컴포넌트는자신의이름과타입을가지고있음 일부프로그래밍언어에서는레코드가배열과같이표준타입으로사용 Java 에서는레코드가객체로서구현됨 테이블 (table) 동일타입의레코드의집합 예, 표 9.1 은 Country 타입을이용한테이블 (6 개의레코드 ) 테이블은순서가없는자료구조임 키테이블 (keyed table) -> 맵 (map) 또는사전 (dictionary) 테이블에저장된레코드전체에대해서값이유일한키필드 (key field) 라는특별한필드하나를레코드타입이포함하는테이블 각키는레코드식별에사용됨 4
5 5
6 9.2 맵 (Maps) 에대한 ADT 맵 (Map) : 키보유레코드의컬렉션임 ADT: Keyed Record 키보유레코드 (keyed record) : 키 (key) 와값 (value) 이라는이름을가진객체의순서쌍 연산 1. Initialize: 주어진키와주어진값을가지는키보유레코드를생성. 2. Key: 이레코드의키객체를리턴. 3. Value: 이레코드의값객체를리턴. 4. Update: 이레코드의값객체를주어진값객체로대체. setvalue 6
7 Entry 인터페이스 LISTING 9.2: An Entry Interface 1 public interface Entry { 2 public Object getkey(); 3 // RETURN: key; 4 // POST: key is the first object in this ordered pair; 5 6 public Object getvalue(); 7 // RETURN: value; 8 // POST: value is the second object in this ordered pair; 9 10 public void setvalue(object value); 11 // POST: value is the second object in this ordered pair; 12 } 7
8 ADT : Map 맵 (map) : 유일한키를갖는키보유레코드의컬렉션임 연산 1. Initialize: 공백맵을생성. 2. Search: 주어진키에대해테이블에서그키를가진레코드를탐색. 발견시그값을리턴. 그렇지않으면 null 을리턴. 3. Insert/Update: 주어진레코드에대해테이블에서그키를가진레코드를탐색. 발견시 : 그테이블레코드의값을주어진레코드의값으로대체하고대체된값을리턴. 그렇지않으면 : 주어진레코드를테이블에삽입. 4. Delete: 주어진키에대해테이블에서그키를가진레코드를탐색. 발견시해당레코드를테이블에서삭제하고그값을리턴. 그렇지않으면, null을리턴. 5. Count: 테이블의레코드수를리턴. 8
9 Map 인터페이스 (Object) 9
10 LISTING 9.3 Map 인터페이스 public interface Map { public Object get(object key); // RETURN: value; // POST: if value!=null, then (key,value) is in this map; // if value==null, then no record in this map has the given key; public Object put(object key, Object value); // RETURN: oldvalue; // POST: if oldvalue==null, then (key,value) is in this map; // if oldvalue!=null, then (key,oldvalue) was in this map; public Object remove(object key); // RETURN: oldvalue; // POST: if oldvalue==null, no record in this map has the given key; // if oldvalue!=null, then (key,oldvalue) was in this map; public int size(); // RETURN: n; // POST: this map contains n records; } 10
11 9.3 Hash Tables 자료구조에대한추가적인구성이없다면키테이블에대한접근은순차적임 테이블이키값에의해정렬되고배열에저장되었다면 이진탐색 : 접근시간을 Θ(n) 에서 Θ(lg n) 으로개선 해싱 (hashing) : 정렬하지않고도더좋은성능을낼수있음 키테이블에대한해시함수 테이블에서주어진키값을가지고있는레코드의위치 ( 배열인덱스 ) 를리턴하는함수 해시테이블 : 해시함수를가진키테이블임 11
12 초보적인해시테이블클래스 LISTING 9.4: A Naive Hash Table Class 1 public class HashTable implements Map { 2 private Entry[] entries = new Entry[11]; 3 private int size; 4 5 public Object get(object key) { 6 return entries[hash(key)].value; 7 } 8 9 public Object put(object key, Object value) { 10 entries[hash(key)] = new Entry(key,value); 11 ++size; 12 return null; 13 } 12
13 15 public Object remove(object key) { 16 int h = hash(key); 17 Object value = entries[h].value; 18 entries[h] = null; 19 --size; 20 return value; 21 } 23 public int size() { 24 return size; 25 } 27 private class Entry { 28 Object key, value; 29 Entry(Object k, Object v) { key = k; value = v; } 30 } private int hash(object key) { 33 return (key.hashcode() & 0x7FFFFFFF) % entries.length; 34 } 35 } 13
14 hashcode( ) Object 클래스는임의의객체에대해 int 를리턴하는 hashcode( ) 메소드를정의하고있다. 2- 문자 String iso 에대해 hashcode() 는 31*iso.charAt(0) + iso.charat(1) 을리턴 (key.hashcode() & 0x7FFFFFFF) % entries.length key.hashcode() 의맨앞비트를 0 으로변경하여양수로만듬 나머지연산 14
15 크기 7 인해시테이블 15
16 9.4 선형조사 충돌 (collision) : 해당키의버킷이이미다른키에의하여점유되어있을때 해시테이블에서충돌을해결하는가장단순한방법 충돌된레코드를배열의가용한다음셀에저장하는것 이알고리즘은각 조사 에서배열의인덱스를 1 씩증가시므로선형조사 (linear probing) 라고함 이러한방법은해당원소가해시값에의해인덱스된슬롯에항상배치되지는않고테이블의임의에장소에서끝날수있기때문에개방주소법 (open addressing) 이라고도함 16
17 선형조사 17
18 맨뒤에서맨앞으로연결 18
19 put() 메소드에대한수정된코드는다음과같음 public Object put(object key, Object value) { int h = hash(key); for (int i = 0; i < entries.length; i++) { } } int j = (h+i)%entries.length; Entry entry=entries[ j]; if (entry == null) { entries[ j] = new Entry(key,value); ++size; ++used; return null; // insertion success } throw new IllegalStateException(); // failure: table overflow return null; 19
20 그결과수정된 remove() 메소드는다음과같은형태가됨 public Object remove(object key) { int h = hash(key); for (int i = 0; i < entries.length; i++) { int j = (h+i)%entries.length; if (entries[ j] == null) break; if (entries[ j].key.equals(key)) { Object value = entries[ j].value; entries[j] = NIL; --size; return value; } } return null; // failure: key not found } private final Entry NIL = new Entry(null, null); 20
21 put() 메소드에대한다시수정된코드는다음과같음 public Object put(object key, Object value) { int h = hash(key); for (int i = 0; i < entries.length; i++) { } } int j = (h+i)%entries.length; Entry entry=entries[ j]; if (entry == null entry == NIL) { entries[ j] = new Entry(key,value); ++size; return null; // insertion success } throw new IllegalStateException(); // failure: table overflow return null; 21
22 get(key) 메소드에대한수정된코드는? 22
23 9.5 재해싱 (rehashing) 테이블오버플로문제를해결하는방법 : 더큰배열을사용하여테이블을재구축함 경험에의하면테이블이포화상태에이르기전에 rehash() 를호출하는것이좋은전략이라고알려져있음 이는 rehash() 에대한호출을발생시키는임계크기를설정해수행할수있음 임계값을저장하는대신에최대비율 r = n/m 을명세한다. 여기서, n=size 이고 m=entries.length 임 이비율을적재율 (load factor) 이라고하며, 그상한값은대개 75% 나 80% 근처로설정함 예, 적재율이 75% 일때배열길이를 11 로하여시작하면 rehash() 는 size 가 8.25 를초과할때 ( 즉, 9 번째레코드가삽입된후에 ) 호출될것임 이호출은해시테이블을길이 23 으로재구축하게됨 23
24 기존배열보다크기가 2 배인배열로이동시키는 rehash() 메소드 private void rehash() { Entry[] oldentries = entries; Entries = new Entry[2*oldEntries.length+1]; for (int k = 0; k < oldentries.length; k++) { Entry entry = oldentries[k]; if (entry == null entry == NIL) continue; int h = hash(entry.key); for (int i = 0; i < entries.length; i++) { int j = nextprobe(h,i); //overflow 처리 if (entries[ j]==null) { entries[j] = entry; break; } hash 메소드를재정의함 NIL 참조는복사되지않음 } } used = size; } 24
25 LISTING 9.5 정확한해시테이블클래스 1 public class HashTable implements Map { 2 private Entry[] entries; 3 private int size, used; 4 private float loadfactor; 5 private final Entry NIL = new Entry(null, null); 6 7 public HashTable(int capacity, float loadfactor) { 8 entries = new Entry[capacity]; 9 this.loadfactor = loadfactor; 10 } 12 public HashTable(int capacity) { 13 this(capacity, 0.75F); 14 } 16 public HashTable() { 17 this(101); 18 } 25
26 20 public Object get(object key) { 21 int h = hash(key); 22 for (int i = 0; i < entries.length; i++) { 23 int j = nextprobe(h,i); 24 Entry entry=entries[ j]; 25 if (entry == null) break; 26 if (entry == NIL) continue; 27 if (entry.key.equals(key)) return entry.value; 28 } 29 return null; // failure: key not found 30 } 32 public Object put(object key, Object value) { 33 if (used > loadfactor*entries.length) rehash(); 34 int h = hash(key); 35 for (int i = 0; i < entries.length; i++) { 36 int j = nextprobe(h,i); 37 Entry entry = entries[ j]; 38 if (entry == null) { 39 entries[ j] = new Entry(key, value); 40 ++size; 41 ++used; 42 return null; // insertion success 43 } 26
27 44 if (entry == NIL) continue; 45 if (entry.key.equals(key)) { 46 Object oldvalue = entry.value; 47 entries[ j].value = value; 48 return oldvalue; // update success 49 } 50 } 51 return null; // failure: table overflow 52 } 54 public Object remove(object key) { 55 int h = hash(key); 56 for (int i = 0; i < entries.length; i++) { 57 int j = nextprobe(h,i); 58 Entry entry = entries[ j]; 59 if (entry == null) break; 60 if (entry == NIL) continue; 61 if (entry.key.equals(key)) { 62 Object oldvalue = entry.value; 63 entries[ j] = NIL; 64 --size; 65 return oldvalue; // success 66 } 67 } 27
28 68 return null; // failure: key not found 69 } 71 public int size() { 72 return size; 73 } private class Entry { 76 Object key, value; 77 Entry(Object k, Object v) { key = k; value = v; } 78 } private int hash(object key) { 81 if (key == null) throw new IllegalArgumentException(); 82 return (key.hashcode() & 0x7FFFFFFF) % entries.length; 83 } private int nextprobe(int h, int i) { 86 return (h + i)%entries.length; // Linear Probing 87 } 28
29 89 private void rehash() { 90 Entry[] oldentries = entries; 91 entries = new Entry[2*oldEntries.length+1]; 92 for (int k = 0; k < oldentries.length; k++) { 93 Entry entry = oldentries[k]; 94 if (entry == null entry == NIL) continue; 95 int h = hash(entry.key); 96 for (int i = 0; i < entries.length; i++) { 97 int j = nextprobe(h,i); 98 if (entries[j] == null) { 99 entries[ j] = entry; 100 break; 101 } 102 } 103 } 104 used = size; 105 } 106 } 29
30 9.6 기타충돌해결알고리즘 선형조사 (linear probing) 는충돌의해결에있어서단순하고어느정도효율적인방법임 선형조사의문제점 기본집중 (primary clustering) 이발생 : 해시함수가테이블전체에대해레코드를균일하게분배하는데실패하면선형조사는함께묶인레코드의긴체인을만드는경우 예, 다음의 9 개국가에대한레코드를길이 m=101 인빈테이블에삽입한다고가정해보자. 30
31 선형조사의삽입예 길이 m=101 인빈테이블에삽입한다고가정해보자. put("fi", new Country("Finland", "Finnish", , )); put("iq", new Country("Iraq", "Arabic", , )); put("ir", new Country("Iran", "Farsi", , )); put("sk", new Country("Slovakia", "Slovak", 18859, )); put("ca", new Country("Canada", "English", , )); put("ly", new Country("Libya", "Arabic", , )); put("it", new Country("Italy", "Italian", , )); put("pe", new Country("Peru", "Spanish", , )); put("is", new Country("Iceland", "Islenska", 40000, )); 31
32 선형조사에서삽입후의충돌예 선형조사의경우, 아래와같은순서로 9 개의레코드를삽입하면 26 번의충돌이발생 : 해결방법은제곱조사 "FI" 21 "IQ" "IR" "SK" "CA" "LY" "IT" "PE" "IS"
33 제곱조사 선형조사의문제점 : 집중에의해성능이손상됨 하나의클러스터는그안에갭이없다. 그러므로 PE 와 IS 처럼클러스터의시작부근에해시되는새레코드들은한번에한단계씩여러레코드를거쳐야하므로충돌이늘어나고시간도낭비됨 제곱조사 (quadratic probing) : 이알고리즘은매번 1 씩증가하는대신에점진적으로더큰폭으로증가시켜충돌을해결함 이를구현하기위해서는 int j = (h + i)%entries.length 를 int j = (h + i*i)%entries.length; 로대체함 33
34 제곱조사 (2) int j = (h + i*i)%entries.length; 즉, 각충돌후에 h 에 i 를더하는대신에 i*i 를더한다. (quadratic 은변수의제곱을의미한다.) 따라서증분의순서는 1, 4, 9, 16, 25,... 가된다. 제곱조사는선형조사의충돌횟수를반으로줄임 결과가개선되는이유는제곱조사가사용이안된갭을중간에남겨두어선형조사보다적은집중을가져오기때문이다. 34
35 제곱조사에서삽입후의충돌예 제곱조사를이용하면동일한 9 개레코드의순서적인입력 에대해 13 번의충돌만이발생한다. "FI" 21 "IQ" "IR" "SK" "CA" "LY" "IT" 24 "PE" "IS"
36 LY 에대한제곱조사순서 36
37 제곱조사의문제점 이중해싱 길이가 m=11 인테이블에어떤키가인덱스 j=3 으로해시될때, 순서는 3, 4, 7, 1, 8, 6, 6, 8, 1, 7, 4, 3, 4, 7, 1, 8, 6, 6, 8, 1, 7, 4, 3 됨 이는희소주기순서이다. 이는 11 개셀중 6 개셀이모두점유되고나면다른 5 개의셀이비어있더라도 put() 은실패하게된다. 해결책 : 임계적재율을 50% 로설정함. 즉, 6 > 11/2 가됨 만약, 적재율을 50% 로제한한다해도, 2 차집중문제가발생함 37
38 이중해싱 (2) 2 차집중 (secondary clustering) : 동일한값으로해시되는 2 개의상이한키가동일한조사순서를가지게되는것이다. 해결책 : 이중해싱 (double hashing) 이중해싱 (double hashing) 조사순서를결정해주는제 2 의독립적인해시함수를사용 2 번째해시함수에의한상수증분은대개 1 보다큼 제곱조사처럼이중해싱도조사순서를넓게확대해서기본집중을피함 38
39 이중해싱을위한리스팅 9.5 의조정 20 public Object get(object key) { 21 int h = hash(key); int h = hash(key); int d = hash2(key); 22 for (int i = 0; i < entries.length; i++) { 23 int j = nextprobe(h,i); int j = nextprobe(h,d,i) : } 80 private int hash(object key) { 81 if (key == null) throw new IllegalArgumentException(); 82 return (key.hashcode() & 0x7FFFFFFF) % entries.length; 83 } private int nextprobe(int h, int i) { 86 return (h + i)%entries.length; // Linear Probing 87 } hash2( ) 는??? nextprobe(h,d,i) 는???
40 이중해싱에서삽입후의충돌예 동일한순서의 9 개레코드의입력에대해 5 번의충돌만발생 "FI" 21 "IQ" "IR" 22 "SK" "CA" "LY" "IT" 24 "PE" "IS" 23 40
41 9.7 별도체인 개방주소법 : 이제까지기술된해시알고리즘 개방주소법은충돌해결을위해배열내부에서개방된위치를탐색하기때문이다. 폐쇄주소법 (closed addressing) 폐쇄주소법은하나의해시위치에 1 개보다많은레코드를허용함으로써충돌을피한다. 따라서복잡한자료구조가필요. 별도체인 (separate chaining) 레코드의배열대신에버켓의배열을사용 버켓 (bucket) 이란일종의레코드의컬렉션임 가장단순한자료구조는하나의버켓에대해하나의연결리스트를사용하는것 41
42 체인을이용한폐쇄주소법 그림 9.7 은용량을 11 로, 적재율을 2.0 으로하고 15 개의유럽국가를적재한후의해시테이블을보이고있다. 키만을보이고있고전체레코드는보이지않고있다. 그림
43 폐쇄주소법 폐쇄주소법을사용하는해시테이블에대한자료구조가더복잡하기는하지만코드는약간더짧다. 빈 NIL 항목도필요하지않고충돌해결알고리즘도필요하지않다. 폐쇄주소법의경우체인의길이에제한이없으므로적재율이지원배열의길이를초과할수있다. 그렇지만, 긴체인을허용하게되면해시테이블의성능이저하된다. 그러므로테이블 size 가주어진임계값을넘어가면재해싱을수행함. 폐쇄주소법은충돌을방지하는명확한장점을가지고있다. 각버켓이임의개수의다수의키를저장할수있다면오버플로는일어나지않게될것이다. 단점은일부체인이매우길어질수있다는것이다. 매우불균형한버켓체인의배열은해싱이제공해야할상수시간접근의장점을파괴할수도있다. 43
44 별도체인에의한폐쇄주소법 LISTING 9.6: Closed Addressing by Separate Chaining 1 public class HashTable { 2 private Entry[] entries; 3 private int size; 4 private float loadfactor; 5 6 public HashTable(int capacity, float loadfactor) { 7 entries = new Entry[capacity]; 8 this.loadfactor = loadfactor; 9 } public HashTable(int capacity) { 12 this(capacity, 0.75F); 13 } public HashTable() { 16 this(101); 17 } 44
45 19 public Object get(object key) { 20 int h = hash(key); 21 for (Entry e = entries[h]; e!= null; e = e.next) { 22 if (e.key.equals(key)) return e.value; // success 23 } 24 return null; // failure: key not found 25 } 27 public Object put(object key, Object value) { 28 int h = hash(key); 29 for (Entry e = entries[h]; e!= null; e = e.next) { 30 if (e.key.equals(key)) { 31 Object oldvalue = e.value; 32 e.value = value; 33 return oldvalue; // successful update 34 } 35 } 36 entries[h] = new Entry(key,value,entries[h]); 37 ++size; 38 if (size > loadfactor*entries.length) rehash(); 39 return null; // successful insertion 40 } 45
46 42 public Object remove(object key) { 43 int h = hash(key); 44 for (Entry e = entries[h], prev=null; e!=null; prev=e, e=e.next) { 45 if (e.key.equals(key)) { 46 Object oldvalue = e.value; 47 if (prev == null) entries[h] = e.next; 48 else prev.next = e.next; 49 --size; 50 return oldvalue; // success 51 } 52 } 53 return null; // failure: key not found 54 } 56 public int size() { 57 return size; 58 } 46
47 60 private class Entry { 61 Object key, value; 62 Entry next; 63 Entry(Object k, Object v, Entry n) { key=k; value=v; next=n; } 64 public String tostring() { 65 return key + "=" + (Country)value; 66 } 67 } 69 private int hash(object key) { 70 if (key == null) throw new IllegalArgumentException(); 71 return (key.hashcode() & 0x7FFFFFFF) % entries.length; 72 } 47
48 74 private void rehash() { 75 Entry[] oldentries = entries; 76 entries = new Entry[2*oldEntries.length+1]; 77 for (int k = 0; k < oldentries.length; k++) { 78 for (Entry old = oldentries[k]; old!= null; ) { 79 Entry e = old; 80 old = old.next; 81 int h = hash(e.key); 82 e.next = entries[h]; 83 entries[h] = e; 84 } 85 } 86 } 87 } 48
49 9.8 java.util.map 인터페이스 LISTING 9.7: The java.util.map Interface 1 public interface Map { 2 public void clear(); 3 public boolean containskey(object key); 4 public boolean containsvalue(object value); 5 public Set entryset(); 6 public boolean equals(object object); 7 public Object get(object key); 8 public int hashcode(); 9 public boolean isempty(); 10 public Set keyset(); 11 public Object put(object key, Object value); : 23 } java.util.hashmap 이 java.util.map 인터페이스를구현 - 디폴트초기용량 디폴트최대적재율이 0.75 인폐쇄주소법사용 49
50 1 public class TestMap { 2 public static void main(string[] args) { 3 java.util.map map = new java.util.hashmap(); 4 map.put("at", new Country("Austria", "German", 32378, )); 5 map.put("be", new Country("Belgium", "Dutch", 11800, )); 6 map.put("dk", new Country("Denmark", "Danish", 16639, )); 7 map.put("fr", new Country("France", "French", , )); 8 map.put("gr", new Country("Greece", "Greek", 50900, )); 9 map.put("ie", new Country("Ireland", "English", 27100, )); 10 map.put("it", new Country("Italy", "Italian", , )); 11 map.put("es", new Country("Spain", "Spanish", , )); 12 System.out.println("map.keySet(): " + map.keyset()); 13 System.out.println("map.size(): " + map.size()); 14 System.out.println("map.get(\"ES\"): " + map.get("es")); 15 Country es = (Country)map.get("ES"); 16 es.population = ; 17 System.out.println("map.get(\"ES\"): " + map.get("es")); 18 System.out.println("map.remove(\"ES\"): " + map.remove("es")); 19 System.out.println("map.get(\"ES\"): " + map.get("es")); 20 System.out.println("map.keySet(): " + map.keyset()); 21 System.out.println("map.size(): " + map.size()); } } 50
51 출력결과 map.keyset(): [AT, FR, GR, DK, IT, BE, ES, IE] map.size(): 8 map.get("es"): (Spain,Spanish,194880, ) map.get("es"): (Spain,Spanish,194880, ) map.remove("es"): (Spain,Spanish,194880, ) map.get("es"): null map.keyset(): [AT, FR, GR, DK, IT, BE, IE] map.size(): 7 51
52 9.9 해싱알고리즘의분석 4 개해싱알고리즘의평균실행 - 시간복잡도 이공식들은지원배열의길이 m 이크고 hash() 메소드가주어진모든키값의집합에대해범위 0 h<m 사이에균일하게분포된인덱스번호 h 를리턴하는것으로가정한다. 해시테이블에대한적재율이비율 r=n/m 이고, 이때 n 은테이블의레코드수, m 은지원배열의길이 (entries.length), q = 1/(1-r) = m/(m-n) 으로정의된다 키를찾음 키를찾지못함 개방주소법 (r<1) 선형조사제곱조사이중해싱 (1+q)/2 1+ln q-r/2 (ln q)/r (1+q 2 )/2 q+ln q-r q 폐쇄주소법별도체인 1+r/2 r 52
53 예, r=75% ( 따라서 q = 4.0 이고 ln q = 1.386) 라면, 이공식들은다음의표와같은값들을갖게된다. 주어진적재율에대한평균실행시간은테이블에서아래로갈수록좋아지는것을알수있음. 일반적으로별도체인을이용한폐쇄주소법이개방주소법알고리즘보다성능이우수하다. java.util.hashmap 클래스가이알고리즘을사용하는이유는이때문이다. 키를찾음 키를찾지못함 개방주소법 (r<1) 선형조사제곱조사이중해싱 폐쇄주소법별도체인
54 9.10 완전해시함수 개방주소법이폐쇄주소법보다잘작동하는경우 완전해시함수 (perfect hash function) 일때 해시함수가모든가능한키의집합에대해일대일이될때 보통이런특별한상황은매우드물지만, 전체키집합을미리알수있다면, 해시테이블과해시함수고안이가능 완전해시함수가발견되면개방주소법 ( 조사과정이필요없는 ) 이가장좋다. 이러한자료구조를종종조사표 (lookup table) 라고한다. 이방법은공간을낭비한다. 한예에서는길이 77 인배열이 15 레코드저장에사용되어적재율이 20% 보다낮아진다. 54
55 최소완전해시함수 최소완전해시함수 (minimal perfect hash function) 일대일이면서 100% 적재율을가진완전해시함수 이함수의발견은매우어렵지만, 함수의탐색과정을도와주는알고리즘중하나가 1980 년에 R. J. Cichelli 에의해서제안되었음. 문자열에대한완전해시함수발견함 최소완전해시함수는전체키집합이미리알려져있고변하지않을때유용하다. 컴파일러에서사용되는프로그래밍언어의예약어에대한테이블이이러한형태이다. 55
56 9.11 기타해시함수 완전해시함수가불가능하다면, 최선의해시함수는레코드를해시테이블전체에고르게분배하는것임. 제산 (division) 해시함수 이함수는큰정수를테이블의길이로나눈나머지를사용 예를들어, num(key) % entries.length (key.hashcode() & 0x7FFFFFFF) % entries.length 또다른해싱방법은추출 (extraction) 이는키의일부분에적용된제산방법으로볼수있다. 예, 일주일의 7 개요일의이름에대한해싱은모두동일한접미어 day 를가지기때문에각키워드의마지막 3 개문자를생략함 56
57 중첩해시함수 (folding hash function) 키가단순한정수일경우간단한솔루션을제공한다. 이방법은숫자문자열을여러부분으로분리하고나서이들을함께 중첩 시킨다. 예, 9- 자리코드로구성된미국의사회보장번호 를해싱하는경우, 해시값 37 의계산방법 1. 해당하는긴정수를구성 : 이를 3개부분으로분리 : 054, 361, 중간부분을역순으로배열 : 054, 163, 각부분들을더함 : = 테이블길이로나눈나머지를구함 : 946%101 = 37 개인레코드에대한용량이 101 인해시테이블에서사회보장번호 를갖는레코드는 table[37] 에저장 57
58 중첩 58
쉽게배우는알고리즘 6장. 해시테이블 테이블 Hash Table
쉽게배우는알고리즘 6장. 해시테이블 테이블 Hash Table http://academy.hanb.co.kr 6장. 해시테이블 테이블 Hash Table 사실을많이아는것보다는이론적틀이중요하고, 기억력보다는생각하는법이더중요하다. - 제임스왓슨 - 2 - 학습목표 해시테이블의발생동기를이해한다. 해시테이블의원리를이해한다. 해시함수설계원리를이해한다. 충돌해결방법들과이들의장단점을이해한다.
More informationPowerPoint Presentation
Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section
More information14장.탐색
---------------- DATA STRUCTURES USING C ---------------- CHAPTER 탐색 1/28 탐색 (search) 이란? 여러개의자료중에서원하는자료를찾는작업 컴퓨터가가장많이하는작업중의하나 탐색을효율적으로수행하는것은매우중요 탐색키 (search key) 항목과항목을구별해주는키 (key) 탐색을위하여사용되는자료구조 배열,
More information슬라이드 1
컬렉션프레임워크 (Collection Framework) 의정의 - 다수의데이터를쉽게처리할수있는표준화된방법을제공하는클래스들 - 데이터의집합을다루고표현하기위한단일화된구조 (architecture) - JDK 1.2 이전까지는 Vector, Hashtable, Properties와같은컬렉션클래스로서로다른각자의방식으로처리 - 컬렉션프레임워크는다수의데이터를다루는데필요한다양하고풍부한클래스들을제공하므로프로그래머의부담을상당부분덜어준다.
More informationPowerPoint Presentation
자바프로그래밍 1 배열 손시운 ssw5176@kangwon.ac.kr 배열이필요한이유 예를들어서학생이 10 명이있고성적의평균을계산한다고가정하자. 학생 이 10 명이므로 10 개의변수가필요하다. int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; 하지만만약학생이 100 명이라면어떻게해야하는가? int s0, s1, s2, s3, s4,
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More informationJAVA PROGRAMMING 실습 08.다형성
2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스
More information쉽게배우는알고리즘 6 장. 해시테이블 Hash Table IT COOKBOOK 6 장. 해시테이블 Hash Table 그에게서배운것이아니라이미내속에있었던것이그와공명을한것이다. - 제임스왓슨 한
쉽게배우는알고리즘 6 장. 해시테이블 Hash Table http://academy.hanb.co.kr 6 장. 해시테이블 Hash Table 그에게서배운것이아니라이미내속에있었던것이그와공명을한것이다. - 제임스왓슨 - 2 - 한빛미디어 학습목표 해시테이블의발생동기를이해한다. 해시테이블의원리를이해한다. 해시함수설계원리를이해한다. 충돌해결방법들과이들의장단점을이해한다.
More informationPowerPoint Presentation
Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More information항상쌍 ( 키, 값 ) 으로만데이터를저장하는클래스 의최고조상 : Map - Map을조상으로하는클래스, HashTable, HashMap, LinkedHashMap, TreeMap 등은데이터를저장할때반드시 키 와 값 의쌍으로저장한다. - Map에저장되는 키 는중복되면안되
무엇이든다받아주는클래스 2 컬렉션프레임워크에저장된데이터를순차적으로처리하는방법 : Iterator 객체사용 - get() 메서드를사용하면 Iterator 를사용하지않아도원하는위치의데이터를찾을수있다. - get() 메서드는원하는데이터를찾는작업을항상처음데이터부터시작한다. - Iterator 는주소를사용해서현재탐색한위치부터새로운탐색을시작하므로, 위의 get() 메서드보다훨씬처리시
More informationPowerPoint 프레젠테이션
제 6 장해시테이블 6.1 해시테이블 이진탐색트리의성능을개선한 AVL 트리와레드블랙트리의삽입과삭제연산의수행시간은각각 O(logN) 그렇다면 O(logN) 보다좋은성능을갖는자료구조는없을까? [ 핵심아이디어 ] O(logN) 시간보다빠른연산을위해, 키와 1 차원리스트의인덱스의관계를이용하여키 ( 항목 ) 를저장한다. [ 그림 6-2] 키를그대로 1 차원리스트의인덱스로사용
More information슬라이드 1
CHAP 6: 큐 yicho@gachon.ac.kr 1 큐 (QUEUE) 큐 : 먼저들어온데이터가먼저나가는자료구조 선입선출 (FIFO: First-In First-Out) ( 예 ) 매표소의대기열 Ticket Box 전단 () 후단 () 2 큐 ADT 삽입과삭제는 FIFO 순서를따른다. 삽입은큐의후단에서, 삭제는전단에서이루어진다. 객체 : n 개의 element
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationPowerPoint Presentation
Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음
More informationChapter 4. LISTS
6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립
More informationPowerPoint 프레젠테이션
실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3
More information<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>
Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.
More information06장.리스트
---------------- DATA STRUCTURES USING C ---------------- CHAPTER 리스트 1/28 리스트란? 리스트 (list), 선형리스트 (linear list) 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 리스트의예 요일 : ( 일요일, 월요일,, 토요일 ) 한글자음의모임 : ( ㄱ, ㄴ,, ㅎ ) 카드 :
More information정의 이진탐색트리 이진탐색트리 (BST: binary search tree) 는각각의노드가 BST 특성을만족하는키 - 주소쌍을가지고있는이진트리 BST 특성 트리에있는각각의키에대해, 왼쪽서브트리에있는모든키는이것보다작고, 오른쪽서브트리에있는모든키는이것보다큼 < > 2
13. 탐색트리 AVL 트리, B- 트리, 2-3-4 트리 정의 이진탐색트리 이진탐색트리 (BST: binary search tree) 는각각의노드가 BST 특성을만족하는키 - 주소쌍을가지고있는이진트리 BST 특성 트리에있는각각의키에대해, 왼쪽서브트리에있는모든키는이것보다작고, 오른쪽서브트리에있는모든키는이것보다큼 < > 2 이진탐색트리의예 3 BST 의최선과최악의경우
More information07 자바의 다양한 클래스.key
[ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,
More informationMicrosoft PowerPoint 자바-기본문법(Ch2).pptx
자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March
More informationA Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationq 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2
객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가
More information02장.배열과 클래스
---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :
More informationMicrosoft PowerPoint - ch14 - Hash Map
2015-1 14. Hash Map 2015 년 6 월 1 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline Hashing 이란? 사전 (dictionary), map, table과해싱
More informationMicrosoft PowerPoint - Java7.pptx
HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More informationPowerPoint 프레젠테이션
@ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program
More information슬라이드 1
UNIT 6 배열 로봇 SW 교육원 3 기 학습목표 2 배열을사용핛수있다. 배열 3 배열 (Array) 이란? 같은타입 ( 자료형 ) 의여러변수를하나의묶음으로다루는것을배열이라고함 같은타입의많은양의데이터를다룰때효과적임 // 학생 30 명의점수를저장하기위해.. int student_score1; int student_score2; int student_score3;...
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information4.1 관계
심볼테이블 사전 (dictionary) 철자검색기, 시소러스, 데이터베이스관리응용에서데이터사전 로더, 어셈블러, 컴파일러에의해생성되는심볼테이블 컴퓨터분야에서는심볼테이블이라는용어를사용 심볼테이블 이름 - 속성쌍의집합 C++ 에서 map words ; words[ time ] = 1 ; 시소러스는이름은단어, 속성은동의어 컴파일러는이름은식별자로,
More informationgnu-lee-oop-kor-lec11-1-chap15
어서와 Java 는처음이지! 제 15 장컬렉션 컬렉션 (collection) 은자바에서자료구조를구현한클래스 자료구조로는리스트 (list), 스택 (stack), 큐 (queue), 집합 (set), 해쉬테이블 (hash table) 등이있다. 자바는컬렉션인터페이스와컬렉션클래스로나누어서제공한다. 자바에서는컬렉션인터페이스를구현한클래스도함께제공하므로이것을간단하게사용할수도있고아니면각자필요에맞추어인터페이스를자신의클래스로구현할수도있다.
More informationMicrosoft PowerPoint - 2강
컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.
More information선형대수학 Linear Algebra
배열, 컬렉션, 인덱서 array, collection, indexer 소프트웨어학과 HCI 프로그래밍강좌 배열 배열 (array) 동일한자료형을다수선언 선언형식 데이터형식 [ ] 배열이름 = new 데이터형식 [ 개수 ]; int[ ] array = new int[5]; 인덱스 (index) 는 0 에서시작 scores[0] = 80; scores[1] =
More information<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>
Power Java 제 19 장배치관리자 이번장에서학습할내용 배치관리자의개요 배치관리자의사용 FlowLayout BorderLayout GridLayout BoxLayout CardLayout 절대위치로배치 컨테이너안에서컴포넌트를배치하는방법에대하여살펴봅시다. 배치관리자 (layout manager) 컨테이너안의각컴포넌트의위치와크기를결정하는작업 [3/70] 상당히다르게보인다.
More information컴파일러
YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",
More informationDesign Issues
11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance
More information교육자료
THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성
More informationJAVA PROGRAMMING 실습 05. 객체의 활용
public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string
More information제8장 자바 GUI 프로그래밍 II
제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로
More informationJAVA PROGRAMMING 실습 09. 예외처리
2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오
More information쉽게 풀어쓴 C 프로그래밊
Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.
More informationrmi_박준용_final.PDF
(RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:
More information쉽게 풀어쓴 C 프로그래밍
Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성
More information강의 개요
DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE
More informationgnu-lee-oop-kor-lec10-1-chap10
어서와 Java 는처음이지! 제 10 장이벤트처리 이벤트분류 액션이벤트 키이벤트 마우스이동이벤트 어댑터클래스 스윙컴포넌트에의하여지원되는이벤트는크게두가지의카테고리로나누어진다. 사용자가버튼을클릭하는경우 사용자가메뉴항목을선택하는경우 사용자가텍스트필드에서엔터키를누르는경우 두개의버튼을만들어서패널의배경색을변경하는프로그램을작성하여보자. 이벤트리스너는하나만생성한다. class
More information@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a
1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL
More informationJUNIT 실습및발표
JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected
More information7장인덱스된 순차화일 DBLAB, SNU v 인덱스된순차화일의구조 u 인덱스된순차화일 (indexed sequential file) 은순차데이타화일 (sequential data file) 과인덱스 (index) 로구성 u 순차데이타화일 키값에따라레코드들이순차적으로정렬
7장인덱스된 순차화일 v 인덱스된순차화일의구조 u 인덱스된순차화일 (indexed sequential file) 은순차데이타화일 (sequential data file) 과인덱스 (index) 로구성 u 순차데이타화일 키값에따라레코드들이순차적으로정렬 레코드전체에대한순차접근을지원 u 인덱스화일 화일의레코드들에대한키값과포인터를저장 개별레코드에대한직접접근을지원 u
More information1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a
6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;
More informationPowerPoint 프레젠테이션
@ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field
More informationJAVA PROGRAMMING 실습 02. 표준 입출력
# 메소드의구조자주반복하여사용하는내용에대해특정이름으로정의한묶음 반환형메소드이름 ( 매개변수 ) { 실행문장 1; : 실행문장 N; } 메소드의종류 Call By Name : 메서드의이름에의해호출되는메서드로특정매개변수없이실행 Call By Value : 메서드를이름으로호출할때특정매개변수를전달하여그값을기초로실행하는메서드 Call By Reference : 메서드호출시매개변수로사용되는값이특정위치를참조하는
More informationPowerPoint Presentation
public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +
More informationPowerPoint Presentation
객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television
More informationPowerPoint 프레젠테이션
인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More information09-interface.key
9 Database insert(record r): boolean find(key k): Record 1 Record getkey(): Key * Record Key Database.? Key equals(key y): boolean Database insert(record r): boolean find(key k): Record * Database OK 1
More information(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public
Chapter 9 Lab 문제정답 1. public class Circle private double radius; static final double PI=3.141592; // PI 이름으로 3.141592 로초기화된정적상수 (1) public Circle(double r) radius = r; (2) public double getradius() return
More informationgnu-lee-oop-kor-lec06-3-chap7
어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base
More information제11장 프로세스와 쓰레드
제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드
More informationJAVA PROGRAMMING 실습 02. 표준 입출력
# 왜생겼나요..? : 절차지향언어가가진단점을보완하고다음의목적을달성하기위해..! 1. 소프트웨어생산성향상 객체지향소프트웨어를새로만드는경우이미만든개체지향소프트웨어를상속받거나객체를 가져다재사용할수있어부분수정을통해소프트웨어를다시만드는부담줄임. 2. 실세계에대한쉬운모델링 실세계의일은절차나과정보다는일과관련된많은물체들의상호작용으로묘사. 캡슐화 메소드와데이터를클래스내에선언하고구현
More information- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=
JPA 와 Hibernate - 스프링의 JDBC 대신에 JPA를이용한 DB 데이터검색작업 - JPA(Java Persistence API) 는자바의 O/R 매핑에대한표준지침이며, 이지침에따라설계된소프트웨어를 O/R 매핑프레임워크 라고한다. - O/R 매핑 : 객체지향개념인자바와관계개념인 DB 테이블간에상호대응을시켜준다. 즉, 객체지향언어의인스턴스와관계데이터베이스의레코드를상호대응시킨다.
More information슬라이드 1
UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)
More informationMicrosoft PowerPoint - Chap12-OOP.ppt
객체지향프로그래밍 (Object Oriented Programming) 12 장강사 강대기 차례 (Agenda) 멤버에대한동적메모리할당 암시적 / 명시적복사생성자 암시적 / 명시적오버로딩대입연산자 생성자에 new 사용하기 static 클래스멤버 객체에위치지정 new 사용하기 객체를지시하는포인터 StringBad 클래스 멤버에포인터사용 str static 멤버
More informationchap 5: Trees
Chapter 5. TREES 목차 1. Introduction 2. 이진트리 (Binary Trees) 3. 이진트리의순회 (Binary Tree Traversals) 4. 이진트리의추가연산 5. 스레드이진트리 (Threaded Binary Trees) 6. 히프 (Heaps) 7. 이진탐색트리 (Binary Search Trees) 8. 선택트리 (Selection
More informationSpring Boot/JDBC JdbcTemplate/CRUD 예제
Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.
More informationJava ...
컴퓨터언어 1 Java 제어문 조성일 조건문 : if, switch 어떠한조건을조사하여각기다른명령을실행 if 문, switch 문 if 문 if - else 문형식 if 문형식 if ( 조건식 ) { 명령문 1; 명령문 2;... if ( 조건식 ) { 명령문 1; 명령문 2;... else { 명령문 a; 명령문 b;... 예제 1 정수를입력받아짝수와홀수를판별하는프로그램을작성하시오.
More informationC++ Programming
C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator
More informationMicrosoft PowerPoint - C++ 5 .pptx
C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성
More information어댑터뷰
04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결
More informationPowerPoint Template
16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //
More informationChapter 4. LISTS
연결리스트의응용 류관희 충북대학교 1 체인연산 체인을역순으로만드는 (inverting) 연산 3 개의포인터를적절히이용하여제자리 (in place) 에서문제를해결 typedef struct listnode *listpointer; typedef struct listnode { char data; listpointer link; ; 2 체인연산 체인을역순으로만드는
More information리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ
00. 리스트 자료구조 01. 링크드 리스트 02. 더블 링크드 리스트 03. 환형 링크드 리스트 리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : (
More information8장직접화일 DBLAB, SNU v 직접화일의개념 u 임의접근화일 (random access file) 임의의레코드키값으로그레코드를접근할수있는화일 직접화일 (direct file), 직접접근화일 (direct access file) 다른레코드를참조하지않고특정레코드접근이
8장직접화일 v 직접화일의개념 u 임의접근화일 (random access file) 임의의레코드키값으로그레코드를접근할수있는화일 직접화일 (direct file), 직접접근화일 (direct access file) 다른레코드를참조하지않고특정레코드접근이가능 순차접근화일 u 직접화일의종류 인덱스된화일 (indexed file) 인덱스를이용해레코드를접근 인덱스된순차화일
More information1장. 리스트
01. 링크드리스트 02. 더블링크드리스트 03. 환형링크드리스트 배열과는달리유연하게크기를바꿀수있는자료구조 각노드는다음노드를가리키는포인터를가짐. 각노드를다음노드를가리키는포인터로연결하여만든리스트. Single Linked List 라고도함. 링크드리스트의첫번째노드를헤드 (Head), 마지막노드를테일 (Tail) 이라고한다. C 언어로표현하는링크드리스트의노드 typedef
More informationMicrosoft PowerPoint - chap05-제어문.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.
More information11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)
Java Program Performance Tuning ( ) n (Primes0) static List primes(int n) { List primes = new ArrayList(n); outer: for (int candidate = 2; n > 0; candidate++) { Iterator iter = primes.iterator(); while
More informationMicrosoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
More informationMicrosoft PowerPoint - additional01.ppt [호환 모드]
1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능
More informationA Tour of Java V
A Tour of Java V Sungjoo Ha April 3rd, 2015 Sungjoo Ha 1 / 28 Review First principle 문제가생기면침착하게영어로구글에서찾아본다. 타입은가능한값의집합과연산의집합을정의한다. 기본형이아니라면이름표가메모리에달라붙는다. 클래스로사용자정의타입을만든다. 프로그래밍은복잡도관리가중요하다. OOP 는객체가서로메시지를주고받는방식으로프로그램을구성해서복잡도관리를꾀한다.
More informationchap x: G입력
재귀알고리즘 (Recursive Algorithms) 재귀알고리즘의특징 문제자체가재귀적일경우적합 ( 예 : 피보나치수열 ) 이해하기가용이하나, 비효율적일수있음 재귀알고리즘을작성하는방법 재귀호출을종료하는경계조건을설정 각단계마다경계조건에접근하도록알고리즘의재귀호출 재귀알고리즘의두가지예 이진검색 순열 (Permutations) 1 장. 기본개념 (Page 19) 이진검색의재귀알고리즘
More informationMicrosoft PowerPoint - 알고리즘_5주차_1차시.pptx
Basic Idea of External Sorting run 1 run 2 run 3 run 4 run 5 run 6 750 records 750 records 750 records 750 records 750 records 750 records run 1 run 2 run 3 1500 records 1500 records 1500 records run 1
More information슬라이드 1
CHP 6: 큐 C 로쉽게풀어쓴자료구조 생능출판사 2005 큐 (QUEUE) 큐 : 먼저들어온데이터가먼저나가는자료구조 선입선출 (FIFO: First-In First-Out) ( 예 ) 매표소의대기열 Ticket Box 전단 () 후단 () 큐 DT 삽입과삭제는 FIFO 순서를따른다. 삽입은큐의후단에서, 삭제는전단에서이루어진다. 객체 : n 개의 element
More informationuntitled
- -, (insert) (delete) - - (insert) (delete) (top ) - - (insert) (rear) (delete) (front) A A B top A B C top push(a) push(b) push(c) A B top pop() top A B D push(d) top #define MAX_STACK_SIZE 100 int
More information원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를
리스트에대한설명중틀린것은 구조체도리스트의요소가될수있다 리스트의요소간에는순서가있다 리스트는여러가지방법으로구현될수있다 리스트는집합과동일하다 다음은순차적표현과연결된표현을비교한것이다 설명이틀린것은 연결된표현은포인터를가지고있어상대적으로크기가작아진다 연결된표현은삽입이용이하다 순차적표현은연결된표현보다액세스시간이많이걸린다 연결된표현으로작성된리스트를 개로분리하기가쉽다 다음은연결리스트에서있을수있는여러가지경우를설명했는데잘못된항목은
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More information2002년 2학기 자료구조
자료구조 (Data Structures) Chapter 1 Basic Concepts Overview : Data (1) Data vs Information (2) Data Linear list( 선형리스트 ) - Sequential list : - Linked list : Nonlinear list( 비선형리스트 ) - Tree : - Graph : (3)
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More informationMicrosoft PowerPoint - Introduction to Google Guava.pptx
2012 년자바카페 OPEN 세미나 주제 : Introduction to Google Guava 2012. 6. 16 김흥래 hrkim3468@gmail.com Java Developer s Forum JavaCafe community 구아바???? Java Developer s Forum JavaCafe Community 소개 Google Core Library
More informationThisJava ..
자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,
More information(Microsoft Word - \301\337\260\243\260\355\273\347.docx)
내장형시스템공학 (NH466) 중간고사 학번 : 이름 : 문제 배점 점수 1 20 2 20 3 20 4 20 5 10 6 10 7 15 8 20 9 15 합계 150 1. (20 점 ) 다음용어에대해서설명하시오. (1) 정보은닉 (Information Hiding) (2) 캡슐화 (Encapsulation) (3) 오버로딩 (Overloading) (4) 생성자
More information