주어진 문자 세트와 레이어 수를 기준으로 반복하지 않고 연속적인 동일한 문자가없는 순열 조합을 생성하는 방법은 무엇입니까?
문자 세트 및 레이어 : 고유 한 순열을 효율적으로 생성합니다
이 기사에서는 주어진 문자 세트 및 레이어 수를 기반으로 한 중복 및 연속 동일한 문자없이 순열 조합을 생성하는 방법을 살펴 봅니다. 예를 들어, 문자 세트 {A, B}, 3 계층 순열 조합에는 AAB, ABA, ABB, BAA, BAB, BBA 등이 포함되어야하지만 AAA, BBB 및 기타 연속 반복 된 문자는 포함되어야합니다. 이를 위해서는 중간 복제를 처리하고 문자의 지속적인 복제를 피하기 위해 알고리즘이 필요합니다.
핵심 과제는 다른 문자 세트와 레이어에 적응할 수있는 알고리즘을 설계하고 기준을 충족하는 순열을 효율적으로 생성하는 것입니다. 이 기사는 디지털 교체 방법과 역 추적 방법의 두 가지 방법을 소개합니다.
방법 1 : 디지털 교체 방법
이 방법은 순열 조합을 m 자리 숫자로 취급합니다 (m은 문자 세트 크기). 예를 들어, 문자 세트 {a, b}는 이진 번호에 해당합니다. 00은 AA를 나타내고 01은 AB 등을 나타냅니다. 모든 m 자리 숫자를 가로 지르고 문자를 교체하면 가능한 모든 조합을 얻을 수 있습니다. 연속적인 동일한 문자를 피하려면 모든 비트가 동일한 숫자와 같은 특정 M 자리 숫자를 제외해야합니다.
파이썬 코드 예 :
def solve_digit (arr, m, allow_all_same = false) : res, cur = [], [ ''] * m n = len (arr) all_same_num = 0 _ 범위 (m)의 경우 : all_same_num = all_same_num * n 1 범위 (n ** m)의 경우 : allud_all_same 또는 d % all_same_num! = 0 인 경우 : 0 : 범위의 i (m -1, -1, -1) : cur [i] = arr [d % n] d // = n res.append ( ''. join (cur)) 반환 해상도 print (solve_digit ( 'ab', 2)) # [ 'ab', 'ba'] print (solve_digit ( 'ab', 2, true)) # [ 'aa', 'ab', 'ba', 'bb'] print (solve_digit ( 'ab', 3)) # [ 'aab', 'aba', 'abb', 'baa', 'bab', 'bba'] print (solve_digit ( 'abc', 2)) # [ 'ab', 'ac', 'ba', 'bc', 'ca', 'cb']
방법 2 : 역 추적 방법
Backtrace는 가능한 모든 조합을 시도하여 결과를 찾는 재귀 알고리즘입니다. 각 단계에서 캐릭터를 현재 조합에 추가하고 더 긴 조합을 재귀 적으로 생성합니다. 동시에, 조건을 충족하지 않는 조합을 피하기 위해 이전 문자가 동일한 지 여부를 추적해야합니다.
파이썬 코드 예 :
def solve_backtracking (arr, m, allow_all_same = false) : res, cur = [], [ ''] * m def dfs (i, same) : i == m : 동일하지 않은 경우 : res.append ( ''. join (cur)) 반품 ARC의 경우 : cur [i] = a dfs (i 1, 동일 및 a == cur [i -1]) ARC의 경우 : cur [0] = a DFS (1, allow_all_same 아님) 반환 해상도 print (solve_backtracking ( 'ab', 2)) # [ 'ab', 'ba'] print (solve_backtracking ( 'ab', 2, true)) # [ 'aa', 'ab', 'ba', 'bb'] print (solve_backtracking ( 'ab', 3)) # [ 'aab', 'aba', 'abb', 'baa', 'bab', 'bba'] print (solve_backtracking ( 'abc', 2)) # [ 'ab', 'ac', 'ba', 'bc', 'ca', 'cb']
두 방법 모두 문제를 해결할 수 있습니다. 디지털 교체 방법이 더 효율적이고 역 추적 방법을 이해하기 쉽습니다. 선택할 방법은 특정 응용 프로그램 시나리오 및 개인 선호도에 따라 다릅니다.
위 내용은 주어진 문자 세트와 레이어 수를 기준으로 반복하지 않고 연속적인 동일한 문자가없는 순열 조합을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

WordPress 기사 목록을 조정하는 4 가지 방법이 있습니다. 테마 옵션 사용, 플러그인 사용 (예 : Post Type Order, WP Post List, Boxy Sitture), 코드 사용 (Functions.php 파일의 설정 추가) 또는 WordPress 데이터베이스를 직접 수정하십시오.

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

Python은 배우고 사용하기 쉽고 C는 더 강력하지만 복잡합니다. 1. Python Syntax는 간결하며 초보자에게 적합합니다. 동적 타이핑 및 자동 메모리 관리를 사용하면 사용하기 쉽지만 런타임 오류가 발생할 수 있습니다. 2.C는 고성능 응용 프로그램에 적합한 저수준 제어 및 고급 기능을 제공하지만 학습 임계 값이 높고 수동 메모리 및 유형 안전 관리가 필요합니다.

가상 통화의 "가장 오래된"순위는 다음과 같습니다. 1. 2009 년 1 월 3 일에 발행 된 BTC (Bitcoin)는 최초의 분산 디지털 통화입니다. 2. 2011 년 10 월 7 일에 출시 된 Litecoin (LTC)은 "비트 코인의 가벼운 버전"으로 알려져 있습니다. 3. 2011 년에 발행 된 Ripple (XRP)은 국경 간 지불을 위해 설계되었습니다. 4. 2013 년 12 월 6 일에 발행 된 Dogecoin (Doge)은 Litecoin 코드를 기반으로 한 "Meme Coin"입니다. 5. 2015 년 7 월 30 일에 출시 된 Ethereum (ETH)은 스마트 계약을 지원하는 최초의 플랫폼입니다. 6. 2014 년에 발행 된 테더 (USDT)는 미국 달러 1 : 1에 정박 한 최초의 안정적인 스타블 레코 인입니다. 7. Ada,

초보자에게 적합한 cryptocurrency 데이터 플랫폼에는 CoinmarketCap 및 비소 트럼펫이 포함됩니다. 1. CoinmarketCap은 초보자 및 기본 분석 요구에 대한 글로벌 실시간 가격, 시장 가치 및 거래량 순위를 제공합니다. 2. 비소 인용문은 중국 사용자가 저 위험 잠재적 프로젝트를 신속하게 선별하는 데 적합한 중국 친화적 인 인터페이스를 제공합니다.

SpringBoot 프로젝트를 설정하는 방법 Intellij를 사용하여 Idea에서 기본 실행 구성 목록 ...

Springcloud를 사용한 SpringCloudalibaba 마이크로 서비스 모듈 식 개발 ...

Python 프로젝트의 계층 구조에 대한 토론 Python 학습 과정에서 많은 초보자는 일부 오픈 소스 프로젝트, 특히 Django 프레임 워크를 사용한 프로젝트와 접촉 할 것입니다 ...
