给我一把榔头,满世界都是钉子
一篇文章存成一个巨大的文件,总共大约有一亿个单词,要找出里面重复次数最多的。怎么做? Hadoop是一把威力巨大的榔头,在使用过Hadoop之后,看着任何东西都想把它给map reduce了。有一个关于Jeff Dean的小笑话,说在睡不着觉的时候,一般人是数羊,Jeff De
一篇文章存成一个巨大的文件,总共大约有一亿个单词,要找出里面重复次数最多的。怎么做?
Hadoop是一把威力巨大的榔头,在使用过Hadoop之后,看着任何东西都想把它给map reduce了。有一个关于Jeff Dean的小笑话,说在睡不着觉的时候,一般人是数羊,Jeff Dean是map reduce他的羊群。所以,我的办法是,把这个文件拆分成若干个小文件,在map过程用hash算法保证相同的单词落入一个文件(这点很重要),计算单词出现次数,在reduce过程取得重复次数最多的单词来。
但是,真有必要这样啰嗦吗?
只有一亿个单词,简单估算一下,一个字母占据两个字节,假设单词平均长度5,即便是最极端情况,这些单词里面没有重复,单词本身也就消耗1G而已;而实际上一篇文章单词的重复率是非常高的,这个数据量完全可以放在内存里面计算。还没完,不一定非得要用Hash,如果借由Trie树,可以节点压缩,占用更少的空间。
这只是一个用榔头来敲钉子的一个小例子而已,在我刚学算法的时候,那时候刚接触外排序,这样的问题我或许会第一反应使用外排序来做,在那个时候,这把榔头就是外排序。但实际上呢,外排序的效率比上面提到的方法都低得多,只有在内存实在不够用的时候才适合考虑(即便在内存不够用的情况下,我们依然可以利用hash,把大文件划分成若干个小到内存可以容纳为止的文件,分别计算以后在来归并求最大数,目的就是要尽量避免外排序带来的大量磁盘读写)。
如果再把思路放宽一点,真的需要统计所有的单词吗?其实对于一篇文章来说,其中的内容都是有文字意义的,换言之,只有很少的单词可能成为“重复最多”的,这个数量应该是非常非常有限的。比如在遇到一个“is”的时候,我们知道要把它列入统计范畴,但是遇到“distribution”这样的词呢,大可跳过。
还可以找得到很多这样的榔头,比如概率公式,C(m,n)和A(m,n),即组合数和排列数,对于某些概率、混合、排列的问题就用它来套;再比如常见的榔头——动态规划,学了以后看到求最优解问题就很想用DP来解;还有在数据量很大的情况下利用hash、区域划分等等“分而治之”的化简思想……但是,这些都是常规思路,就如同Top K问题用堆排序来求解,寻找“不出现”的单词就使用bit map,“不重复出现”的单词就使用2-bit map等等这样的问题一样,终归是简单粗暴那一类的。即便解决了问题,也没有给人眼前一亮的“巧妙”的感觉。
跳出算法,在很多工程问题上也有类似的体会。记得以前在做一个项目的单元测试,Easy Mock + Easy Mock Extension + Power Mock,这样一套库,mock的能力实在强大,几乎没有测试不了的代码了,于是就拿了这把榔头到处砸,却忘了单元测试的最终目的是什么,那一些代码是值得做单元测试的。后来利用ant给测试环境中,不关心逻辑的那一层,使用自己写的桩代码mock掉,并且去掉了好多价值不大的测试代码(在代码更新的时候测试代码需要同步维护,这个成本不划算,所以我们把一些价值有但不大的单元测试用例合并或者删除了),层次反而更清楚,测试代码反而更易懂了。
前些日子和我们组的数学达人讨论问题的时候他说,我们最常见的最通用的榔头,主要还是在“解空间的搜索”和“解的构造”这两方面。如果能构造,复杂程度往往就要低于搜索,这是一个递进;而另一方面,任何一个实际问题都是有额外信息的,通用的榔头却是不考虑这些实际信息的,就像这个求重复次数最多的单词问题一样,文件有多大、文件内存放的是一篇实际有意义的文章,等等(再比如如果这个文件里面不是一亿个单词,而是一亿个整数呢),这些都是额外的信息,这是另一个递进。利用这些,简化了问题,就可以杀鸡不用牛刀了吧。
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接《四火的唠叨》

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

1. Wie können Sie heute Geld verdienen, indem Sie Artikel auf Toutiao veröffentlichen? Wie Sie noch heute mehr Einkommen erzielen, indem Sie Artikel auf Toutiao veröffentlichen! 1. Grundlegende Rechte und Interessen aktivieren: Originalartikel können durch Werbung Gewinne erzielen, und Videos müssen im horizontalen Bildschirmmodus original sein, um Gewinne zu erzielen. 2. Aktivieren Sie die Rechte von 100 Fans: Wenn die Anzahl der Fans 100 Fans oder mehr erreicht, können Sie Gewinne aus Mikroschlagzeilen, origineller Q&A-Erstellung und Q&A erzielen. 3. Bestehen Sie auf Originalwerken: Originalwerke umfassen Artikel, Mikroschlagzeilen, Fragen usw. und müssen mehr als 300 Wörter umfassen. Bitte beachten Sie, dass bei der Veröffentlichung rechtswidrig plagiierter Werke als Originalwerke Kreditpunkte abgezogen werden und ggf. auch Gewinne abgezogen werden. 4. Vertikalität: Wenn Sie Artikel in Berufsfeldern schreiben, können Sie nicht nach Belieben Artikel über verschiedene Fachgebiete hinweg schreiben. Sie werden keine entsprechenden Empfehlungen erhalten, Sie werden nicht in der Lage sein, die Professionalität und Verfeinerung Ihrer Arbeit zu erreichen, und es wird schwierig sein, Fans zu gewinnen und Leser. 5. Aktivität: hohe Aktivität,

Während sich die D-Day-Invasion ihrem 80. Jahrestag nähert, wird sich ein ganzer Monat voller World of Tanks-Events und Specials um Operation Overlord drehen – ein neuer PvE-Modus, ein thematischer Battle Pass, die Veröffentlichung eines neuen Frontline-Modus und ein Monat lang. long Der Token-Shop der Operation Normandy steht kurz vor der Eröffnung. OPERATIONSKARTE Erkunden Sie vom 3. bis 30. Juni die Strände der Normandie und sammeln Sie bis zu 90 Operation-Normandie-Token: 36 auf dieser Karte und weitere 54 durch das Erfüllen täglicher Aufgaben. Schauen Sie sich die interaktive Karte an und sehen Sie sich die Startdaten für jedes Event an. Beginnen Sie dann jetzt damit, Token zu verdienen oder spezielle Token-Quests freizuschalten. Verwenden Sie die Karte, um mehr über Aktivitäten im Zusammenhang mit der Operation Normandie zu erfahren. Nachdem Sie genügend Operation Normandy-Token erhalten haben, können Sie sich an den Operation Normandy-Token-Händler wenden

Im heutigen Zeitalter mobiler Geräte sind Mobiltelefone zu einem unverzichtbaren Bestandteil unseres Lebens geworden. Und wenn Sie sich für das Programmieren interessieren, verwandelt die Java-Programmiersoftware auf Ihrem Mobiltelefon Ihr Mobiltelefon in ein leistungsstarkes Entwicklungstool. In diesem Artikel werden fünf mobile Java-Programmiersoftware vorgestellt, die Sie nicht verpassen dürfen, damit Sie die Welt des Programmierens besser erkunden können. AIDEAIDE ist eine leistungsstarke mobile Java-Programmiersoftware, die eine vollständige Java-Entwicklungsumgebung einschließlich Code-Editor, Compiler, Debugger usw. bereitstellt. Es unterstützt eine Vielzahl von Entwicklungsprojekten

Seien Sie der Erste, der das Schatzhaus der Mission öffnet und den Kampf einen Schritt im Voraus plant. Die 13.3-Version von „World of Warships“ ist jetzt geöffnet. Das Wissen über alle wichtigen Informationen über die neue Version der Kampfmissionen und Kampftypen wird Kapitänen helfen, den Gesamtkampf zu planen und schnell relevante Belohnungen zu erhalten. In Version 13.3 kehrt der asymmetrische Kampfmodus zurück, auf den Kapitäne gewartet haben. Kapitäne müssen die Kriegsschiffe gegen KI-Kriegsschiffe kontrollieren, deren Level niedriger, aber zahlreicher ist. Dieser Modus eignet sich sehr gut für Teamspiele. Bis zu 5 Spieler können ein Team bilden, um Seite an Seite zu kämpfen. Eine stillschweigende Zusammenarbeit kann Ihnen helfen, den Gegner schnell zu besiegen. Während Patch 13.3 haben alle Kapitäne die Möglichkeit, die Somme-Sammlung zu sammeln und diesen Zerstörer der Stufe IX zu erhalten. Die Voraussetzung für diese Aufgabe ist ebenfalls sehr einfach: Gewinnen Sie das Spiel, bevor die nächste Version veröffentlicht wird.

Der neue Forschungs- und Entwicklungszweig für Panzerabwehrkanonen der B-Serie ist gerade „World of Tanks“ beigetreten. Seine hochrangigen Mitglieder können sternförmige APCR-Granaten abfeuern, die bei nahen Zielen verheerenden Schaden anrichten können. Um die Ankunft dieser einzigartigen Panzer zu begrüßen, startet „World of Tanks“ vom 19. April um 17:00 Uhr bis zum 26. April um 17:00 Uhr das zeitlich begrenzte Sonderevent „Lancer Charge“. Bei dieser Veranstaltung werden zwei Aufgabensätze geöffnet. Erledige diese Aufgaben und sammle den White Eagle Token. Die Token können auch gegen Belohnungen Ihrer Wahl eingetauscht werden. Spezielle Pakete mit Token sind auch in der Waffenkammer und im Special Offers Mall erhältlich! ·Während der gesamten Veranstaltung öffnet das System exklusive Missionen für die neuen Panzerabwehrkanonen der B-Serie. Jede Mission kann mehrmals am Tag abgeschlossen werden. Nach Abschluss der Mission können Sie White Eagle-Token erhalten und zusätzliche Crew-Ereignisse werden täglich zurückgezahlt.

Seven Days World ist ein Multiplayer-Online-Survival-Shooter. In einer Welt des Jüngsten Gerichts werden die Spieler Seite an Seite mit ihren Freunden arbeiten, um zu überleben. Dabei werden die Spieler auch auf verschiedene Probleme stoßen Diese Fragen werfen wir einen Blick auf diese Zusammenfassung des siebentägigen Reiseführers. Seven Days World Guide: Wann wird der Seven Days World Guide offiziell veröffentlicht? Ist es ein Online-Spiel oder ein Handyspiel? Offizielle Website: Far Returning Butterfly Wie erhalte ich einen Rotten Shadow Hunter? Wie bekämpfe ich Hailes' Mobile Home? Leitfaden Seven Days World So erhalten Sie ein Motorrad Antwort: Sammeln Sie Materialien und synthetisieren Sie Teile, um ein Motorrad herzustellen. Ausführliche Einführung 1. Um ein Motorrad zu bauen, müssen die Spieler zunächst die entsprechenden Teile sammeln und die Teile auf der Karte erkunden. 2. In Aufgaben und täglicher Erkundung können Sie erhalten

Die ultimative Avantgarde versammelt sich dringend! Das Verknüpfungsevent „World of Tanks“ × „Star Trek“ startet offiziell am 2. Mai! Die Antimaterie im Warpkern der Enterprise wurde von einem mysteriösen unbekannten Objekt gestohlen. Setzen Sie Ihre Fähigkeiten als Panzerfahrer ein, um mit anderen Besatzungsmitgliedern um die Bergung der Antimaterie zu konkurrieren und das unbekannte Objekt zu untersuchen. Zu den Belohnungen für den Missionsfortschritt gehören einzigartige Inhalte im Star-Trek-Stil – darunter drei ikonische Star-Trek-Charaktere: Captain James T. Kirk, Commander Spock, Kommunikationsspezialist Nyota Uhura. Alle diese Crewmitglieder haben ihre eigenen Stimmen. Weisen Sie sie Ihren Panzern zu und nehmen Sie im Standardmodus an der Schlacht teil! Erledige tägliche Event-Aufgaben, um 2D-Stile, Aufkleber und Signaturen sowie eine Orion-Versorgungskiste zu erhalten. Geheimnisvolle, unbekannte Objekte bewegen sich in seltsamen Anordnungen auf der Oberfläche des Asteroiden

Die Frage des Taobao-Gewinners vom 10. März: Welches ist das einzige Land der Welt ohne Mücken? Wenn Sie interessiert sind, kommen Sie vorbei und informieren Sie sich. Taobao Daily Guess Answers Taobao Big Winner 10. März: Wo ist das einzige Land der Welt ohne Mücken? Frage: Wo ist das einzige Land der Welt ohne Mücken? Antwort: C. Island Antwortanalyse: 1. Klicken Sie hier, um es herauszufinden Hinweise, die Antwort auf die Frage finden Sie auf der Seite unten. 2. Das einzige Land der Welt ohne Mücken ist Island. 3. Island liegt in der Nähe des Polarkreises und die Durchschnittstemperatur liegt 8 Tage lang unter 5 °C von 12 Monaten im Jahr
