πŸ“ Computer Science

    인덱슀(Index)

    인덱슀(Index)

    인덱슀(Index) 데이터 λ ˆμ½”λ“œλ₯Ό λΉ λ₯΄κ²Œ μ ‘κ·Όν•˜κΈ° μœ„ν•΄ 쌍으둜 κ΅¬μ„±λ˜λŠ” 데이터 ꡬ쑰이닀. 데이터 ν…Œμ΄λΈ”μ„ Full Scan ν•˜μ§€ μ•Šκ³  인덱슀λ₯Ό μ΄μš©ν•΄ κ²€μƒ‰ν•΄μ„œ 검색 속도 ν–₯μƒν•˜κ³  λ””μŠ€ν¬ μ—°μ‚° 횟수λ₯Ό 쀄인닀. 검색 쿼리의 μ„±λŠ₯을 μ›”λ“±νžˆ ν–₯μƒμ‹œν‚€λŠ” μΈλ±μŠ€κ°€ 항상 μ’‹μ§€λ§Œμ€ μ•Šλ‹€. 인덱슀λ₯Ό μƒμ„±ν•˜κ²Œ 되면 μ‚½μž…, μ‚­μ œ, κ°±μ‹  λ“±μ˜ 좔가적인 과정이 λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— 그만큼 μ„±λŠ₯ 손싀이 λ°œμƒν•œλ‹€. 인덱슀 μ—”νŠΈλ¦¬: 인덱슀 파일의 λ ˆμ½”λ“œμ΄λ‹€. 데이터 λ ˆμ½”λ“œμ˜ μˆ˜λ³΄λ‹€ μž‘κ±°λ‚˜ κ°™λ‹€. μ’…λ₯˜ 밀집 인덱슀: 데이터 파일 λ‚΄ λͺ¨λ“  ν‚€ 값을 인덱슀 μ—”νŠΈλ¦¬λ‘œ μ •μ˜ν•œλ‹€. Ex) ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀 ν¬μ†Œ 인덱슀: 탐색 κ°’ 일뢀에 λŒ€ν•΄μ„œλ§Œ 인덱슀 μ—”νŠΈλ¦¬λ₯Ό μ •μ˜ν•œλ‹€. Ex) κΈ°λ³Έ 인덱슀, 보쑰 인덱슀 1) ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀 vs λ„Œν΄λŸ¬μŠ€ν„°λ“œ ..

    λ°μ΄ν„°λ² μ΄μŠ€(DataBase)

    파일 μ‹œμŠ€ν…œκ³Ό λ°μ΄ν„°λ² μ΄μŠ€ λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ‘΄μž¬ν•˜κΈ° μ΄μ „μ—λŠ” 파일 μ‹œμŠ€ν…œμ„ μ΄μš©ν•˜μ—¬ 데이터λ₯Ό κ΄€λ¦¬ν•˜μ˜€λ‹€. 1. 파일 μ‹œμŠ€ν…œ 파일 μ‹œμŠ€ν…œμ€ νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ 자료λ₯Ό κ΄€λ¦¬ν•˜λŠ” λ°©λ²•μœΌλ‘œ νŒŒμΌμ€ 물리적인 λΉ„νŠΈμ˜ 연속이고 순차적인 λ ˆμ½”λ“œλ“€λ‘œ κ΅¬μ„±λœλ‹€. μ—¬κΈ°μ„œ λ ˆμ½”λ“œλž€ μ—°κ΄€λœ ν•„λ“œλ“€μ˜ λͺ¨μž„을 λ§ν•œλ‹€. 데이터에 λŒ€ν•œ ν”„λ‘œκ·Έλž¨μ˜ μ˜μ‘΄λ„κ°€ λ†’μŒ(쒅속성): ν”„λ‘œκ·Έλž¨ μ•ˆμ— λ°μ΄ν„°μ˜ μ •μ˜κ°€ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 데이터 ꡬ쑰λ₯Ό μˆ˜μ •ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ„ μˆ˜μ •ν•΄μ•Ό ν•œλ‹€. λ°μ΄ν„°μ˜ μ€‘λ³΅μ„±μœΌλ‘œ 뢈일치 ν˜„μƒ: λ™μΌν•œ 사싀에 μ„œλ‘œ λ‹€λ₯Έ 데이터가 μ‘΄μž¬ν•΄μ„œ 정보에 λŒ€ν•œ ν˜Όλž€κ³Ό μ €μž₯ 곡간 λ‚­λΉ„κ°€ λ°œμƒν•œλ‹€. λΆ€μ‘±ν•œ κΈ°λŠ₯ 데이터 λͺ¨λΈλ§ κ°œλ…: ν”„λ‘œκ·Έλž˜λ°μ— κ·œμΉ™μ΄ μ—†λ‹€. μ§ˆμ˜μ–΄: 일일이 ν”„λ‘œκ·Έλž˜λ°ν•΄μ•Ό ν•œλ‹€. λ™μ‹œμ„± μ œμ–΄: μ—¬λŸ¬ μ‚¬μš©μžκ°€ λ™μ‹œμ— μ•‘μ„ΈμŠ€ ν•˜λ©΄ 데이터..

    ν•΄μ‹œ(Hash)

    ν•΄μ‹œ(Hash)

    ν•΄μ‹œ(Hash) 적은 μžμ›μœΌλ‘œ 데이터λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μž„μ˜μ˜ 길이 데이터λ₯Ό κ³ μ •λœ 길이의 λ°μ΄ν„°λ‘œ λ§€ν•‘ν•˜λŠ” 것이닀. ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ €μž₯ν•  데이터와 μ—°κ΄€λœ κ³ μœ ν•œ 숫자λ₯Ό λ§Œλ“  λ’€ 이λ₯Ό 인덱슀둜 μ‚¬μš©ν•œλ‹€. λ‚΄λΆ€μ μœΌλ‘œ 배열을 μ΄μš©ν•˜μ—¬ 데이터λ₯Ό μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— λΉ λ₯Έ 검색 속도(O(1))λ₯Ό κ°–λŠ”λ‹€. 1. ν•΄μ‹œ ν•¨μˆ˜(Hash Function) μ €μž₯ν•  데이터와 μ—°κ΄€λœ κ³ μœ ν•œ 숫자(Hash Code)λ₯Ό λ§Œλ“ λ‹€. μ €μž₯λ˜λŠ” κ°’λ“€μ˜ key 값을 ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 μž‘μ€ λ²”μœ„μ˜ κ°’λ“€λ‘œ λ°”κΎΌλ‹€. 2. ν•΄μ‹œ ν…Œμ΄λΈ” ν•΄μ‹œ ν…Œμ΄λΈ”μ€ μ›μ†Œκ°€ μ €μž₯될 μžλ¦¬κ°€ μ›μ†Œμ˜ 값에 μ˜ν•΄ κ²°μ •λ˜λŠ” 자료ꡬ쑰둜 μž„μ˜μ˜ μ›μ†Œλ₯Ό ν•΄μ‹œ ν…Œμ΄λΈ”μ— μ €μž₯ν•˜λ €λ©΄ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 ν•΄μ‹œ 값을 κ³„μ‚°ν•˜κ³  ν•΄μ‹œ 값에 따라 μ €μž₯ν•œλ‹€. 3. 좩돌(Collisi..

    κ·Έλž˜ν”„(Graph)

    κ·Έλž˜ν”„(Graph)

    κ·Έλž˜ν”„(Graph) 정점(Vertex)κ³Ό κ°„μ„ (Edge)의 집합이닀. λ°©ν–₯μ„±(Directed) κ·Έλž˜ν”„: 간선에 λ°©ν–₯성이 ν¬ν•¨λœ κ·Έλž˜ν”„μ΄λ‹€. 무방ν–₯μ„±(Undirected) κ·Έλž˜ν”„: λ°©ν–₯성이 μ—†λŠ” κ·Έλž˜ν”„μ΄λ‹€. κ°€μ€‘μΉ˜(Weight) κ·Έλž˜ν”„: 간선에 κ°€μ€‘μΉ˜ 정보가 ν¬ν•¨λœ κ·Έλž˜ν”„μ΄λ‹€. λΆ€λΆ„(Sub) κ·Έλž˜ν”„: κ·Έλž˜ν”„μ˜ 일뢀 정점 및 κ°„μ„ μœΌλ‘œ 이루어진 κ·Έλž˜ν”„μ΄λ‹€. 1. κ΅¬ν˜„ 방법 1) 인접 ν–‰λ ¬ 정점(V)의 수만큼 2차원 배열을 λ§Œλ“€κ³  μΈμ ‘ν•˜λ©΄ 1, μΈμ ‘ν•˜μ§€ μ•ŠμœΌλ©΄ 0을 λ„£λŠ” λ°©λ²•μœΌλ‘œ λ©”λͺ¨λ¦¬ λ‚­λΉ„(V^2)κ°€ μžˆμœΌλ‚˜ 밀도가 높은 κ·Έλž˜ν”„ ν‘œν˜„μ— μ ν•©ν•˜λ‹€. 2) 인접 리슀트 각 μ •μ λ§ˆλ‹€ 리슀트λ₯Ό λ§Œλ“€κ³  인접해 μžˆλŠ” 정점듀을 μ—°κ²°ν•œ λ°©λ²•μœΌλ‘œ 검색 μ‹œκ°„μ΄ 였래 κ±Έλ¦¬μ§€λ§Œ λ©”λͺ¨λ¦¬ λ‚­λΉ„κ°€ μ—†λ‹€. 2. κ·Έλž˜ν”„ 탐색 1) 깊이 μš°μ„  ..

    이진 트리(Binary Tree)

    이진 트리(Binary Tree)

    이진 트리(Binary Tree) μ–΄λ–€ λ…Έλ“œμ˜ μžμ‹ λ…Έλ“œμ˜ μˆ˜κ°€ μ΅œλŒ€ 2개λ₯Ό λ„˜μ§€ μ•ŠλŠ” νŠΈλ¦¬μ΄λ‹€. 포화(Perfect) μ΄μ§„νŠΈλ¦¬: λͺ¨λ“  레벨이 꽉 μ°¬ μ΄μ§„νŠΈλ¦¬μ΄λ‹€. μ™„μ „(Complete) μ΄μ§„νŠΈλ¦¬: μœ„μ—μ„œ μ•„λž˜λ‘œ, μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ μ°¨λ‘€λŒ€λ‘œ μ±„μ›Œμ§„ νŠΈλ¦¬μ΄λ‹€. 사ν–₯ μ΄μ§„νŠΈλ¦¬: ν•œμͺ½μœΌλ‘œ κΈ°μšΈμ–΄μ§„ 트리둜 탐색 μ‹œκ°„μ€ O(N)이닀. 1. 이진 탐색 트리(Binary Search Tree) 탐색 μ‹œκ°„μ΄ 평균 O(logN)으둜 효율적인 탐색이 κ°€λŠ₯ν•˜λ‹€. 각 λ…Έλ“œμ˜ μžμ‹μ΄ 2개 μ΄ν•˜μ΄λ‹€. 각 λ…Έλ“œμ˜ μ™Όμͺ½ μžμ‹μ€ λΆ€λͺ¨λ³΄λ‹€ μž‘κ³  였λ₯Έμͺ½ μžμ‹μ€ λΆ€λͺ¨λ³΄λ‹€ 크닀. μ€‘λ³΅λœ κ°’μ˜ λ…Έλ“œκ°€ μ—†μ–΄μ•Ό ν•œλ‹€. 2020.04.29 - [πŸ“ Computer Science/✏ Algorithm] - [C] 이진 탐색 트리(BST) [C] 이..

    μ„ ν˜• ꡬ쑰(Linear Structure)와 λΉ„μ„ ν˜• ꡬ쑰(Non-Linear Structure)

    μ„ ν˜• ꡬ쑰(Linear Structure)와 λΉ„μ„ ν˜• ꡬ쑰(Non-Linear Structure)

    1. μ„ ν˜• ꡬ쑰 데이터λ₯Ό μ—°μ†μ μœΌλ‘œ μ—°κ²°λ˜μ–΄ μžˆλŠ” λͺ¨μ–‘μœΌλ‘œ κ΅¬μ„±ν•œλ‹€. 1) λ°°μ—΄(Array) λ™μΌν•œ μžλ£Œν˜•μ˜ 데이터듀이 같은 크기둜 λ‚˜μ—΄λ˜μ–΄ μˆœμ„œλ₯Ό κ°–κ³  μžˆλŠ” 집합이닀. λΉ λ₯Έ μ ‘κ·Ό(O(1))κ³Ό random accessκ°€ κ°€λŠ₯ν•˜λ‹€. 논리적 μ €μž₯ μˆœμ„œμ™€ 물리적 μ €μž₯ μˆœμ„œκ°€ μΌμΉ˜ν•˜κΈ° λ•Œλ¬Έμ— 인덱슀둜 ν•΄λ‹Ή μ›μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€. μΈλ±μŠ€λž€ λ°°μ—΄μ˜ μš”μ†Œλ₯Ό κ°„λ‹¨νžˆ κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λ²ˆν˜Έμ΄λ‹€. (0 ~ n-1) 정적인 자료 ꡬ쑰둜 κΈ°μ–΅ μž₯μ†Œμ˜ μΆ”κ°€κ°€ μ–΄λ ΅κ³  데이터 μ‚­μ œ μ‹œ 데이터가 μ €μž₯λ˜μ–΄ 있던 κΈ°μ–΅ μž₯μ†ŒλŠ” 빈 κ³΅κ°„μœΌλ‘œ λ‚¨μ•„μžˆμ–΄ λ©”λͺ¨λ¦¬ λ‚­λΉ„κ°€ λ°œμƒν•œλ‹€. 2) λ°°μ—΄ 리슀트(Array List) λ°°μ—΄κ³Ό 같이 μ—°μ†λ˜λŠ” κΈ°μ–΅ μž₯μ†Œμ— μ°¨λ‘€λŒ€λ‘œ 데이터가 μ €μž₯λ˜μ§€λ§Œ 빈 곡간이 μ—†λ‹€. κΈ°μ–΅ μž₯μ†Œλ₯Ό μ—°μ†μ μœΌλ‘œ λ°°μ •λ°›κΈ° λ•Œλ¬Έμ— ..