인구가 가장 많은 연도 찾기 (가장 효율적인 솔루션)


9

두 개의 배열이 주어진다; $births누군가가 태어 났을 때를 나타내는 생년월일 $deaths목록과 누군가가 죽었을 때를 나타내는 사망 년 목록이 들어있는 경우, 인구가 가장 높은 해를 어떻게 찾을 수 있습니까?

예를 들어 다음과 같은 배열이 있습니다.

$births = [1984, 1981, 1984, 1991, 1996];
$deaths = [1991, 1984];

그 해에 사람들이 살아 1996있었기 때문에 인구가 가장 높은 연도는이어야합니다 . 이는 3그 기간 동안 가장 많은 인구 수였습니다.

여기에 실행중인 수학이 있습니다.

| 출생 | 죽음 | 인구 |
| ------- | ------- | ------------ |
| 1981 | | 1 |
| 1984 | | 2 |
| 1984 | 1984 | 2 |
| 1991 | 1991 | 2 |
| 1996 | | 3 |

가정

우리는 누군가가 태어난 해가 1 년 증가 할 수 있고 누군가가 사망 한 해가 1 감소 할 수 있다고 안전하게 가정 할 수 있습니다. 이 예에서 1984 년에 2 명이 태어 났고 1984 년에 1 명이 사망했습니다. 이는 그해 인구가 1 명 증가했음을 의미합니다.

또한 사망자 수가 절대로 출생자 수를 초과하지 않으며 모집단이 0 일 때 사망 할 수 없다고 안전하게 추측 할 수 있습니다.

우리는 또한 안전하게 모두 년간 있다고 가정 할 수 있습니다 $deaths$births(음수 또는 부동 소수점 값 없을 것 그들은 항상 0보다 큰 양의 정수이야 ).

우리는 할 수없는 배열 정렬됩니다 또는 그러나, 중복 값이 없을 것으로 가정합니다.

요구 사항

이 두 배열을 입력으로하여 가장 많은 인구가 발생한 연도를 반환하는 함수를 작성해야합니다. 이 함수는 반환 할 수 있습니다 0, false, "", 또는 NULL( 어떤 falsey 값이 허용 ) 입력 배열이 비어있는 경우 또는 인구가 전체에서 0 항상 있다면. 최고 인구가 여러 해에 발생한 경우이 함수는 최고 인구에 도달 한 첫 해 또는 그 다음 해를 반환 할 수 있습니다.

예를 들면 다음과 같습니다.

$births = [1997, 1997, 1997, 1998, 1999];
$deaths = [1998, 1999];

/* The highest population was 3 on 1997, 1998 and 1999, either answer is correct */

또한 솔루션 의 Big O 를 포함하면 도움이됩니다.


이 작업을 수행하기위한 최선의 시도는 다음과 같습니다.

function highestPopulationYear(Array $births, Array $deaths): Int {

    sort($births);
    sort($deaths);

    $nextBirthYear = reset($births);
    $nextDeathYear = reset($deaths);

    $years = [];
    if ($nextBirthYear) {
        $years[] = $nextBirthYear;
    }
    if ($nextDeathYear) {
        $years[] = $nextDeathYear;
    }

    if ($years) {
        $currentYear = max(0, ...$years);
    } else {
        $currentYear = 0;
    }

    $maxYear = $maxPopulation = $currentPopulation = 0;

    while(current($births) !== false || current($deaths) !== false || $years) {

        while($currentYear === $nextBirthYear) {
            $currentPopulation++;
            $nextBirthYear = next($births);
        }

        while($currentYear === $nextDeathYear) {
            $currentPopulation--;
            $nextDeathYear = next($deaths);
        }

        if ($currentPopulation >= $maxPopulation) {
            $maxPopulation = $currentPopulation;
            $maxYear = $currentYear;
        }

        $years = [];

        if ($nextBirthYear) {
            $years[] = $nextBirthYear;
        }
        if ($nextDeathYear) {
            $years[] = $nextDeathYear;
        }
        if ($years) {
            $currentYear = min($years);
        } else {
            $currentYear = 0;
        }
    }

    return $maxYear;
}

위의 알고리즘 은 각 배열에서 정렬 할 요소의 수가 많은 최악의 O(((n log n) * 2) + k)경우 n와 죽음의 년이 있는 k출생 연도 ( 항상 우리가 알고 있기 때문에) 인kk >= y 다항식 시간에서 작동해야합니다 y. 그러나 더 효율적인 솔루션이 있는지 확실하지 않습니다.

내 관심은 순전히 기존 알고리즘에 대한 계산 복잡성 의 개선 된 Big O에 있습니다. 메모리 복잡도는 중요하지 않습니다. 런타임 최적화도 아닙니다. 적어도 그것은 주요 관심사가 아닙니다 . 사소한 / 주요 런타임 최적화는 환영하지만 여기서 중요한 요소는 아닙니다.


2
작동하는 솔루션이 있으므로 codereview.stackexchange.com에 더 적합 합니까?
Nigel Ren

1
문제는 가장 효율적인 솔루션, 반드시 찾고 있습니다 어떤 작업 솔루션을. 나는 그것이 SO에서 완벽하게 유효하다고 생각합니다.
셰리프

1
나는 그것이 유효하지 않다고 말하고 있지 않다.
Nigel Ren

@NigelRen 나는 노력에 해가 보이지 않습니다. 나는 이것을 며칠 동안 열어두고 싶습니다. 답변을 얻지 못하면 현상금을 지급합니다.
셰리프

1
출생 사망 키워드를 검색하면 SO 자체에 많은 문제가 있습니다. 저렴한 개선은 정렬을 개선하는 것입니다. 길이 배열을 출생 / 사망의 범위로 만듭니다 (각 셀은 기본적으로 값이 0 인 날짜입니다). 출생 및 사망과 관련하여 셀에 1 또는 뺄셈 1을 더한 다음 누적 합계와 발견 된 최대 합계 유지
grodzi

답변:


4

나는 우리가 가질 수있는 생각 O(n log n)과 시간이 O(1)우리 반복 처리로 현재 인구와 세계 최대를 유지, 첫 번째 정렬하여 추가 공간을. 나는 현재 연도를 기준점으로 사용하려고했지만 논리가 여전히 까다로워서 완전히 해결되지는 않았습니다. 바라건대, 접근 방식에 대한 아이디어를 줄 수 있습니다.

JavaScript 코드 (카운터 예 / 버그 환영)

function f(births, deaths){
  births.sort((a, b) => a - b);
  deaths.sort((a, b) => a - b);

  console.log(JSON.stringify(births));
  console.log(JSON.stringify(deaths));
  
  let i = 0;
  let j = 0;
  let year = births[i];
  let curr = 0;
  let max = curr;

  while (deaths[j] < births[0])
    j++;

  while (i < births.length || j < deaths.length){
    while (year == births[i]){
      curr = curr + 1;
      i = i + 1;
    }
    
    if (j == deaths.length || year < deaths[j]){
      max = Math.max(max, curr);
      console.log(`year: ${ year }, max: ${ max }, curr: ${ curr }`);
    
    } else if (j < deaths.length && deaths[j] == year){
      while (deaths[j] == year){
        curr = curr - 1;
        j = j + 1;
      }
      max = Math.max(max, curr);
      console.log(`year: ${ year }, max: ${ max }, curr: ${ curr }`);
    }

    if (j < deaths.length && deaths[j] > year && (i == births.length || deaths[j] < births[i])){
      year = deaths[j];
      while (deaths[j] == year){
        curr = curr - 1;
        j = j + 1;
      }
      console.log(`year: ${ year }, max: ${ max }, curr: ${ curr }`);
    }

    year = births[i];
  }
  
  return max;
}

var input = [
  [[1997, 1997, 1997, 1998, 1999],
  [1998, 1999]],
  [[1, 2, 2, 3, 4],
  [1, 2, 2, 5]],
  [[1984, 1981, 1984, 1991, 1996],
  [1991, 1984, 1997]],
  [[1984, 1981, 1984, 1991, 1996],
  [1991, 1982, 1984, 1997]]
]

for (let [births, deaths] of input)
  console.log(f(births, deaths));

연도 범위 m가 ~에 해당하면 n각 연도의 수를 범위에 저장하고 O(n)시간을 복잡하게 할 수 있습니다. 우리가 화려하고 싶다면 O(n * log log m), 후속 조회를 가능 하게 하는 Y- 고속 트라이 를 사용하여 시간 복잡성을 가질 수도 있습니다 O(log log m).


나에게 Y-fast trie의 존재를 가르치는 것에 대한 thx. Algo 관련 : 감소 후 최대 값을 확인할 필요가 없습니다. 증분 후에 만 ​​가능합니다. 마지막으로 블록이 필요하지 않은 경우 : 두 개의 정렬 된 목록 정렬을 고려하십시오. 두 개의 헤드 (i, j) 만 필요하고 각 헤드를 선택하고 작은 헤드를 선택하십시오. if(birth_i < death_j){//increment stuff + check max} else{//decrement}; birth_i||=infty; death_j||=infty. 또한 최대 반복 할 수 있습니다 min(birthSize, deathSize). 분이 탄생하면 중지하십시오. min이 사망 (의심 ..) 인 경우 중지하고 확인(max + birth.length-i)
grodzi

@grodzi 나는 병합 정렬을 고려하기 시작했지만 복제와 출생 순서 대 죽음의 순서가 카운트에 미치는 영향 때문에 추가 처리가 필요하다고 결론 내 렸습니다. 생년과 비교할 수없는 사망 년이있을 때 마지막 while 루프가 필요한 것 같습니다. 해당 루프의 최대 값이 필요하지 않은 것이 맞습니다.
גלעד ברקן

@ גלעדברקן 선형 시간에 버킷 정렬을 사용하십시오.
Dave

나는 이미이 아이디어를 내 대답으로 언급했다. "연도 범위 m이 n의 차수인 경우, 우리는 해당 범위에 매년 카운트를 저장하고 O (n) 시간 복잡성을 가질 수 있습니다."
גלעד ברקן

이것은 효율성이 아닙니다, 왜 당신에게 보상을 주어야하는지 모르겠습니다
Emiliano

4

버킷 정렬로 선형 시간으로 이것을 해결할 수 있습니다. 입력 크기가 n이고 연도 범위가 m이라고 가정 해 봅시다.

O(n): Find the min and max year across births and deaths.
O(m): Create an array of size max_yr - min_yr + 1, ints initialized to zero. 
      Treat the first cell of the array as min_yr, the next as min_yr+1, etc...
O(n): Parse the births array, incrementing the appropriate index of the array. 
      arr[birth_yr - min_yr] += 1
O(n): Ditto for deaths, decrementing the appropriate index of the array.
      arr[death_yr - min_yr] -= 1
O(m): Parse your array, keeping track of the cumulative sum and its max value.

가장 큰 누적 최대 값이 답입니다.

실행 시간은 O (n + m)이며 필요한 추가 공간은 O (m)입니다.

m이 O (n) 인 경우 n의 선형 솔루션입니다. 즉, 연령 범위가 출생 및 사망자 수보다 빠르게 성장하지 않는 경우. 이것은 실제 데이터에 거의 해당됩니다.


1
작동하는 구현을 포함시킬 수 있습니까?
셰리프

1
@Sherif Implementation은 독자를위한 연습으로 남겨졌습니다 ... 어쨌든 사소한 일입니다. 명확하지 않은 것이 있습니까?
Dave

세분성이 1 년이기 때문에 약간의 모호함이 있습니다. 우리는 연말 기준으로 인구를 효과적으로 측정하고 있으며, 출생 및 사망 시점으로 인해 인구가 더 높은 중년의 다른 시점이있을 수 있습니다.
데이브

1
"max_yr-min_yr + 1 크기의 배열"을 구문 분석해야하는 경우이 선형 시간은 어떻게됩니까? (cc @Sherif)
גלעד ברקן

1
@Dave : 점 1과 2의 복잡성이 O (2n)이 아닙니까? 1. 모든 출생 + 사망에 대해 한 번 반복합니다 . O(n): Find the min and max year across births and deaths 2. 모든 출생 + 사망에 대해 다시 반복합니다. O(n): Parse the births+death array, incrementing the appropriate index of the array 그런 다음 수행 할 작업 : O (m) : 누적 합계와 최대 값을 추적하여 배열을 구문 분석합니다. (이 배열을 구문 분석 할 필요가 없습니다. 2의 인덱스를 증가시키면서 MAX를 추적 할 수 있습니다)
Antony

3

먼저 출생과 사망을지도 ( year => population change)로 모으고 키별로 정렬 한 다음 해당 인구를 계산합니다.

대략적인 O(2n + n log n)위치 여야합니다 n. 출생 수는 어디 입니까?

$births = [1984, 1981, 1984, 1991, 1996];
$deaths = [1991, 1984];

function highestPopulationYear(array $births, array $deaths): ?int
{
    $indexed = [];

    foreach ($births as $birth) {
        $indexed[$birth] = ($indexed[$birth] ?? 0) + 1;
    }

    foreach ($deaths as $death) {
        $indexed[$death] = ($indexed[$death] ?? 0) - 1;
    }

    ksort($indexed);

    $maxYear = null;
    $max = $current = 0;

    foreach ($indexed as $year => $change) {
        $current += $change;
        if ($current >= $max) {
            $max = $current;
            $maxYear = $year;
        }
    }

    return $maxYear;
}

var_dump(highestPopulationYear($births, $deaths));

내가 볼 수 있듯이 : n = 사건 수 (출생 + 사망) 및 m = 사건 년 수 (출생 또는 사망 년) 실제로는 O (n + m log m) 입니다. 경우 N >> m - 이는 고려 될 수 O (N) . 100 년 동안 수십억의 출생과 사망이있는 경우 100 개의 요소 ( ksort($indexed))로 배열을 정렬하는 것은 무의미합니다.
Paul Spiegel

로 출산을 처리 할 수 ​​있습니다 $indexed = array_count_values($births);.
Nigel Ren

3

O(n+m)[최악의 경우 가장 좋은 경우 O(n)] 의 메모리 요구 사항으로이 문제를 해결했습니다 .

및의 시간 복잡성 O(n logn).

여기에 n & m길이 birthsdeaths배열이 있습니다.

PHP 나 자바 스크립트를 모른다. Java로 구현 했으며 논리가 매우 간단합니다. 그러나 나는 그 아이디어를 그 언어로도 구현할 수 있다고 생각합니다.

기술 세부 사항 :

TreeMap출생 및 사망 기록을 저장하기 위해 Java 구조를 사용했습니다 .

TreeMap(키, 값) 쌍으로 정렬 된 ( 키 기반 ) 데이터를 삽입합니다 . 여기에서 키는 연도 이고 값은 출생 및 사망의 누적 합계입니다 (사망의 경우 음수).

우리는 필요하지 않습니다 애프터 일어난 사망 값 삽입 가장 높은 출생 연도를.

TreeMap에 출생 및 사망 기록이 채워지면 모든 누적 합계가 업데이트되고 진행률에 따라 최대 인구를 연도별로 저장합니다.

샘플 입력 및 출력 : 1

Births: [1909, 1919, 1904, 1911, 1908, 1908, 1903, 1901, 1914, 1911, 1900, 1919, 1900, 1908, 1906]

Deaths: [1910, 1911, 1912, 1911, 1914, 1914, 1913, 1915, 1914, 1915]

Year counts Births: {1900=2, 1901=1, 1903=1, 1904=1, 1906=1, 1908=3, 1909=1, 1911=2, 1914=1, 1919=2}

Year counts Birth-Deaths combined: {1900=2, 1901=1, 1903=1, 1904=1, 1906=1, 1908=3, 1909=1, 1910=-1, 1911=0, 1912=-1, 1913=-1, 1914=-2, 1915=-2, 1919=2}

Yearwise population: {1900=2, 1901=3, 1903=4, 1904=5, 1906=6, 1908=9, 1909=10, 1910=9, 1911=9, 1912=8, 1913=7, 1914=5, 1915=3, 1919=5}

maxPopulation: 10
yearOfMaxPopulation: 1909

샘플 입력 및 출력 : 2

Births: [1906, 1901, 1911, 1902, 1905, 1911, 1902, 1905, 1910, 1912, 1900, 1900, 1904, 1913, 1904]

Deaths: [1917, 1908, 1918, 1915, 1907, 1907, 1917, 1917, 1912, 1913, 1905, 1914]

Year counts Births: {1900=2, 1901=1, 1902=2, 1904=2, 1905=2, 1906=1, 1910=1, 1911=2, 1912=1, 1913=1}

Year counts Birth-Deaths combined: {1900=2, 1901=1, 1902=2, 1904=2, 1905=1, 1906=1, 1907=-2, 1908=-1, 1910=1, 1911=2, 1912=0, 1913=0}

Yearwise population: {1900=2, 1901=3, 1902=5, 1904=7, 1905=8, 1906=9, 1907=7, 1908=6, 1910=7, 1911=9, 1912=9, 1913=9}

maxPopulation: 9
yearOfMaxPopulation: 1906

여기 1914 & later에서 마지막 생년이 지난 후에 사망 ( )이 발생 하여 1913전혀 계산되지 않아 불필요한 계산을 피할 수있었습니다.

10 million데이터 (출생과 사망이 합쳐진)와 그 이상 1000 years range을 위해 프로그램이 3 sec.끝나기 시작했습니다.

와 동일한 크기의 데이터가 100 years range있으면을 가져 왔습니다 1.3 sec.

모든 입력이 무작위로 취해집니다.


1
$births = [1984, 1981, 1984, 1991, 1996];
$deaths = [1991, 1984];
$years = array_unique(array_merge($births, $deaths));
sort($years);

$increaseByYear = array_count_values($births);
$decreaseByYear = array_count_values($deaths);
$populationByYear = array();

foreach ($years as $year) {
    $increase = $increaseByYear[$year] ?? 0;
    $decrease = $decreaseByYear[$year] ?? 0;
    $previousPopulationTally = end($populationByYear);
    $populationByYear[$year] = $previousPopulationTally + $increase - $decrease;
}

$maxPopulation = max($populationByYear);
$maxPopulationYears = array_keys($populationByYear, $maxPopulation);

$maxPopulationByYear = array_fill_keys($maxPopulationYears, $maxPopulation);
print_r($maxPopulationByYear);

이것은 연도의 가능성과 누군가의 사망 연도가 누군가의 출생과 일치하지 않는 경우를 설명합니다.


이 답변은 OP가 요청한 학문적 큰 O 설명을 제공하려고 시도하지 않습니다.
mickmackusa

0

메모리 현명하게 유지 currentPopulation하고 currentYear계산하는 것입니다. 거품 정렬은 그렇게 큰 작업이 아니지만 일부 모서리를자를 수 있기 때문에 배열 $births$deaths배열을 모두 정렬하여 시작하는 것이 좋습니다.

<?php

$births = [1997, 1999, 2000];
$deaths = [2000, 2001, 2001];

function highestPopulationYear(array $births, array $deaths): Int {

    // sort takes time, but is neccesary for futher optimizations
    sort($births);
    sort($deaths);

    // first death year is a first year where population might decrase 
    // sorfar max population
    $currentYearComputing = $deaths[0];

    // year before first death has potential of having the biggest population
    $maxY = $currentYearComputing-1;

    // calculating population at the begining of the year of first death, start maxPopulation
    $population = $maxPop = count(array_splice($births, 0, array_search($deaths[0], $births)));

    // instead of every time empty checks: `while(!empty($deaths) || !empty($births))`
    // we can control a target time. It reserves a memory, but this slot is decreased
    // every iteration.
    $iterations = count($deaths) + count($births);

    while($iterations > 0) {
        while(current($births) === $currentYearComputing) {
            $population++;
            $iterations--;
            array_shift($births); // decreasing memory usage
        }

        while(current($deaths) === $currentYearComputing) {
            $population--;
            $iterations--;
            array_shift($deaths); // decreasing memory usage
        }

        if ($population > $maxPop) {
            $maxPop = $population;
            $maxY = $currentYearComputing;
        }

        // In $iterations we have a sum of birth/death events left. Assuming all 
        // are births, if this number added to currentPopulation will never exceed
        // current maxPoint, we can break the loop and save some time at cost of
        // some memory.
        if ($maxPop >= ($population+$iterations)) {
            break;
        }

        $currentYearComputing++;
    }

    return $maxY;
}

echo highestPopulationYear($births, $deaths);

Big O 에 뛰어 들지 않고 당신에게 맡겼습니다 .

또한 currentYearComputing모든 루프 를 다시 발견 하면 루프를 if명령문 으로 변경 하고 하나의 루프 만 남길 수 있습니다 .

    while($iterations > 0) {

        $changed = false;

        if(current($births) === $currentYearComputing) {
            // ...
            $changed = array_shift($births); // decreasing memory usage
        }

        if(current($deaths) === $currentYearComputing) {
            // ...
            $changed = array_shift($deaths); // decreasing memory usage
        }

        if ($changed === false) {
            $currentYearComputing++;
            continue;
        }

배열 이동은 메모리에는 적합하지만 성능에는 적합하지 않습니다. cmljnelson.blog/2018/10/16/phps-array_shift-performance
Emiliano

항상 내림차순으로 정렬하고 증분 대신 감소로 이동하고 시프트 대신 팝으로 이동할 수 있습니다.
yergo

0

나는이 솔루션을 매우 편안하게 채 웁니다. 복잡함 Big O는 n + m입니다.

<?php
function getHighestPopulation($births, $deaths){
    $max = [];
    $currentMax = 0;
    $tmpArray = [];

    foreach($deaths as $key => $death){
        if(!isset($tmpArray[$death])){
            $tmpArray[$death] = 0;    
        }
        $tmpArray[$death]--;
    }
    foreach($births as $k => $birth){
        if(!isset($tmpArray[$birth])){
            $tmpArray[$birth] = 0;
        }
        $tmpArray[$birth]++;
        if($tmpArray[$birth] > $currentMax){
            $max = [$birth];
            $currentMax = $tmpArray[$birth];
        } else if ($tmpArray[$birth] == $currentMax) {
            $max[] = $birth;
        }
    }

    return [$currentMax, $max];
}

$births = [1997, 1997, 1997, 1998, 1999];
$deaths = [1998, 1999];

print_r (getHighestPopulation($births, $deaths));
?>

$tmpArray--$tmpArray[$death]--? 또한 테스트하십시오 $births=[1997,1997,1998]; $deaths=[];-원래대로 돌아 옵니까 1998?
Paul Spiegel

그래 맞아
Emiliano

이 코드는 복잡한 경우에만 실패 할뿐만 아니라 입력 배열 $births = [3,1,2,1,3,3,2]과 같은 가장 간단한 경우에도 실패하며 인구가 가장 많은 해로 $deaths = [2,3,2,3,3,3]돌아올 것으로 예상 2하지만 코드는를 반환합니다 1. 실제로 귀하의 코드는 내 단위 테스트 중 15 개 중 9 개에 실패했습니다 . 나는 단지로 이것을 받아 들일 수없는 가장 효율적인 대답,하지만 난 그것을 받아 들일 수 없다 이 전혀 작동하지 않기 때문에 효율적인 답을.
Sherif

질문을주의 깊게 읽지 못하여 정답을 제공하지 못했습니다. 여기에서 내가 말하지 말라고 가정합니다 ( 배열이 정렬되어 있음 ). 따라서 비효율적 인 답변에 현상금을 수여하는 방법에 대한 질문에서 불쾌한 의견을 제거하십시오. 이것은 어떻게 든 " 수정 "입니다.
Sherif

0

문제에 대한 가장 간단하고 명확한 접근 방법 중 하나입니다.

$births = [1909, 1919, 1904, 1911, 1908, 1908, 1903, 1901, 1914, 1911, 1900, 1919, 1900, 1908, 1906];
$deaths = [1910, 1911, 1912, 1911, 1914, 1914, 1913, 1915, 1914, 1915];

/* for generating 1 million records

for($i=1;$i<=1000000;$i++) {
    $births[] = rand(1900, 2020);
    $deaths[] = rand(1900, 2020);
}
*/

function highestPopulationYear(Array $births, Array $deaths): Int {
    $start_time = microtime(true); 
    $population = array_count_values($births);
    $deaths = array_count_values($deaths);

    foreach ($deaths as $year => $death) {
        $population[$year] = ($population[$year] ?? 0) - $death;
    }
    ksort($population, SORT_NUMERIC);
    $cumulativeSum = $maxPopulation = $maxYear = 0;
    foreach ($population as $year => &$number) {
        $cumulativeSum += $number;
        if($maxPopulation < $cumulativeSum) {
            $maxPopulation = $cumulativeSum;
            $maxYear = $year;
        }
    }
    print " Execution time of function = ".((microtime(true) - $start_time)*1000)." milliseconds"; 
    return $maxYear;
}

print highestPopulationYear($births, $deaths);

출력 :

1909

복잡성 :

O(m + log(n))

100 만 레코드 실행 시간은 단지29.64 milliseconds
Ronak Dhoot

질문에 언급했듯이 런타임 최적화 후가 아니지만 Big O 계산이 약간 벗어났습니다. 또한 코드가 약간 손상되었습니다. 많은 경우에 실패합니다.
Sherif
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.