알고리즘 기본 개념
알고리즘은 지정된 시간 내에 문제를 해결하기 위한 일련의 단계입니다.
“0개 이상의 입력이 주어지면 1 이상의 값을 도출하는 방법 또는 프로세스”
- 항해 – 루트 찾기 알고리즘
- MP3/4 파일 전송 -압축 알고리즘
- 태양 전지 – 최적화 알고리즘
- 2D/3D 모델 이미지 생성 -렌더링 알고리즘
그렇다면 어떻게 “좋은” 알고리즘을 만들 수 있습니까?
지금까지 좋은 알고리즘뭐야?
알고리즘 분석
알고리즘 분석컴퓨터 프로그램이다 성능 및 리소스 소비에 대한 이론적 연구이다.
- 첫 번째 초점: 런타임(시간 복잡도)
- 두 번째 초점: 메모리 활용(공간 복잡성)
지속입력의 크기와 인스턴스, 사용된 알고리즘 및 실행된 입력입니다.
소프트웨어 및 하드웨어 환경~에 달려있다
알고리즘을 분석하기 위해 실행 시간을 경험적으로 관찰하는 실험을 수행하기도 합니다.
이렇게 하려면 샘플 입력 웰을 선택하고 정확한 수의 테스트 완료해야 합니다(그러면 분석에 대한 통계적 확실성이 있음).
실험분석 시 주의사항
- 실험 제한된 일련의 테스트 입력에서 수행됩니다.
- 모든 테스트는 동일합니다.
하드웨어와 소프트웨어로 완성당신은해야합니다. - 알고리즘을 구현하고 실행해야 합니다.
이론적 분석
이론적 분석은 실험적 분석보다 장점이 있습니다.
- 가능한 모든 입력을 고려할 수 있습니다.
- 하드웨어/소프트웨어 환경에 독립적인 둘 이상의 알고리즘의 효율성 비교
- 연산(의사 코드)여기에는 다음에 대한 높은 수준의 설명을 연구하는 것이 포함됩니다.
공식적인 이론적 분석에는 다음이 필요합니다.
- 알고리즘을 설명하기 위해 언어
- 알고리즘이 실행 중입니다 계산 모델
- 성능 측정을 위해 측정 기준
- 성능 성격 묘사어떻게 하나
대문자
- 의사 코드는 알고리즘에 대한 고급 설명 언어입니다.
- 의사 코드는 알고리즘에 대한 보다 체계적인 설명을 제공합니다.
- 알고리즘의 고급 분석을 통해 실행 시간(및 메모리 요구 사항)을 결정할 수 있습니다.
- 의사 코드는 자연어와 고급 프로그래밍 언어(예: Java, C 등)의 혼합입니다.
- 데이터 구조 또는 알고리즘의 일반적인 구현을 설명합니다.
- 의사 코드에는 표현식, 선언, 변수 초기화 및 할당, 조건부, 루프, 배열, 메서드 호출 등이 포함됩니다.
그림 2에서 분 < ㅡ A (0) min이라는 변수에 A(0)을 할당하는 것을 의미합니다.
알고리즘 분석은 기본 작업의 수를 세는 것으로 시작됩니다.
기본 작업은 다음을 의미합니다.1. 변수에 값 할당
2. 함수 호출
3. 산술 연산 수행
4. 두 값 비교
5. 배열의 인덱싱
6. 개체 참조
7. 반환 함수 값
랜덤 액세스 머신
컴퓨터에서 간단한 계산 램.~을 통해 계산 모델원인
계산 모델은 컴퓨터가 일정한 시간 동안 수행할 수 있는 작업, 알고리즘이 수행할 수 있는 작업 및 소요 시간을 설명합니다.
비용(시간)을 결정합니다.
하다.
즉, 각 작업에 소요되는 시간
따라서 계산 모델에 익숙하다면 알고리즘 생성에 대한 생각을 구조화할 수 있습니다.
전산 모델에는 두 가지 주요 유형이 있습니다(랜덤 액세스 머신(RAM) 및 포인터 머신) 각기 다른
- 일부 입력은 다른 입력보다 빠르게 수행될 수 있습니다.
- 평균 사례 복잡도동일한 크기의 모든 입력에 대해 평평합니다.
평균 실행 시간수단 - 최악의 경우 복잡성같은 크기의 용어 모든 입력이 차지하는 최대값보다 나타내다
“보통 우리는 주로 최악의 복잡성에 관심이 있습니다.
”
기본 작업 계산
만약에 겁쟁이. 4 동일한 대문자 코드의 원시 연산에 대한 최상의 경우와 최악의 경우를 계산하면 위의 대문자 코드에서 살펴본 원시 연산 7개의 내용을 짐작할 수 있습니다.
1. 어레이 액세스 하나 + 변수에 값 할당 하나 = 2
2. 변수 j에 값 할당 하나 + 변수 비교 N = 1 + n (변수 비교는 for문의 반복으로 인한 것이다.
n번)
3. 배열 접근법 n-1 + 변수 비교 n-1 = 2(n-1) (배열 액세스는 n-1for 문 안에 있기 때문에)
4. 배열 접근법 n-1 + 변수 할당 n-1 = 2(n-1)
5. 반환 함수 값 하나
* 이 주문만 실행된다면 총 5n의 기본 케이스이며,
for 문에 i++를 포함하면 7n-2가 최악의 경우가 됩니다.
재귀 알고리즘이란 무엇입니까?
재귀에는 더 작은 하위 문제를 해결하기 위해 자신을 호출하는 절차가 포함됩니다.
이러한 더 작은 하위 문제는 더 큰 문제에 대한 솔루션에 도달하기 위해 어떤 방식으로 결합될 수 있습니다.
재귀 알고리즘은 종종 비재귀 버전보다 작성하기 쉽지만 피해야 할 이유가 종종 있습니다.
예를 들어 Fibonacci(n)을 계산하려면 Fibonacci(n-1)그리고 피보나치(n-2)계산해야합니다.
그런 다음 이 두 함수 호출은 피보나치입니다.
(n-3)그리고 피보나치(n-4) 등을 계산해야 합니다.
이러한 작업의 반복은 전체 실행 시간이 크게 증가하고 메모리 사용량도 증가하여 성능 저하아마도