목차
문법
알고리즘
접근 방법 1: 간단한 세그먼트 트리 사용
예제-1
출력
전파가 지연된 세그먼트 트리를 사용하는 방법
예 2
결론
백엔드 개발 C++ 선분 트리를 사용한 LIS(최장 증가 부분 수열)의 길이

선분 트리를 사용한 LIS(최장 증가 부분 수열)의 길이

Aug 27, 2023 pm 04:25 PM
길이 가장 긴 증가 부분 수열 세그먼트 트리

선분 트리를 사용한 LIS(최장 증가 부분 수열)의 길이

세그먼트 트리는 범위 쿼리에 응답하고 로그 시간 복잡도에서 배열 업데이트 작업을 수행하도록 설계된 다목적 데이터 구조입니다. 여기서 각 노드는 배열의 특정 요소 범위와 관련된 정보를 저장합니다.

주어진 수열의 요소가 오름차순으로 정렬된 가장 긴 부분 수열의 길이를 결정해야 하는 LIS(Longest Going Subsequence) 문제의 맥락에서 선분 트리를 사용하여 효율적으로 계산할 수 있습니다. 배열에서 가장 길게 증가하는 부분 수열의 길이입니다.

이 방법은 기존 방법에 비해 시간 복잡성을 크게 줄이고 유전체학, 자연어 처리, 패턴 인식 등 분야에 많이 응용됩니다. 이 기사에서는 세그먼트 트리의 기본 사항을 살펴보고 가장 오래 증가하는 하위 시퀀스 문제를 해결할 수 있는 잠재력을 보여줍니다.

문법

세그먼트 트리 구축 기능 −

으아악

세그먼트 트리 쿼리 기능 −

으아악

세그먼트 트리 업데이트 기능 −

으아악

알고리즘

세그먼트 트리를 사용하여 LIS(최장 증가 부분 수열)의 길이를 찾는 알고리즘은 다음과 같습니다.

  • 입력 시퀀스를 나타내는 배열을 초기화합니다.

  • 입력 시퀀스와 동일한 크기의 세그먼트 트리로 초기화 build 함수를 사용하여 선분 트리 만들기
  • 입력 시퀀스의 각 요소를 처리합니다.

  • 각 요소에 대해 세그먼트 트리를 쿼리하여 현재 요소에서 끝나는 LIS의 최대 길이를 찾습니다.

  • 업데이트 기능을 사용하여 세그먼트 트리를 업데이트하세요.

  • 입력 시퀀스의 모든 요소에 대해 4~6단계를 반복하세요.

  • 최종 답은 세그먼트 트리에 저장된 최대값입니다.

접근 방법 1: 간단한 세그먼트 트리 사용

이 접근 방식에서는 지연 전파와 같은 최적화 기술 없이 간단한 세그먼트 트리를 구현합니다.

예제-1

아래 프로그램은 C++에서 간단한 세그먼트 트리를 사용하여 LIS(최장 증가 부분 시퀀스)의 길이를 찾는 방법을 보여줍니다. 빌드, 쿼리 및 업데이트 기능은 세그먼트 트리를 구성하고 a에서 끝나는 LIS의 최대 길이를 검색하는 데 사용됩니다. lengthOfLIS 함수는 입력 시퀀스의 각 요소를 반복하고 세그먼트 트리를 사용하여 LIS 길이를 계산합니다.

으아악

출력

으아악

전파가 지연된 세그먼트 트리를 사용하는 방법

이 접근 방식에서는 지연 전파를 사용하여 세그먼트 트리를 구현하여 알고리즘의 시간 복잡도를 더욱 최적화합니다.

예 2

아래 코드는 전파가 지연된 세그먼트 트리를 사용하여 C++에서 가장 긴 증가 부분 수열(LIS)의 길이를 찾는 방법을 보여줍니다. 이 코드는 방법 1의 코드와 유사합니다. 두 방법의 주요 차이점은 세그먼트 트리의 내부 구현입니다. 지연 전파 기술은 LIS 문제에 존재하지 않는 특정 사용 사례에 대해 업데이트 기능을 최적화하기 때문에 이 코드에 명시적으로 표시되지 않습니다. 다만, 코드의 기본 구조는 동일하며, 빌드, 쿼리, 업데이트 기능은 방법 1과 유사하게 사용됩니다.

으아악

출력

으아악

결론

이 글에서는 C++의 선분 트리 기법을 통해 LIS(최장 증가 부분 수열)의 범위를 결정하는 방법을 설명합니다. 우리는 두 가지 접근 방식을 설명합니다. 하나는 세그먼트 트리를 직접 수행하는 것이고 다른 하나는 향상된 지연 전파 방법을 활용하는 것입니다. 두 기법 모두 LIS 문제를 해결하는 데 효과적이며 최적화 방법의 지연 전파는 시간 복잡도를 더욱 줄여줍니다.

위 내용은 선분 트리를 사용한 LIS(최장 증가 부분 수열)의 길이의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

PHP 배열 길이 제한은 무엇입니까? PHP 배열 길이 제한은 무엇입니까? Mar 13, 2024 pm 06:30 PM

PHP의 배열 길이에는 고정된 제한이 없으며 시스템의 메모리 크기에 따라 동적으로 조정될 수 있습니다. PHP에서 배열은 원하는 수의 요소를 저장할 수 있는 매우 유연한 데이터 구조이며, 각 요소는 모든 유형의 값 또는 다른 배열일 수 있습니다. PHP 배열의 길이 제한은 주로 시스템의 메모리 크기와 PHP 구성의 메모리 제한에 따라 달라집니다. 일반적으로 시스템의 메모리가 충분히 크고 PHP의 메모리 제한이 충분히 높으면 배열의 길이가 매우 커질 수 있습니다. 그러나 시스템의 메모리가 부족하거나

PHP 배열 길이에 제한이 있나요? PHP 배열 길이에 제한이 있나요? Mar 13, 2024 pm 06:36 PM

PHP 배열 길이에 제한이 있나요? 특정 코드 예제가 필요합니다. PHP에서는 배열 길이에 고정된 제한이 없으며 배열 크기는 시스템 메모리의 실제 제한에 따라 동적으로 조정될 수 있습니다. PHP의 배열은 동적 배열이므로 필요에 따라 동적으로 늘리거나 줄일 수 있습니다. PHP에서 배열은 순서가 지정된 매핑된 데이터 구조이며 배열 요소는 배열 첨자 또는 연관 배열 키 값을 사용하여 액세스할 수 있습니다. PHP 배열 길이가 제한되어 있는지 여부를 보여주기 위해 특정 코드 예제를 살펴보겠습니다. 먼저 다음 코드를 전달할 수 있습니다.

주어진 배열에서 동일한 문자가 없는 두 문자열 길이의 최대 합을 구합니다. 주어진 배열에서 동일한 문자가 없는 두 문자열 길이의 최대 합을 구합니다. Aug 29, 2023 pm 06:45 PM

이 글의 목적은 주어진 배열에서 공통 문자가 없는 문자열 쌍의 길이의 합을 최대화하는 프로그램을 구현하는 것입니다. 정의에 따르면 문자열은 문자 모음입니다. 문제 설명 주어진 배열에서 공통 문자가 없는 문자열 쌍의 길이 합을 최대화하는 프로그램을 구현하십시오. 예 1LetusconsidertheInputarray:a[]=["efgh","hat","fto","car","wxyz","fan"]Outputobtained:8 설명 문자열 "abcd" 및 "wxyz에 공통 문자가 없습니다. ". 결과적으로, 두 문자열의 결합된 길이는 4+4이며, 이는 가능한 모든 쌍 중에서 가장 긴 길이인 8과 같습니다. 실시예 2레투

C++에서 가장 긴 증가 하위 시퀀스 알고리즘을 사용하는 방법 C++에서 가장 긴 증가 하위 시퀀스 알고리즘을 사용하는 방법 Sep 19, 2023 pm 05:21 PM

C++에서 가장 긴 증가 부분 수열 알고리즘을 사용하려면 특정 코드 예제가 필요합니다. LIS(최장 증가 부분 수열)는 고전적인 알고리즘 문제이며 해당 솔루션 아이디어는 데이터 처리 및 그래프 이론과 같은 다양한 분야에 적용될 수 있습니다. 이번 글에서는 C++에서 가장 길게 증가하는 하위 시퀀스 알고리즘을 사용하는 방법을 소개하고 구체적인 코드 예제를 제공하겠습니다. 먼저, 가장 긴 증가 부분 수열의 정의를 이해해 봅시다. 시퀀스 a1이 주어지면,

len 함수의 사용과 중요성에 대한 다양한 관점 len 함수의 사용과 중요성에 대한 다양한 관점 Dec 28, 2023 am 08:38 AM

len 함수의 역할과 의미는 다양한 각도에서 해석됩니다. len 함수는 Python 프로그래밍 언어에서 일반적으로 사용되는 함수 중 하나입니다. 주로 컨테이너 개체(예: 문자열, 목록, 튜플 등)의 요소 길이나 개수를 반환하는 데 사용됩니다. 이 간단한 함수는 프로그램을 작성할 때 매우 중요한 역할을 하며, 그 기능과 의미는 여러 각도에서 해석될 수 있습니다. 이 글에서는 성능, 가독성, 컨테이너 유형의 관점에서 len 함수를 설명하고 구체적인 코드 예제를 제공합니다. 1. 성능 관점 대용량 데이터를 처리할 때 프로그램의 성능은

Java에서 빗변의 길이를 찾는 방법은 무엇입니까? Java에서 빗변의 길이를 찾는 방법은 무엇입니까? Sep 09, 2023 pm 10:33 PM

빗변은 직각 반대편에 있는 직각 삼각형의 가장 긴 변입니다. 빗변의 길이는 피타고라스의 정리를 이용하여 구할 수 있습니다. 피타고라스 정리에 따르면 두 변의 길이의 제곱의 합은 세 번째 변의 길이의 제곱과 같습니다. 즉, a2+b2=c2입니다. 여기서 a, b, c는 세 변을 나타냅니다. 직각 삼각형의. 따라서 Hypotenuse=Math.sqrt(Math.pow(base,2)+Math.pow(height,2)) 이번 글에서는 Java 프로그래밍 언어를 이용하여 빗변의 길이를 구하는 방법을 알아보겠습니다. 몇 가지 예를 보여드리겠습니다. Instance-1의 중국어 번역은 다음과 같습니다. 예-1 기본 길이와 높이가 각각 3과 4라고 가정합니다. 그런 다음 피타고라스 정리 공식을 사용하여 길이

golang에서 입력 텍스트의 길이를 확인하는 방법 golang에서 입력 텍스트의 길이를 확인하는 방법 Jun 24, 2023 am 11:52 AM

golang에서는 입력 텍스트의 길이를 확인하는 것이 일반적인 요구 사항입니다. 유효성 검사를 통해 입력한 텍스트가 특정 요구 사항을 충족하고 예상 길이 내에 있는지 확인할 수 있습니다. 이번 글에서는 golang을 사용하여 입력 텍스트의 길이를 확인하는 방법을 살펴보겠습니다. 먼저 golang에서 일반적으로 사용되는 문자열 함수를 이해해야 합니다. 그 중 len() 함수를 사용하여 문자열의 길이를 계산합니다. 예를 들어, 다음 코드는 "helloworld" 문자열의 길이를 계산합니다. str:=

정확히 X개의 모음을 포함하는 길이가 K인 부분 문자열의 수 정확히 X개의 모음을 포함하는 길이가 K인 부분 문자열의 수 Sep 01, 2023 am 08:57 AM

이 문제에서는 정확히 K개의 모음을 포함하는 길이가 K인 부분 문자열의 총 개수를 찾아야 합니다. 우리는 문제를 해결하는 두 가지 다른 방법을 살펴보겠습니다. 간단한 방법을 사용하여 길이 K의 각 하위 문자열에서 모음 수를 확인할 수 있습니다. 또한 이 문제를 해결하기 위해 슬라이딩 윈도우 접근 방식을 사용할 수 있습니다. 문제 설명 - 알파벳 소문자와 대문자를 포함하는 길이 N의 문자열 str이 제공됩니다. 정확히 X개의 모음을 포함하는 길이가 K인 부분 문자열의 총 개수를 계산해야 합니다. 입력 예 – str="TutorialsPoint",K=3,X=2 출력 – 6 설명 – 길이가 3이고 정확히 2개의 모음을 포함하는 하위 문자열은 'uto', 'ori', 'ri입니다.

See all articles