Heim  >  Artikel  >  Backend-Entwicklung  >  Angenommen, zwei Dateien a und b speichern jeweils 5 Milliarden URLs, jede URL belegt 64 Bytes und das Speicherlimit beträgt 4 GB. Wie finde ich die gemeinsamen URLs der Dateien a und b?

Angenommen, zwei Dateien a und b speichern jeweils 5 Milliarden URLs, jede URL belegt 64 Bytes und das Speicherlimit beträgt 4 GB. Wie finde ich die gemeinsamen URLs der Dateien a und b?

WBOY
WBOYOriginal
2016-08-08 09:32:501310Durchsuche

Es kann geschätzt werden, dass die Größe jeder Datei 5G*64=300G beträgt, was viel größer ist als 4G. Daher ist es unmöglich, es zur Verarbeitung vollständig in den Speicher zu laden. Erwägen Sie einen „Teile-und-herrsche“-Ansatz.
Durchlaufen Sie die Datei a, erhalten Sie Hash(URL) 00 für jede URL und speichern Sie dann die URL in 1000 kleinen Dateien (eingestellt auf a0,a1,...a999). Auf diese Weise beträgt die Größe jeder kleinen Datei ungefähr 300 MB. Durchlaufen Sie die Datei b und speichern Sie die URLs in 1000 kleinen Dateien (b0, b1...b999) auf die gleiche Weise wie a. Nach dieser Verarbeitung befinden sich alle möglichen identischen URLs in den entsprechenden kleinen Dateien (a0 vs. b0, a1 vs. b1...a999 vs. b999) und nicht entsprechende kleine Dateien (z. B. a0 vs b99) Es ist unmöglich, dieselbe URL zu haben. Dann müssen wir nur noch die gleiche URL in 1000 Paaren kleiner Dateien finden.
Zum Beispiel können wir für a0 vs. b0 a0 durchlaufen und die URL in hash_map speichern. Dann durchqueren Sie b0. Wenn sich die URL in der hash_map befindet, bedeutet dies, dass diese URL sowohl in a als auch in b vorhanden ist.
Wenn die aufgeteilten kleinen Dateien ungleichmäßig sind und einige kleine Dateien zu groß sind (z. B. größer als 2G), können Sie erwägen, diese zu großen kleinen Dateien auf ähnliche Weise in kleine Dateien aufzuteilen

Gestern hat mich der Baidu-Interviewer gebeten, es heute zu studieren

Oben werden die beiden angegebenen Dateien a und b vorgestellt, von denen jede 5 Milliarden URLs speichert, jede URL 64 Bytes belegt und die Speichergrenze 4 GB beträgt. Wie finde ich die gemeinsamen URLs der Dateien a und b? Ich hoffe, dass es Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird, einschließlich relevanter Inhalte.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn