J'ai mis au point un algorithme de division et de conquête pour cela. Je voulais juste savoir si cela fonctionnerait ou non?Étant donné un fichier contenant 4,30 milliards d'entiers 32 bits, comment pouvons-nous trouver un nombre apparu au moins deux fois?
La première mi est calculée à partir de la plage de nombres entiers ie (0+ (1 < < 32-1)) >> 1, puis cette idée est appliquée: plage de nombre de début à mi ou du milieu à la fin sera toujours moins que les nombres que nous allons considérer comme nous considérons des nombres de milliard et il y aura certainement quelques nombres qui vont être répétés pendant que la gamme de 32bit entier est beaucoup plus petite comparée aux nombres de milliard.
def get_duplicate(input, start, end):
while True:
mid = (start >> 1) + end - (end >> 1)
less_to_mid = 0
more_to_mid = 0
equal_to_mid = 0
for data in input:
data = int(data, 16)
if data < mid:
less_to_mid += 1
elif data == mid:
equal_to_mid += 1
else:
more_to_mid += 1
if equal_to_mid > 1:
return mid
elif mid-start < less_to_mid:
end = mid-1
elif end-mid < more_to_mid:
start = mid+1
with open("codes\output.txt", 'r+') as f:
content = f.read().split()
print(get_duplicate(content, 0, 1<<32-1))
Je sais que nous pouvons utiliser le tableau de bits, mais je veux juste avoir votre avis sur cette solution et si la mise en œuvre est buggy.
Avez-vous déjà calculé 2^32? – Svante
Trier les, alors il vous suffit de vérifier tout le monde avec le prochain. – AntiHeadshot
@AntiHeadshot: le tri nécessitera plus de mémoire qui n'est pas là. –