이 알고리즘은 배열 요소를 나선형으로 인쇄하는 데 사용됩니다. 처음에는 첫 번째 행부터 전체 내용을 인쇄한 다음 마지막 열을 따라 인쇄한 다음 마지막 행을 따라 인쇄하는 방식으로 요소를 나선형으로 인쇄합니다. 이 알고리즘의 시간 복잡도는 O(MN), M은 행 개수, N은 열 개수입니다. 입력 및 출력 Input: The matrix: 1 2 3 4 5 6 7 8 9 10 11 12 13 &
알고리즘 알고리즘은 명령의 유한한 집합이며 따르기만 하면 특정 작업을 수행합니다. 특정 언어가 아니므로 모든 언어와 기호를 사용하여 지침을 나타낼 수 있습니다. 알고리즘의 기준 입력: 0개 이상의 입력이 알고리즘에 외부적으로 제공됩니다. 출력: 알고리즘에 의해 하나 이상의 출력이 생성됩니다. 확실성: 각 지침은 명확하고 모호하지 않습니다. 유한성: 알고리즘에서는 모든 다른 경우에 대해 유한한 수의 단계 후에 종료됩니다. 효과: 각 지침은 매우 기본적이어야 하므로 지침의 목적이 매우 명확해야 합니다. 알고리즘 분석 알고리즘 분
점근적 분석 점근적 분석을 사용하여 입력 크기를 기반으로 하는 알고리즘의 성능에 대한 아이디어를 얻을 수 있습니다. 정확한 실행 시간을 계산해서는 안되지만 실행 시간과 입력 크기 간의 관계를 찾아야 합니다. 입력의 크기가 증가할 때 실행 시간을 따라야 합니다. 공간 복잡도의 경우, 우리의 목표는 알고리즘을 완료하기 위해 메인 메모리에서 얼마나 많은 공간이 점유되는지에 대한 관계 또는 함수를 얻는 것입니다. 점근적 행동 f(n) 함수의 경우 점근적 동작은 n이 커질수록 f(n)이 증가하는 것입니다. 작은 입력 값은 고려되지 않습
점근적 표기법 점근 표기법은 점근 분석을 위한 알고리즘의 복잡성을 나타내는 데 사용됩니다. 이러한 표기법은 복잡성을 나타내는 수학적 도구입니다. 일반적으로 사용되는 세 가지 표기법이 있습니다. 빅 오 표기법 Big-Oh(O) 표기법은 함수 f(n)의 상한을 상수 요소 내로 제공합니다. f(n) =O(g(n)), n0의 오른쪽에 f(n)이 항상 c*g(n) 위 또는 아래에 있는 양의 상수n0 및 c가 있는 경우 O(g(n)) ={ f(n) :모든 n ≥ n0에 대해 0 ≤ f(n) ≤ c g(n)인 양의 상수 c와 n0이
상각 상각 분석 이 분석은 간헐적 작업이 매우 느리지만 매우 자주 실행되는 대부분의 작업이 더 빠를 때 사용됩니다. 해시 테이블, 디스조인트 세트 등에 대한 분할상환 분석이 필요한 데이터 구조 Hash-table에서 탐색 시간 복잡도는 대부분 O(1)이지만 가끔 O(n) 연산을 수행하기도 한다. 대부분의 경우 해시 테이블에서 요소를 검색하거나 삽입하려는 경우 작업을 수행하는 데 일정한 시간이 소요되지만 충돌이 발생하면 충돌 해결을 위해 O(n)배 작업이 필요합니다. 집계 방법 집계 방법은 총 비용을 찾는 데 사용됩니다. 많은
공간 복잡성 공간 복잡도는 알고리즘이 완전히 실행하고 결과를 생성하기 위해 알고리즘(알고리즘의 입력 값 포함)이 사용하는 메모리의 양입니다. 알고리즘을 실행하려면 메인 메모리에 로드되어야 한다는 것을 알고 있습니다. 메모리는 다양한 형태로 사용할 수 있습니다. 변수(상수 값 및 임시 값 포함) 프로그램 안내 실행 보조 공간 보조 공간은 알고리즘이 실행되는 동안 사용되는 추가 공간 또는 임시 공간입니다. 프로그램 실행 중 메모리 사용량 명령어 공간은 컴파일된 명령을 메모리에 저장하는 데 사용됩니다. Environmental
다항식 시간 근사화 방식 0-1 배낭 문제 또는 부분집합 문제와 같은 NP-완전 문제에 대한 다항식 시간 솔루션을 찾을 수 있습니다. 이러한 문제는 실제 세계에서 매우 인기가 있으므로 이러한 문제를 처리할 몇 가지 방법이 있어야 합니다. PTAS(Polynomial Time Approximation Scheme)는 최적화 문제에 대한 알고리즘을 근사화하는 유형입니다. 0-1 배낭 문제의 경우 의사 다항식 솔루션이 있지만 값이 크면 솔루션이 실현 가능하지 않습니다. 그렇다면 PTAS 솔루션이 필요합니다. 그래프 채색, K-중심 문
해싱은 해시 함수로 알려진 수학 함수를 사용하여 텍스트 또는 숫자 목록에서 값을 생성하는 프로세스입니다. 숫자 또는 영숫자 키를 사용하는 많은 해시 함수가 있습니다. 다양한 해시 함수는 다음과 같습니다. 해시 함수 다음은 해시 함수의 일부입니다 - 분할 방식 이것은 해시 함수를 생성하는 가장 쉬운 방법입니다. 해시 함수는 다음과 같이 설명할 수 있습니다. - h(k) = k mod n 여기서 h(k)는 키 값 k를 나머지를 이용하여 해시 테이블 n의 크기로 나눈 해시 값이다. 키가 더 균일하게 분포되도록 하려면 n이 소수인 것
문자열이 주어진다고 가정해 보겠습니다. 문자열이 일련의 문자라는 것을 알고 있습니다. 사전순 회전은 문자열을 회전하여 사전순으로 문자를 변환하는 것입니다. 해결 방법은 간단합니다. 주어진 문자열을 자신과 연결하기만 하면 다른 배열에 문자열의 모든 회전이 저장됩니다. 배열을 오름차순으로 정렬한 후 가장 낮은 값이 최종 결과입니다. 입력 및 출력 Input: The String “BCAAFAABCD” Output: Rotated String: “AABCDBCAAF” 알고리즘 minStrRota
다양한 너트 목록과 볼트 목록이 제공됩니다. 우리의 임무는 주어진 목록에서 너트와 볼트의 올바른 일치를 찾고 일치할 때 해당 너트를 볼트와 함께 할당하는 것입니다. 이 문제는 빠른 정렬 기술로 해결됩니다. 볼트의 마지막 요소를 피벗으로 사용하여 너트 목록을 재정렬하고 볼트가 피벗 요소인 너트의 최종 위치를 가져옵니다. 너트 목록을 분할한 후 선택한 너트를 사용하여 볼트 목록을 분할할 수 있습니다. 모든 일치 항목을 얻기 위해 왼쪽 및 오른쪽 하위 목록에 대해 동일한 작업이 수행됩니다. 입력 및 출력 Input: The lists
다른 잠금 목록과 다른 키 목록이 제공됩니다. 우리의 임무는 주어진 목록에서 자물쇠와 열쇠의 정확한 일치를 찾고 그것이 정확할 때 자물쇠와 함께 그 열쇠를 할당하는 것입니다. 이 접근 방식에서 우리는 모든 잠금을 탐색하고 해시 맵을 생성한 후 해시 맵에서 각 키를 검색합니다. 키가 일치하면 유효한 키로 표시되고 잠금이 할당됩니다. 입력 및 출력 Input: The lists of locks and keys. lock = { ),@,*,^,(,%, !,$,&,#} key = { !, (, #, %, ), ^, &, *
주어진 문자열의 모든 순열을 인쇄하는 것은 역추적 문제의 예입니다. 하위 문제를 해결하기 위해 하위 문자열의 크기를 줄인 다음 다시 역추적하여 해당 섹션에서 다른 순열을 얻습니다. 예를 들어 문자열이 ABC이면 모든 순열은 ABC, ACB, BAC, BCA, CAB, CBA가 됩니다. 이 알고리즘의 복잡도는 O(n!)입니다. 엄청난 복잡성입니다. 문자열 크기가 커지면 작업을 완료하는 데 시간이 오래 걸립니다. 입력 및 출력 Input: A string “ABC” Output: All permutations
숫자의 패리티는 해당 숫자에 해당하는 이진수에 있는 1의 수를 기반으로 합니다. 현재 1의 개수가 홀수이면 홀수 패리티를 반환하고, 1이 짝수이면 짝수 패리티를 반환합니다. 컴퓨터 메모리의 숫자는 이진수로 저장되어 있으므로 쉽게 숫자를 이동할 수 있습니다. 이 경우 비트를 이동하여 주어진 숫자에 해당하는 2진수에 있는 1의 수를 계산합니다. 입력 및 출력 Input: A number: 5 Binary equivalent is (101) Output: Parity of 5 is Odd. 알고리즘 finParity(n) 입력: 숫자
Reservoir 샘플링은 무작위 알고리즘입니다. 이 알고리즘에서는 n개의 다른 항목이 있는 목록에서 k개의 항목이 선택됩니다. 배열을 k 크기의 저장소로 생성하여 해결할 수 있습니다. 그런 다음 기본 목록에서 무작위로 하나의 요소를 선택하고 해당 항목을 저수지 목록에 배치합니다. 한 항목을 한 번 선택하면 다음에는 선택되지 않습니다. 그러나 그의 접근 방식은 효과적이지 않습니다. 우리는 이 방법으로 복잡성을 증가시킬 수 있습니다. 저수지 목록에서 목록의 처음 k개 항목을 이제 목록의 (k+1)번째 숫자에서 하나씩 복사하여 현재
한 영업 사원이 도시에 있고, 그는 나열된 다른 모든 도시를 방문해야 하며, 한 도시에서 다른 도시로 이동하는 비용도 제공됩니다. 모든 도시를 한 번 방문하는 비용이 최소인 경로를 찾아 출발 도시로 돌아갑니다. 이 경우 그래프는 완전해야 영업 사원이 어느 도시에서나 직접 도시로 이동할 수 있습니다. 여기서 우리는 최소 가중치 Hamiltonian Cycle을 찾아야 합니다. 입력 및 출력 Input: Cost matrix of the matrix. 0 20 42 25 30 20 0 30 34 15 42 30
Zeller의 알고리즘은 주어진 날짜에서 요일을 찾는 데 사용됩니다. Zeller의 알고리즘을 사용하여 요일을 찾는 공식은 다음과 같습니다. 수식에 일부 변수가 포함되어 있습니다. 그들은 - d - 날짜의 날짜입니다. m:월 코드입니다. 3월부터 12월까지는 3에서 12, 1월은 13, 2월은 14입니다. 1월이나 2월을 고려할 때 주어진 연도는 1만큼 감소합니다. y - 연도의 마지막 두 자리 c - 연도의 처음 두 자리 w - 평일. 0이면 토요일, 6이면 금요일 입력 및 출력 Input: The day, mont
주어진 문자열 목록은 영숫자 순서 또는 사전 순서로 정렬됩니다. Apple, Book, Aim과 같이 Aim, Apple, Book으로 정렬됩니다. 숫자가 있는 경우 알파벳 문자열 앞에 놓을 수 있습니다. 입력 및 출력 Input: A list of strings: Ball Apple Data Area 517 April Man 506 Output: Strings after sort: 506 517 Apple April Area Ball Data Man 알고리즘 sortStr(strArr, n) 입력: 모든 문자열 목록, 요소 수.
하노이 탑은 퍼즐 문제입니다. 3개의 스탠드와 n개의 디스크가 있는 곳입니다. 처음에는 디스크가 첫 번째 스탠드에 배치됩니다. 세 번째 또는 대상 스탠드에 디스크를 배치해야 합니다. 두 번째 또는 보조 스탠드는 보조 스탠드로 사용할 수 있습니다. 그러나 따라야 할 몇 가지 규칙이 있습니다. 각 동작에 대해 하나의 디스크만 전송할 수 있습니다. 가장 높은 디스크만 스탠드에서 픽업할 수 있습니다. 더 큰 디스크는 더 작은 디스크 위에 놓이지 않습니다. 이 문제는 재귀로 쉽게 해결할 수 있습니다. 처음에는 재귀를 사용하여 상위(n
주어진 길이의 N개의 로프가 있습니다. 우리는 그들과 연결해야 합니다. 한 로프를 다른 로프와 연결하는 비용은 길이의 합입니다. 우리의 목표는 N개의 로프를 최소한의 비용으로 연결하는 것입니다. 이 문제는 힙 트리를 사용하여 해결할 수 있습니다. 다른 모든 길이를 먼저 삽입하기 위해 최소 힙을 만든 다음 최소 힙에서 최소 및 두 번째 최소 항목을 제거하고 연결하고 다시 힙 트리에 삽입합니다. 힙이 하나의 요소만 보유할 때 프로세스를 중지하고 최소한의 비용으로 연결된 로프를 얻을 수 있습니다. 입력 및 출력 Input: The le
로마 숫자는 위치가 없는 숫자입니다. 일부 숫자는 함께 배치되어 로마 숫자로 된 숫자를 형성합니다. 예를 들어 숫자 75는 75 =50 + 10 + 10 + 5로 표현될 수 있으므로 로마 숫자는 LXXV입니다. 이 문제에서는 하나의 숫자가 10진수 형식으로 제공되며 우리의 임무는 이를 로마 숫자 문자열로 변환하는 것입니다. 이와 같이 다양한 기호와 값이 있습니다. 나는 IV V IX X XL L XC C CD D CM M MMMM V 1 4 5 9 10 4