연결 리스트 삽입과 삭제
·
Study/Algorithm
연결 리스트 삽입과 삭제삽입 코드 연결 과정newNode.next를 prev.next로 연결.prev.next를 newNode로 변경.nodeCount를 1 증가시킨다.newNode 2 → 1 → 3으로 하면 안되는 걸까?당연하게도 2를 먼저해버리면 이전에 newNode.next 변수에 prev.next를 저장할 수 없게된다.삽입 코드 구현 시 주의 사항(1) 삽입하려는 위치가 리스트의 맨 앞일 경우.→ prev 없음→ Head 조정이 필요없음(2) 삽입하려는 위치가 리스트의 맨 끝에 있을 경우.→ Tail 조정이 필요하다.→ pos == nodeCount + 1 인 경우 맨 앞에서부터 찾아갈 필요가 없음(3) 빈 리스트에 삽입하는 경우.→ (1)과 (2)의 조건을 통해 삽입이 이루어진다.def inse..
연결 리스트
·
Study/Algorithm
추상적 자료구조Data정수, 문자열, 레코드A set of operations삽입, 삭제 , 순회정렬, 탐색…Linked List는 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조이다. 즉, 각 요소가 데이터와 요소를 참조(링크 , 화살표)하는 정보를 포함하는 노드로 구성된다. 이 때문에 동적인 A set of operations를 상대적으로 쉽게 할 수 있다는 장점이 있다.기본적 연결 리스트 자료구조 정의단일 노드class Node: def __init__(self, item): self.data = item self.next = None각 단일 노드를 연결한 연결 리스트의 자료구조class LinkedList: def __init__(self): self.nodeCount = 0 se..
알고리즘의 복잡도(Complexity of Algorithms)
·
Study/Algorithm
알고리즘의 복잡도시간 복잡도 (Time Complexity)문제의 크기와 이를 해결하는 데 걸리는 시간 사이의 관계공간 복잡도 (Space Complexity)문제의 크기와 이를 해결하는데 필요한 메모리 공간 사이의 관계평균 시간 복잡도 (Average Time Complexity)임의의 입력 패턴을 가정했을 때 소요되는 시간의 평균최악 시간 복잡도 (Worst-case Time Complexity) 가장 긴 시간을 소요하게 만드는 입력에 따라 소요되는 시간의 평균 Big-O Notation점근 표기법(입력 크기가 커질 경우, 알고리즘의 성능을 어떻게 변하는지를 표현) 중 하나다.어떤 함수의 증가 양상을 다른 함수(보통 n으로 표현, 일반적으로 함수로 입력의 크기만큼 성능을 보이는 함수를 의미한다)와의 ..
재귀함수(recursive functions)
·
Study/Algorithm
재귀함수(recursive functions)하나의 함수에서 **자신을 다시 호출**하여 작업을 수행하는 것.예시 : 자연수의 합 구하기1 부터 n까지 모든 자연수의 합을 구하시오.* 종료조건 없는 재귀함수*def sum(n) : return n + sum(n-1) 위 함수는 n에 대한 종료 조건이 정해져있지 않아 maximum recursion 런타임 에러가 발생한다. 따라서 종료 조건을 추가한다.* 종료조건을 추가한 재귀함수*def sum(n) : if(n재귀 알고리즘의 효율* 재귀와 반복 함수의 상대적 효율성 비교* Recursive versionIterative version시간복잡도O(N)O(N)상대적 효율낮다(함수 호출 비용)재귀보다 높을 수 있다.예시 2 : 피보나치 순열* 재귀를 이용..
정렬(Sort) , 탐색(Search)
·
Study/Algorithm
python 리스트의 정렬sorted() / 역순 : sorted(L2 , reversed=True)내장 함수 (built-in function)정렬된 새로운 리스트를 얻어냄sort() / 역순 : sort(reversed=True)리스트의 메서드 (method)해당 리스트를 정렬문자열로 이루어진 리스트의 경우정렬 순서는 알파벳 순서 (사전 순서)를 따른다.문자열의 길이가 길다고 더 큰 것이 아니다.문자열 길이 순서로 정렬하려면 ? → 정렬에 이용하는 키(key)를 지정한다. L = ["abcd", "xyz" , "spam"] sorted(L , key = lambda x : len(x)) # 리스트의 원소를 x로 지정 -> key값을 x의 길이로 지정 # ["abcd", "spam" ,..
선형 배열(Linear Arrays)
·
Study/Algorithm
데이터들이 일열로 쭉 늘어져있기 때문에 붙여진 이름.배열원소들을 순서대로 늘어놓은 것.동일한 타입의 원소만 함께 나열할 수 있다.예를 들어, 정수 배열은 모두 정수 타입의 원소로만 구성되어야 한다. 리스트파이썬의 리스트는 배열(Array)보다 융통성있는 구조를 제공한다.서로 다른 타입의 데이터를 원소로 채택해서 나열할 수 있다.예를 들어, 파이썬 리스트는 정수, 문자열, 객체 등 다양한 타입의 데이터를 혼합해서 포함할 수 있다.리스트 연산L = ["B", "C" , "S", "P"]L.append(”N”) → ["B", "C" , "S", "P" ,”N”] : 오른쪽 끝에 “N”을 추가.L.pop() → “N” : 가장 마지막 원소를 빼낸다. ["B", "C" , "S", "P" ]append()와 po..