다른 스틱에서 동일한 스틱 절단


10

당신은 반드시 통합하지 임의의 길이의 스틱.n

일부 막대기를 자르면 (한 컷은 하나의 막대기를 자르지 만 원하는만큼 자주자를 수 있습니다), 다음 과 같은 막대기 를 얻으려고 합니다.k<n

  • 이 모든 스틱의 길이는 같습니다.k
  • 모든 스틱은 다른 스틱보다 길다.k

컷 을 수행 한 후 스틱을 얻습니다 .Cn+CC

필요한 컷 수가 최소화되도록 어떤 알고리즘을 사용 하시겠습니까? 그리고 그 숫자는 무엇입니까?

예를 들어 및 . 다음과 같은 알고리즘을 사용할 수 있습니다., N ≥ 2k=2n≥2

  • 과 같이 길이의 내림차순으로 스틱을 주문하십시오 .L1≥L2≥…≥Ln
  • 만약 L1≥2L2 다음 잘라 스틱 # 1 개의 동일한 조각. 길이 의 두 개의 스틱 엘1/2이 있으며, 최소한 나머지 스틱 만큼 깁니다 2…엔.
  • 그렇지 않으면 ( 엘1<2엘2 ), 스틱 # 1을 크기가 다른 두 개의 L2 및 조각으로 자릅니다 L1−L2. 길이가 L2 인 두 개의 스틱이 있는데 , 이는 보다 길고 L1−L2다른 스틱은 3…n 입니다.

두 경우 모두 단일 컷으로 충분합니다.

나는 이것을 더 큰 로 일반화하려고 시도했지만 케이고려해야 할 많은 사례가있는 것 같습니다. 당신은 우아한 해결책을 찾을 수 있습니까?

답변:


6

이 문제를 해결하기위한 제 1 코어 관찰된다는 절단 길이의 타당성 ,엘

,Feasible⁡(l)=[∑i=1n⌊Lil⌋≥k]

로 상수, 왼쪽 연속 및 비 증가입니다 . 필요한 절단 횟수가 비슷하게 동작하므로 최적의 길이를 찾는 것은엘

엘⋆=최대{엘∣실현 가능 한⁡(엘)}

또한 다른 답변이 제안 모든 점프 불연속은 형식 입니다. 이로 인해 유한 한 후보 집합을 정렬 한 후 이진 검색에 적합한 불연속 1 차원 검색 문제가 발생합니다.엘나는/제이

또한 가장 큰 보다 짧은 만 고려하면 점에 하십시오 . K엘나는케이

그런 다음 다른 경계 는 다른 효율의 알고리즘으로 이어집니다.제이

  • k1≤제이≤케이 는 2 차 크기 ( ) 의 검색 공간을 생성합니다 .케이
  • L i1≤제이≤⌈케이/나는⌉ 선형 선형으로 ( 가 크기를 줄이면 정렬 된다고 가정)에서엘나는
  • 선형으로 약간 더 많은 범위를 포함합니다.

이를 사용하여 제안 된 문제를 시간 및 공간 에서 해결할 수 있습니다 .Θ ( n + k )Θ(엔+케이로그⁡케이)Θ(엔+케이)

하나 개의 상기 관찰의 합이다 에서 성장 로 각 후보 중복 계산 "통과". 이를 사용하여 이진 검색 대신 순위 선택을 사용하고 시간 및 공간 에서 실행되는 알고리즘을 얻을 수 있으며 이는 최적입니다. l 1 L i / j Θ ( n )에프이자형ㅏ에스나는비엘이자형엘1엘나는/제이Θ(엔)

Fewest Cuts가있는 Envy-Free Stick Division의 효율적인 알고리즘 (Reitzig and Wild, 2015) 에서 자세한 내용을 확인하십시오 .


밝혀진 바와 같이, 우리의 절단 스틱 접근 방식의 아이디어는보다 일반적인 문제 또는 (비례적인) 배분 , 실질적인 관련성 문제로 이어진다. 우리의 짧은 기사를 참조하십시오 .
— Raphael

4

@randomA가 제안한 바와 같이, 우리는 두 단계로 진행할 것입니다. 먼저 절단 할 스틱 세트를 찾은 다음 절단 수를 최소화합니다.

문제의 특별한 경우와 마찬가지로 스틱을 정렬 / 이름 지정하여 합니다. 이것은 O ( n log n ) 시간 이 걸립니다 .엘1≥엘2≥⋯≥엘엔영형(엔로그⁡엔)

@ user1990169가 지적했듯이, 우리는 조각을자를 필요가 없습니다 .나는≥케이

첫 번째 단계에서는 번호 찾기 위해 이진 검색을 사용하는 , 1 ≤ S ≤ K 때문에 스틱 것을 1 , ... , S는 로 될 수 컷 적어도 K의 크기의 조각 L S (및 약간의 작은 조각들)이지만 스틱 1 , … , s - 1 은 크기 L s - 1 의 k 조각 으로 절단 할 수 없습니다 . 이것은 O ( k log k ) 시간이 걸립니다.에스1≤에스≤케이1,…,에스케이엘에스1,…,에스−1케이엘에스−1영형(케이로그⁡케이)

경우 ,이 값은 최적의 크기이고 우리는 두 단계를 건너 뛸 수있다.엘에스−1=엘에스

그렇지 않으면 최적의 크기 가 L s - 1 > o ≥ L s를 충족 하고 o > L s 이면 o 중 하나 이상을 같은 크기의 조각으로 자르면 발생합니다. 2 단계는 o 를 결정합니다 .영형엘에스−1>영형≥엘에스영형>엘에스영형영형

각 스틱 , 1 ≤ i ≤ s 에 대해 다음과 같이 후보 크기 세트를 결정하십시오. 크기 L s 로 자르면 스틱이 r i 피스 (더 짧은 경우 포함) 를 켭니다. 스틱은 모든 값 L i나는1≤나는≤에스엘에스아르 자형나는 , 여기서J≤RI및L에서I엘나는제이제이≤아르 자형나는입니다. (이들이 유일한 후보 크기 인 이유는@ user1990169의 답변을참조하십시오.)엘나는제이<엘에스−1

각 후보 크기마다 발생 빈도를 유지하십시오. 균형 검색 트리를 사용하면 후보 크기의 총 개수가 ∑ i r i ≤ 2 k로 제한되므로 로 수행 할 수 있습니다 .영형(케이로그⁡케이)∑나는아르 자형나는≤2케이

이제 가장 자주 발생하고 유효한 절단으로 이끄는 후보 크기는 최적의 솔루션을 제공하는 크기입니다. 또한, 후보 크기가 유효한 절단으로 이어지는 경우, 작은 크기도 유효한 절단으로 이어집니다.

우리가 다시 가장 큰 후보 길이를 찾기 위해 이진 검색을 사용할 수 있다는 점에서 유효한 절단에 리드 . 그런 다음이 임계 값까지 후보 길이 집합을 반복하고 O ( k ) 에서 가장 큰 수를 갖는 것을 찾습니다 .영형(케이로그⁡케이)영형(케이)

초기 정렬을 무시하거나 수행 할 필요가없는 경우 총 런타임은 또는 O ( k log k ) 로 표시됩니다.영형(엔로그⁡엔)영형(케이로그⁡케이)


이진 탐색 단계에서, "스틱 가 적어도 k 개의 크기 L s 로 절단 될 수 있는지"를 정확히 어떻게 확인 합니까? 1,…,에스케이엘에스
— Erel Segal-Halevi

옵션 컴퓨팅 ⌊ L I / L 의 ⌋ . 이 값들의 합은 얻을 수있는 조각의 수입니다. 1≤나는≤에스⌊Li/Ls⌋
— FrankW

"가장 자주 발생하는 후보 크기는 ... 우리에게 최적의 솔루션을 제공하는 크기"입니다. 왜 그렇습니까?
— Erel Segal-Halevi

그것이 발생할 때마다, 우리는 t - 1 컷으로 조각 을주는 막대기를 가지고 있습니다 . 티티−1
— FrankW

1
총 컷 수는 가장 좋은 경우 2 (k케이2길이가 같은 2 개의 막대기, 다른 모든 막대기는 이것들만큼 길고 내가 볼 수있는 한k-1보다 크지 않을 것입니다. (모든 컷이 올바른 길이의 스틱과 나머지를 만들어 내기때문에 절대로k보다 크지 않습니다. 그러나 적어도 하나의 컷이 올바른 길이의 나머지를 남기도록 항상 크기를 선택할 수 있습니다. 그러나 이에 대한 증거는 없습니다.)케이2케이−1케이
— FrankW

1

당신이 그들의 길이의 내림차순으로 스틱을 주문한 후, 다음 막대기 단지 모든 경우 스틱 절단되어야 L 1 , L 2 , . . . L i - 1 이 절단되었습니다.엘나는엘1,엘2,...엘나는−1

이제 이기 때문에 , 우리는 막대기 L k를 앞으로 자르지 않을 것입니다. 우리는 항상 길이가 L k 인 k 개의 막대기를 가질 수 있기 때문 입니다.케이<엔엘케이케이엘케이

그래서 지금 대신 , 우리는 다루고있는 K - 1 개 스틱 (아마도 추가 K , 최악의 경우에 요구해야한다 상처의 최대 수를 전체 번째 스틱) = K - 1 .엔케이−1케이=케이−1

상처의 최적의 개수 인 경우에도, , 그 다음 그 중에서 스틱 중 적어도 하나 개의 세트가된다 K - 1 개 1 개 원래 스틱에서 전체적으로 수행된다 스틱<케이−1케이−1 (부품에 있거나, 1 개 조각)을 즉, 원래 스틱의 어떤 부분도 '깨지지 않은'상태로 두지 않아야합니다. 이는 비둘기 구멍 원리에 의해 유효한 스틱을 1 개 이상 생산해야하는 컷이 1 개 이상 있어야하기 때문입니다.

그런 다음 두 개의 중첩 된 for 루프를 수행 할 수 있습니다 (둘 다 까지 ). 외부 루프는 스틱 번호 나타낸다한다 난 그 모든 부분이 취해질 및 내부 루프는 부품의 개수 나타낸다한다 J 그 스틱 제조한다. 각 크기를 들면 L의 전케이나는제이
스틱L1을순차적으로절단하여 실행 가능한 k 스틱을 얻을 수 있는지 확인하고 가능하면 현재 필요한 수가 적 으면 지금까지 필요한 최소 컷을 업데이트하십시오.엘나는제이엘1

위 알고리즘의 총 복잡도는 영형(엔엘영형지(엔)+케이삼)


1

높은 수준의 아이디어는 이진 검색입니다.

요청 된 k 개의 스틱 각각의 크기는 적어도 가장 작은 스틱이자 최대의 스틱이 될 것입니다. 이 때문에, 우리는 중간 스틱의 크기에 이진 검색을 사용하여 진행 무슨 수를 참조 이 있다면, 우리가 얻을 수 k는 ' 더 주어보다 K 우리가 새로운 참조 후보 크기를 선택해야합니다 알고 다음. 따라서 새로운 기준 스틱을 사용하여 더 크거나 작게 이동합니다. k ' 가 k 보다 작을 때 우리는 멈춘다케이'케이'케이케이'케이

적절한 참조 스틱을 찾으면 크기를 더 세분화해야하는 코너 케이스가 있습니다. 모든 컷 스틱을 컷 수와 스틱 크기로 정렬 할 수 있습니다. 최소 컷 수와 최소 크기를 가진 것을 선택하십시오. 이 스틱의 절단 횟수를 1 씩 줄이고 이의 모든 하위 스틱을 같은 크기로 만드십시오. 이것이 새로운 참조 크기가 될 것입니다.이 새로운 크기가 수용 가능한 이어지는 지 확인하십시오 . 나는이 경우에 러닝 타임을 묶는 방법을 모른다는 것을 인정한다.케이'

바라건대, 나는 다른 답변에서 유용한 것을 볼 수 있습니다.


2
나는 당신의 접근 방식의 기본 아이디어가 효과가 있다고 생각합니다. 그러나 알고리즘에 대한 설명은 확실하지 않습니다. 더 자세한 의사 코드를 추가 할 수 있습니까?
— FrankW

@FrankW 나는 실행 시간에 대해 너무 확신하지 못했습니다. 다른 사람들이 가진 것을 볼 것입니다. 이것은 매우 흥미로운 질문입니다.
— InformedA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.