O (s1 + s2) 시간에 s1과 s2 크기의 두리스트 L1과 L2를 병합 (합집합을 찾습니다)하는 병합 함수가 있다고 가정하십시오. 크기 s1, s2, ..., sk의 k 목록을 병합하는 최적의 방법은 무엇입니까?k 목록을 병합하는 가장 좋은 방법은 무엇입니까?
처음에는 s1, ..., sk를 정렬하고 가장 낮은 두 크기에 해당하는 처음 두 목록을 정렬해야한다고 생각합니다. 이들이 합쳐지면 정렬 된 크기 목록에서 크기의 위치를 찾아 하나의 목록으로 끝날 때까지 프로세스를 계속 진행합니다.
나는 두 가지 문제가 있습니다. 1. 이것이 실제로 최적인지 (더 빠른 시간에 다시 나타날 다른 방법이 있습니까)? 2. 병합 할 때 목록 크기가 변경되는 경우 실행 시간을 어떻게 분석합니까?
우수 답변! 고맙습니다. 한 번만 무게를 분류하면되는 이유에 대해 자세히 설명해 주시겠습니까? 정렬 된 가중치 목록이 s1, s2, ..., sk라고 가정합니다. 그런 다음 알고리즘은 s1과 s2에 해당하는 목록을 병합하여 s12를 생성하며 "정렬 된"목록은 이제 s12, s3, ..., sk처럼 보입니다. 그러나 s12 + s3은 s3 + s4보다 클 수 있습니다. –
또는 : 정렬 된 크기가 목록 L1, L2, ... Lk에 해당하는 s1, s2, ..., sk 인 경우 먼저 L1과 L2를 L12로 병합 한 다음 L3과 L4를 L34로 병합하여 L34를 얻습니다 , L34, ..., Lk-1Lk 그리고 우리가 하나의 목록으로 남을 때까지이 proess를 계속할 수 있습니까? 그렇다면 목록의 수가 이상 할 때 우리는 무엇을해야합니까? 예를 들어 L1, L2, L3, L4, L5가있는 경우 L12, L34, L5 -> L1234, L5 -> L12345? –
@BobJonas : 잎 목록 (끊임없이 작아짐)과 화합물 목록 (성장 중)의 두 가지 목록이 있습니다. 처음에는 화합물이 비어 있습니다. 우리는 s1, s2, s3, s4로 시작합니다. -. 첫 번째 단계 후에'(s1, s2), s3, s4, ...; s12'가 있습니다. (괄호 안의 요소가 삭제되었습니다.)'s3'와's4'가 이제는 가장 작 으면 ('s12> s4'),'(s1, s2, s3, s4), s5, s6, ...; s12 , s34'. 그렇지 않으면's3'와's12'가 두 개의 가장 작고'(s1, s2, s3), s4, s5, ...; (s12), s123'이됩니다.또한 가장 작은 두 가지를 선택하기 위해 세 가지 요소를 살펴보아야합니다. 각 목록 중 가장 작은 것이고 ... – rici