>백엔드 개발 >C++ >N 기간이 아닌 다양한 일반 괄호 시퀀스의 수를 계산합니다.

N 기간이 아닌 다양한 일반 괄호 시퀀스의 수를 계산합니다.

PHPz
PHPz앞으로
2023-08-30 23:49:131138검색

N 기간이 아닌 다양한 일반 괄호 시퀀스의 수를 계산합니다.

이 기사에서는 조합론 및 문자열 처리 영역의 흥미로운 문제인 "N 주기가 아닌 별개의 일반 대괄호 시퀀스 계산"을 탐구합니다. 이 문제는 고유한 유효한 대괄호 시퀀스를 생성한 다음 관련됩니다. N-주기적인 시퀀스 필터링 문제에 대해 논의하고 무차별 접근 방식의 C++ 코드 구현을 제공하며 테스트 사례를 설명합니다.

문제 설명 이해하기

정수 N이 주어지면 작업은 N 마침표가 아닌 길이 2N의 다양한 일반 대괄호 시퀀스의 수를 계산하는 것입니다. 시퀀스가 M번 반복되는 문자열 S로 표현될 수 있고 S의 길이는 N이고 M > 1인 경우 시퀀스는 N-주기적입니다.

일반 대괄호 시퀀스는 원래 문자 사이에 문자 '1'과 '+'를 삽입하여 올바른 산술 표현식으로 변환할 수 있는 문자열입니다. 예를 들어 시퀀스 "(())"는 일반이지만 ")( "와 "(()"는 그렇지 않습니다.

방법

문제의 복잡성으로 인해 직접적인 수학적 해결이 불가능할 수 있습니다. 대신 프로그래밍 방식을 사용하여 대괄호 시퀀스를 생성하고 기준과 일치하는 대괄호 시퀀스의 수를 계산해야 합니다.

재귀 함수를 사용하여 길이가 2N인 모든 가능한 괄호 시퀀스를 생성합니다. 시퀀스를 생성하는 동안 두 가지 중요한 매개변수인 괄호의 균형(열린 괄호 수는 숫자보다 작아서는 안 됩니다)을 추적합니다. 닫힌 괄호 수) 및 열린 괄호 수(N을 초과할 수 없음).

N주기 시퀀스를 필터링하기 위해 생성된 각 시퀀스를 확인합니다. 시퀀스가 길이 N의 더 작은 시퀀스의 반복인 경우 이를 카운트에서 제외합니다.

C++ 구현

이것은 C++의 문제를 해결하기 위한 무차별 대입 접근 방식입니다. 이 방법은 가능한 모든 대괄호 시퀀스를 생성하고 각 시퀀스가 ​​N주기인지 확인하고 그렇지 않은 경우 개수를 증가시킵니다. 이 솔루션은 기하급수적인 시간 복잡도를 가지며 더 큰 입력에 대해서는 잘 확장되지 않으므로 작은 입력 크기에 적합합니다.

으아악

출력

으아악

테스트 케이스

N = 3인 테스트 케이스를 고려해 보겠습니다. 이 코드는 3주기가 아닌 길이 6의 5개의 고유한 일반 대괄호 시퀀스를 모두 생성합니다: ((())), (()()), (())( ), ()(()), ()()().

결론

이 글에서는 N 마침표가 아닌 다양한 일반 괄호 시퀀스의 계산 문제를 강력하게 해결하는 방법을 소개합니다. 이 접근 방식은 소규모 입력을 처리할 수 있지만 가능한 모든 대괄호 시퀀스를 생성하고 확인해야 하기 때문에 문제가 기하급수적으로 복잡하므로 대규모 입력에는 적합하지 않다는 점에 유의하는 것이 중요합니다.

위 내용은 N 기간이 아닌 다양한 일반 괄호 시퀀스의 수를 계산합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제