Schonhage-Strassen 알고리즘은 두 수를 곱하는 데 사용됩니다. SchonhageStrassen 알고리즘은 큰 정수에 대한 점근적으로 빠른 곱셈 알고리즘입니다. 실제로 Schonhage-Strassen 알고리즘은 22 이상의 숫자에 대해 karatsuba 및 Toom-CooK와 같은 이전 방법을 능가하기 시작합니다. 15 2217까지 (십진수 10,000 ~ 40,000) 자릿수. 알고리즘 Begin function noOfDigit( x) Declare a variable
두 숫자를 곱하는 러시아 농민 알고리즘. 두 개의 긴 숫자의 곱을 계산하는 빠른 알고리즘입니다. 알고리즘 Begin Russianpeasant(num1, num2) Int result=0 while (num2 > 0) if (num2 and 1) result = result + n; num1= num1
이것은 오일러 정리의 구현을 보여주는 C++ 프로그램입니다. 모듈러 곱셈 역수가 존재하려면 숫자와 모듈러가 같은 소수여야 합니다. 알고리즘 Begin Take input to find modular multiplicative inverse Take input as modular value Perform inverse array function: modInverse(x + 1, 0); modInverse[1] = 1; for i = 2 to x modInverse[i] = (-(y / i)
확장 유클리드 알고리즘은 두 숫자의 GCD를 계산하는 또 다른 방법입니다. ax + by =gcd(a, b)를 계산하기 위한 추가 변수가 있습니다. 컴퓨터 프로그램에서 사용하는 것이 더 효율적입니다. 알고리즘 Begin Declare variable a, b, x and y gcdExtended(int a, int b, int *x, int *y) if (a == 0) *x = 0; *y = 1; return b; Take two variables to store the result
페르마의 작은 정리는 기본 정수론의 기본 결과 중 하나이며 페르마 소수성 검정의 기초입니다. 정리는 1640년에 피에르 드 페르마의 이름을 따서 명명되었습니다. 정리에 따르면 p가 소수이면 임의의 정수 a에 대해 숫자 a p-a는 p의 정수 배수입니다. 알고리즘 Begin Function power() is used to compute a raised to power b under modulo M function modInverse() to find modular inverse of a
0-1 배낭 문제에서는 각 항목에 가중치와 값이 있는 항목 집합이 제공됩니다. 총 무게가 주어진 제한 이하이고 총 값이 가능한 한 크도록 컬렉션에 포함할 각 항목의 수를 결정해야 합니다. 입력 Value = [10, 20, 30, 40, 60, 70] Weight=[1, 2, 3, 6, 7, 4] int w=7 출력 knapsack value is: 100 알고리즘 Begin Input: set of items each with a weight and a value Set knapsack capacity Number
분수 배낭 문제에서는 각 항목에 가중치와 값이 있는 항목 집합이 제공됩니다. 배낭의 총 가치를 극대화하기 위해 아이템을 깨야 하는데 이것은 욕심부리는 방식으로 가능합니다. 알고리즘 Begin Take an array of structure Item Declare value, weight, knapsack weight and density Calculate density=value/weight for each item Sorting the items array on the order of decreasing density We add
다음은 파티션을 추가하면 정수가 되도록 주어진 정수의 모든 고유 파티션을 가져오는 C++ 프로그램입니다. 이 프로그램에서 양의 정수 n이 주어지고 n을 양의 정수의 합으로 나타내는 가능한 모든 고유한 방법을 생성합니다. 알고리즘 Begin function displayAllUniqueParts(int m): Declare an array to store a partition p[m]. Set Index of last element k in a partition t
빈 포장 문제는 절단 재고 문제의 특수한 유형입니다. 빈 패킹 문제에서 부피가 다른 물체는 사용되는 빈의 수를 최소화하는 방식으로 부피 V의 각각의 한정된 수의 컨테이너 또는 빈으로 패킹되어야 합니다. 계산 복잡도 이론에서는 조합 NP-하드 문제입니다. bin의 개수를 1개로 제한하고 각 항목이 볼륨과 값으로 특징지어질 때 bin에 들어갈 수 있는 항목의 가치를 최대화하는 문제를 배낭 문제라고 합니다. 알고리즘 Begin Binpacking(pointer, size, no of sets) &nb
이산 푸리에 변환(DFT)에서 유한 목록은 동일한 간격의 함수 샘플을 복소 사인파의 유한 조합 계수 목록으로 변환합니다. 동일한 샘플 값을 갖는 주파수에 따라 정렬되어 샘플링된 함수를 원래 영역(종종 시간 또는 선을 따라 위치)에서 주파수 영역으로 변환합니다. 알고리즘 Begin Declare three variables which are the coefficient of linear equation and max value Read the variables Define a class with two variable
이산 푸리에 변환(DFT)에서 유한 목록은 동일한 간격의 함수 샘플을 복소 사인파의 유한 조합 계수 목록으로 변환합니다. 동일한 샘플 값을 갖는 주파수에 따라 정렬되어 샘플링된 함수를 원래 영역(종종 시간 또는 선을 따라 위치)에서 주파수 영역으로 변환합니다. 알고리즘 Begin Take a variable M and initialize it to some integer Declare an array function[M] For i = 0 to M-1 do &nb
FFT(고속 푸리에 변환)는 이산 푸리에 변환(DFT)과 그 역을 계산하는 알고리즘입니다. 기본적으로 푸리에 분석은 시간(또는 공간)을 주파수로 또는 그 반대로 변환합니다. FFT는 DFT 행렬을 희소(대부분 0) 요인의 곱으로 분해하여 변환을 빠르게 계산합니다. 알고리즘 Begin Declare the size of the array Take the elements of the array Declare three arrays Initial
일반적으로 Fn으로 표시되는 피보나치 수는 피보나치 수열, 즉, 피보나치 수열이라고 하는 수열을 형성합니다. 각 숫자는 0과 1에서 시작하는 앞의 두 숫자의 합입니다. 즉 - F0 =0 및 F1 =1AndFn =Fn-1 + Fn-2 1에 대해. 알고리즘 시작 두 개의 2차원 배열 취하기 함수 생성 및 행렬 곱셈 수행 행렬의 거듭제곱을 구하는 다른 함수 생성 후 피보나치 수를 구하는 함수 생성 Multiply(arr1[2][2], arr2[2][ 2]) 4개의 변수 a, b, c, d를 취합니다. a =arr1[0][0] * ar
퀵 정렬 기술은 목록을 두 부분으로 분리하여 수행됩니다. 처음에 피벗 요소는 분할 알고리즘에 의해 선택됩니다. 피벗의 왼쪽 부분은 피벗보다 작은 값을 보유하고 오른쪽 부분은 더 큰 값을 보유합니다. 분할 후 동일한 절차를 사용하여 각각의 개별 목록이 분할됩니다. 이 경우 우리는 피벗 요소를 무작위로 선택합니다. 피벗을 선택한 후 분할을 수행한 다음 재귀적으로 배열을 정렬합니다. 퀵소트 기법의 복잡성 시간 복잡성 − O(n log n)(최상의 경우 및 평균 경우), O(n2 ) 최악의 경우. 공간 복잡성 - O(log n
선형 시간으로 작은 숫자를 정렬하려면 카운팅 정렬 기술을 사용할 수 있습니다. 카운팅 정렬은 작은 숫자의 키에 따라 개체를 정렬하는 데 사용되는 안정적인 정렬 기술입니다. 키 값이 동일한 키의 수를 계산합니다. 이 정렬 기술은 서로 다른 키 간의 차이가 크지 않을 때 효율적이고 그렇지 않으면 공간 복잡성을 증가시킬 수 있습니다. 정렬 기법 계산의 복잡성 시간 복잡성 :오(n + r) 공간 복잡성 :오(n + r) Input − A list of unsorted data: 2 5 6 2 3 10 3 6 7
퀵 정렬 기술은 목록을 두 부분으로 분리하여 수행됩니다. 처음에 피벗 요소는 분할 알고리즘에 의해 선택됩니다. 피벗의 왼쪽 부분은 피벗보다 작은 값을 보유하고 오른쪽 부분은 더 큰 값을 보유합니다. 분할 후 동일한 절차를 사용하여 각각의 개별 목록이 분할됩니다. 여기서 우리는 정렬할 큰 배열(거의 100개 요소)을 고려하고 있습니다. 우리는 몇 가지 숫자를 가져온 다음 정렬되지 않도록 무작위 순서로 섞습니다. 그런 다음 퀵 정렬 기술을 사용하여 정렬합니다. 퀵소트 기법의 복잡성 시간 복잡성 − O(n log n)(최상의 경우
병합 정렬 기술은 분할 정복 기술을 기반으로 합니다. while 데이터 세트를 더 작은 부분으로 나누고 정렬된 순서로 더 큰 부분으로 병합합니다. 이 알고리즘은 최악의 경우에도 시간 복잡도가 낮기 때문에 최악의 경우에도 매우 효과적입니다. 연결 목록은 병합 정렬을 사용하여 매우 효율적으로 정렬할 수 있습니다. 연결 목록의 경우 병합 작업은 매우 간단합니다. 링크를 업데이트하여 병합하기만 하면 됩니다. 이 섹션에서는 이 접근 방식을 사용하여 연결 목록을 정렬하는 방법을 살펴보겠습니다. 병합 정렬 기법의 복잡성 시간 복잡성 -
그래프의 인접 행렬은 V x V 크기의 정사각형 행렬입니다. V는 그래프 G의 꼭짓점 개수입니다. 이 행렬에는 각 변에 V 꼭짓점이 표시되어 있습니다. 그래프에 i에서 j 정점까지의 모서리가 있는 경우 i번째의 인접 행렬에서 행 및 j번째 열은 1(또는 가중치 그래프의 경우 0이 아닌 값)이 됩니다. 그렇지 않으면 해당 위치는 0을 유지합니다. 인접 행렬 표현의 복잡성 인접 행렬 표현은 O(V2 ) 계산되는 동안 공간의 양. 그래프에 최대 모서리 수와 최소 모서리 수가 있을 때 두 경우 모두 필요한 공간은 동일합니다. 입
그래프의 입사 행렬은 메모리에 저장할 그래프의 또 다른 표현입니다. 이 행렬은 정방 행렬이 아닙니다. 입사 행렬의 순서는 V x E입니다. 여기서 V는 정점의 수이고 E는 그래프의 가장자리 수입니다. 이 행렬의 각 행에 정점을 배치하고 각 열에 모서리를 배치합니다. 에지 e {u, v}에 대한 이 표현에서는 e열의 u 및 v 위치에 대해 1로 표시됩니다. 인접 행렬 표현의 복잡성 입사 행렬 표현은 계산되는 동안 O(Vx E)의 공간을 차지합니다. 완전한 그래프의 경우 모서리 수는 V(V-1)/2입니다. 따라서 입사 행렬은 메
그래프의 인접 목록 표현은 연결 목록 표현입니다. 이 표현에서 우리는 리스트의 배열을 가지고 있습니다. 배열 크기는 V입니다. 여기서 V는 정점의 수입니다. 즉, 서로 다른 V개의 목록을 저장할 배열이 있다고 말할 수 있습니다. 목록 헤더가 정점 u이면 u의 모든 인접 정점을 보유한다는 것을 의미합니다. 인접 목록 표현의 복잡성 이 표현은 무방향 그래프의 경우 O(V+2E), 방향 그래프의 경우 O(V+E)를 사용합니다. 모서리 수가 늘어나면 필요한 공간도 늘어납니다. 입력: 출력: 알고리즘 add_edge(