अगर किसी को दिलचस्पी है, तो मैंने पायथन में एक सरल समाधान लिखा है। यह bisect
मॉड्यूल और एक अस्थायी वापसी सूची का उपयोग करता है जो इसे क्रमबद्ध रखता है। यह एक प्राथमिकता कतार कार्यान्वयन के समान है।
import bisect
def kLargest(A, k):
'''returns list of k largest integers in A'''
ret = []
for i, a in enumerate(A):
# For first k elements, simply construct sorted temp list
# It is treated similarly to a priority queue
if i < k:
bisect.insort(ret, a) # properly inserts a into sorted list ret
# Iterate over rest of array
# Replace and update return array when more optimal element is found
else:
if a > ret[0]:
del ret[0] # pop min element off queue
bisect.insort(ret, a) # properly inserts a into sorted list ret
return ret
100,000,000 तत्वों और सबसे खराब इनपुट के साथ उपयोग जो एक क्रमबद्ध सूची है:
>>> from so import kLargest
>>> kLargest(range(100000000), 100)
[99999900, 99999901, 99999902, 99999903, 99999904, 99999905, 99999906, 99999907,
99999908, 99999909, 99999910, 99999911, 99999912, 99999913, 99999914, 99999915,
99999916, 99999917, 99999918, 99999919, 99999920, 99999921, 99999922, 99999923,
99999924, 99999925, 99999926, 99999927, 99999928, 99999929, 99999930, 99999931,
99999932, 99999933, 99999934, 99999935, 99999936, 99999937, 99999938, 99999939,
99999940, 99999941, 99999942, 99999943, 99999944, 99999945, 99999946, 99999947,
99999948, 99999949, 99999950, 99999951, 99999952, 99999953, 99999954, 99999955,
99999956, 99999957, 99999958, 99999959, 99999960, 99999961, 99999962, 99999963,
99999964, 99999965, 99999966, 99999967, 99999968, 99999969, 99999970, 99999971,
99999972, 99999973, 99999974, 99999975, 99999976, 99999977, 99999978, 99999979,
99999980, 99999981, 99999982, 99999983, 99999984, 99999985, 99999986, 99999987,
99999988, 99999989, 99999990, 99999991, 99999992, 99999993, 99999994, 99999995,
99999996, 99999997, 99999998, 99999999]
100,000,000 तत्वों के लिए इसकी गणना करने में लगभग 40 सेकंड का समय लगता है इसलिए मुझे 1 बिलियन के लिए ऐसा करने में डर लगता है। हालांकि निष्पक्ष होने के लिए, मैं इसे सबसे खराब स्थिति इनपुट (विडंबना यह है कि पहले से ही हल किया गया है) खिला रहा था।