[python_dataStructure] 1. 자료구조 및 알고리즘 개요

말랑이·2023년 5월 25일

python_dataStructure

목록 보기
1/7
post-thumbnail

1 자료구조의 개념

🧩 자료구조 : 데이터를 꺼내쓰기 효율적인 형태로 저장하는 방식

1️⃣ 자료구조 종류

  • 단순자료구조
    • 정수
    • 실수
    • 문자
    • 문자열 (python은 문자와 문자열을 구분하지 ❌)
  • 선형자료구조
    • 리스트
    • 스택 (파일을 쌓아둔 것 → 최신순으로 파일을 꺼내 씀)
    • 큐 (데이터를 저장공간에 저장 → 하나씩 꺼내 씀)
  • 비선형자료구조
    • 트리
    • 그래프
  • 파일자료구조
    • 순차파일
    • 색인파일
    • 직접파일

2️⃣ 단순자료구조

🧩 단순자료구조 : 프로그래밍 언어의 데이터형식에 해당하는 정수, 실수, 문자, 문자열 등

형식특징
정수0, 100, 1234, -27 등
int, integer (소수점 ❌)
실수0.1, 3.14 등
float (소수점 ✅)

3️⃣ 선형자료구조

🧩 선형자료구조 : 데이터를 한 줄로 순차적으로 표현한 형태

  • 데이터가 서로 점진적으로 연결되어 있음
  • 데이터 순차적 활용 : 하나씩 작업하는 것
  • 선형리스트, 연결리스트, 스택, 큐 등

🔴 ➡️ 🟠 ➡️ 🟡 ➡️ 🟢 ➡️ 🔵


4️⃣ 비선형자료구조

🧩 비선형자료구조 : 하나의 데이터 뒤에 여러개가 이어지는 형태

  • 트리, 그래프 등
  • 트리구조 : 데이터 순환 여지가 있음

5️⃣ 파일자료구조

🧩 파일자료구조 : 파일내용이 디스크에 저장되는 방식 → 순차파일 or 직접파일 구분됨

📎 순차파일 (Sequential File)

  • 파일내용 → 논리적인 처리순서에 따라 연속저장
구분내용
장점구조간단 → 저장되는 공간효율 높음 ✅
단점추가•삭제 → 파일내용 재구성 ➡️ 시간 많이 걸림 ⚠️
데이터검색 → 처음부터 끝까지 모두 찾아야함 ➡️ 비효율적 ⛔️

📎 직접파일 (Direct File)

  • 파일내용 → 임의의 물리적위치에 기록하는 방식
  • 직접 접근 방식 (Direct Access Method)
  • 해시함수 → 저장할 위치 계산

📎 색인순차파일

  • 순차파일 + 직접파일 결합된 형태

2 알고리즘의 개념

🧩 알고리즘 : 문제를 논리적으로 접근 → 최적의 해를 찾아가는 방법

1️⃣ 자료구조와 알고리즘의 관계

📍 자료구조
- 컴퓨터 분야에서 효율적 접근 + 수정을 위해,
- 자료를 구성 + 관리 + 저장하는 것
📍 알고리즘
- 컴퓨터 분야 or 수학 관련 분야에서
- 어떤 문제를 해결하기 위해,
- 정해진 일련의 단계 + 절차 + 방법

자료구조와 알고리즘은 데이터와 그 데이터를 처리하는 방법의 관계


2️⃣ 알고리즘 표현법

📎 일반언어표현

  • 일반적인 자연어 사용 → 설명하듯이 알고리즘을 표현
    • 장점 : 일반사람이 이해하기 쉬움 ✅
    • 단점 : 최종적 코드로 변경하는데 한계가 있음 ⛔️
  • 어떤 알고리즘을 사용해야하는지 아이디어가 떠오르지 않는 단계 → 생각 범위를 넓히는 단계에서 사용

📎 순서도표현

  • 어떤 종류의 상자와 상자를 이어주는 화살표 → 명령순서 표현
  • 간단한 알고리즘은 쉽게 표현, 복잡한 알고리즘은 표현하기 어려움

📎 의사코드표현(pseudocode)

  • 프로그래밍언어 < 인간의언어
  • 프로그램코드와 일반언어의 중간형태
  • 프로그램코드를 직접코딩하는 것보다 알고리즘을 좀 더 명확하게 정립하는데 도움이 됨
  • 코드에 설명을 달지 않아도 이해하는데 무리가 없음
: 레이블1
animal <- get animal
IF 트럭에 태울 수 있으면 THEN
	Put on a truck <- animal
ELSE
	Put in the fence <- animal
ENDIF

IF 아직 태워 볼 동물이 남았으면 THEN
	GOTO 레이블1
ELSE
	finish program
ENDIF

📎 프로그래밍코드표현

  • 실제로 사용하는 프로그래밍 언어의 코드로 바로 작성가능
def main():
	while(true)
    	animal = getAnimal()
        if truck_weight + animal.weight <= 7:
        	truck[put_count] = animal
            put_count += 1
        else:
        	fence[wait_count] = animal
            wait_count += 1
        if getAnimal() != Nome:
        	continue
        else:
        	exit()
    return

📎 혼합형태표현

  • 간단한 알고리즘 : 직접코드로 작성
  • 복잡한 알고리즘 : 일반언어, 의사코드, 순서도, 그림 등을 종합적으로 활용해 표현

3️⃣ 알고리즘 성능표현

🧩 시간복잡도 (Time Complexity) : 알고리즘 소요시간 기준 → 알고리즘 성능 분석 방법

📍 알고리즘1
	for 숫자가 1부터 100까지 반복
    합계출력

📍 알고리즘2
	(1+100)*(100)/2
    합계출력
구분성능
알고리즘1데이터개수 → 비례해 시간이 늘어남 📈
알고리즘2데이터개수 → 관계없이 시간 동일 ✅

🧩 빅오 표기법 (Big-Oh Notation) : O(f(n)) 형태

  • O = order
  • O(1) 성능 > O(n) 성능

profile
🐰 I'm Sunyeon-Jeong, mallang

0개의 댓글