목록알고리즘 연습 (5)
영넌 개발로그
메모리 관리 모든 파이썬 객체와 데이터 구조를 포함하는 비공개 힙(private heap)은 python memory manager가 비공개적으로 알아서 관리한다. 메모리 관리를 위해 숨겨진 힙 스페이스 사용한다. python memory manger는 힙 메모리에 있는 객체를 참조하는 형태로 동적할당을 자동으로 해준다 인터프리터가 스페이스를 관리하기 때문에 프로그래머 조차도 이 공간에 접근이 불가능 하다. 인터프리터가 포인터를 사용하여 힙 메모리 영역의 범위를 조정, 메모리가 필요할때마다 OS와 소통하면서 할당 빌트인 가비지 컬렉터(Garbage Collector; GC)를 소유하고 있다. GC를 이용하여 사용되지 않은 메모리를 재활용하고 메모리를 지워 힙 스페이스에서 사용 가능케 한다. 메모리 구조 ..
컴퓨터 프로그래밍 교육을 위해 많이 사용하지만, 기업의 실무를 위해서도 많이 사용하는 언어이다. 그 대표적인 예가 바로 구글이다. 구글에서 만든 소프트웨어의 50%이상이 파이썬으로 작성되었다고 한다. 이외에도 많이 알려진 예를 몇 가지 들자면 온라인 사진 공유 서비스 인스타그램(Instagram), 파일 동기화 서비스 드롭박스(Dropbox)등이 있다. ✅ 공동 작업과 유지 보수가 매우 쉽고 편하다. 그 때문에 이미 다른 언어로 작성된 많은 프로그램과 모듈이 파이썬으로 재구성되고 있다. 국내에서도 그 가치를 인정받아 사용자 층이 더욱 넓어지고 있고, 파이썬을 사용해 프로그램을 개발하는 업체들 또한 늘어 가고 있는 추세이다. ✅ 오픈 소스 = 무료 사용료 걱정없이 언제 어디서든 파이썬을 다운로드하여 사용할..
해시 함수 (Hashing Function)? 임의의 길이를 갖는 메세지를 입력받아 일정한 길이의 해시 값을 출력하는 함수이다. 특징 입력 값의 길이가 달라도 출력 값은 언제나 고정된 길이로 반환 눈사태 효과 : 입력 값의 아주 일부만 변경되어도 전혀 다른 결과 값을 출력 출력된 결과 값을 토대로 입력 값을 유추할 수 없음 동일한 값이 입력되면 언제나 동일한 출력 값을 보장 사용하는 목적 메세지의 오류나 변조를 탐지할 수 있는 무결성을 제고하기 위함 디지털 서명의 생성 메세지 인증코드의 생성 (메세지 내용의 무경성 확인) 일회용 패스워드(OTP)의 생성 세션 키 도출 소프트웨어 배포시 변경 검출 Cuckoo Hashing? 뻐꾸기는 다른 새의 둥지에서 알을 낳는다..
함수 안에서 함수 자기 자신을 호출하는 것 탈출 부분과 지속 부분으로 나누어져 있음 장점 일반적으로 코드가 짧다. 이해가 쉽다. 단점 메모리를 많이 차지한다. (자기 자신이 끝나지 않은 상태에서 계속해서 호출하게 되면 이전상태를 기억해야 한다. 이때문에 메모리를 놓지 않고 잡고 있게 되어 메모리를 많이 차지하게 된다.) 시간이 많이 걸린다. (함수를 계속해서 호출하면서 시간이 걸리게 된다.) ex_1) 거듭제곱 계산하기 : power(x,n) non-recursive --> for문이용 recursive 탈출 조건 => if n==0 return 지속 조건 => return x*power(x,n-1) p(x,n) 1. 탈출 if n==0 > return 1 2. 지속 if ..
알고리즘 성능 ? 시간이 덜 걸리고 메모리를 덜 사용하는 알고리즘이 좋은 것 입력되는 data의 개수 n 에 대해서 걸리는 시간과 공간을 수식화 한 것 이를 통해 알고리즘을 쉽게 비교할 수 있음 ex) A1 n-> n^2 A2 n-> 2^n A1이 A2보다 시간적으로 빠르다. 더 좋다고 말할 수 있다. 2*n^2 이나 3n^2이나 O(n^2) 이다. n이 굉장히 커졌을 때 무시해도 되는 경우는 생략한다. 따라서 둘은 비슷한 성능을 가졌다고 볼 수 있다. n^2+n+1 => O(n^2) 3*2^n => O(2^n) O(1) : n의 갯수에 상관이 없이 항상 같음. 꿈의 알고리즘 O(n) O(n*logn) O(n^2) O(2^n) O(n!) 아래로 갈수록 안좋은 알고리즘 c언어 코드 수행시간 측정하는 방법 ..