সম্ভবত, এই প্রশ্নটি আগে জিজ্ঞাসা করা হয়েছিল। এটি সিএলআরএস (২ য় এড) সমস্যা থেকে 6.5-8 -
একটি বাছাই করা তালিকায় কে সাজানো তালিকাগুলি একত্রীকরণের জন্য একটি সময়ের অ্যালগরিদম দিন , যেখানে এন সমস্ত ইনপুট তালিকার সামগ্রীর সংখ্যা। (ইঙ্গিত: কে- ওয়ে মার্জ করার জন্য একটি মিনি-হিপ ব্যবহার করুন ))
As there are sorted lists and total of values, let us assume each list contains numbers, moreover each of the lists are sorted in strictly ascending order, and the results will also be stored in the ascending order.
My pseudo-code looks like this --
list[k] ; k sorted lists
heap[k] ; an auxiliary array to hold the min-heap
result[n] ; array to store the sorted list
for i := 1 to k ; O(k)
do
heap[i] := GET-MIN(list[i]) ; pick the first element
; and keeps track of the current index - O(1)
done
BUILD-MIN-HEAP(heap) ; build the min-heap - O(k)
for i := 1 to n
do
array[i] := EXTRACT-MIN(heap) ; store the min - O(logk)
nextMin := GET-MIN(list[1]) ; get the next element from the list 1 - O(1)
; find the minimum value from the top of k lists - O(k)
for j := 2 to k
do
if GET-MIN(list[j]) < nextMin
nextMin := GET-MIN(list[j])
done
; insert the next minimum into the heap - O(logk)
MIN-HEAP-INSERT(heap, nextMin)
done
আমার সামগ্রিক জটিলতা । O ( n ) এর ভিতরে ও ( কে ) লুপ এড়াতে কোনও উপায় খুঁজে পেলাম না কে তালিকা থেকে পরবর্তী ন্যূনতম উপাদানটি খুঁজে পেতে around অন্য কোনও উপায় কি আছে? কীভাবে পাবেন? algorithm?