cs 5

DFS 와 BFS

DFS는 깊이탐색알고리즘으로 한개의 노드에 연결된 것중 가장 깊게 들어가는 탬색 알고리즘입니다. 오류 찾기가 쉽습니다. 한마디로 한놈만 계속 파보는 문제로 재귀함수를 보편적으로 사용합니다. BFS는 너비탐색알고리즘으로 한개의 노드에 연결된 모든 노드를 한번씩 다 확인하는 알고리즘 입니다. 시간복잡도가 DFS에 비해 낮습니다. 기본적으로 queue와 linkedlist를 사용합니다.(순서 중요)

cs/cs지식 2023.06.27

linear search and binary search

linear search 는 for 문을 사용하여 배열에서 해당값을 찾는 알고리즘 입니다. 이는 기본적인 알고리즘으로 보통 많이 사용합니다. 하지만 시간복잡도가 O(n) 이므로 시간이 오래 걸릴 수 있습니다. 이를 해결하기 위해 binary search(이진탐색)가 나왔습니다. 배열의 처음과 마지막의 중간값을 비교하여 찾는값이 중간값보다 크면 중간 ~ 끝까지 중간~끝 의 중간보다 크면 그 중간의 오른쪽으로 넘어가는 방법입니다. 따라서 시간이 1/2씩 단축되는 효과가 있습니다. 이를 시간복잡도로 나타내면 (1/2)^k * n 이므로 O(log n) 이 됩니다. *주의 : 이진탐색은 쪽 정렬된 배열에서 사용하세요!!! 참조: https://www.youtube.com/watch?v=J3hM7xE9aFc ht..

cs/cs지식 2023.06.22

Linked List (연결 리스트)

연결 리스트는 각 노드마다 데이터와 다음 노드의 메모리 주소값이 있는 구조입니다. 이 구조는 블록체인의 구조와도 아주 약간 비슷하네요.(데이터가 있고, 그 데이터 해쉬값이 다음 노드에 넘어온다는 점) 연결 리스트는 데이터를 읽는데 시간이 걸립니다.(O(n))(head부터 읽어와야 합니다.) 하지만 삽입과 삭제에는 배열보다 속도가 빠릅니다.(배열은 삭제 후 다시 index정렬)(연결 리스트는 주소만 바꾸면 됨) # structure of Node class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None self.last_node = Non..

cs/cs지식 2023.06.20

BIG-O 표기법

알고리즘의 성능을 나타내는 지표로 BIG -O표기법을 사용합니다. 알고리즘의 시간/공간 복잡도 예측시 사용합니다. 인풋이 들어왔을 때, 기본 연산 횟수를 계산하는 방법입니다. "점근적 표현법 중 하나이며, 상수와 계수를 제거하고 알고리즘의 복잡도를 단순화하여 나타낸다." O(1) = 배열의 해당 index값 출력(바로 나오는 것) O(log n) = 로그 함수(값이 들어왔을 때 출력값을 구하기 위한 계산이 줄어듬)(이진트리) O(n) = for문 O(nlog n) = 퀵 정렬 O(n^2) = 2중 반복문 O(2^n) = 피보나치 수열 O(n!) = 팩토리알 함수 출처 : https://hanamon.kr/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-time-complexity-%EC..

cs/cs지식 2023.06.20

자료구조(Data Structures) 10가지

https://www.youtube.com/watch?v=ouipSd_5ivQ 1. list 트위터 목록(feeder) 2. array math operations, large data sets list와 array 차이 list는 수정에 빠르고 array는 수학 계산에 특화되어 있음(파이썬의 경우) https://favtutor.com/blogs/python-array-vs-list Python: Array vs List | 5 Main Differences (& When to use?) Confused between array vs list in python? find out the main differences between array & list in python programming. Also,..

cs/자료구조 2023.06.01