Rumah pangkalan data tutorial mysql 给我一把榔头,满世界都是钉子

给我一把榔头,满世界都是钉子

Jun 07, 2016 pm 04:33 PM
dunia artikel paku

一篇文章存成一个巨大的文件,总共大约有一亿个单词,要找出里面重复次数最多的。怎么做? 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掉,并且去掉了好多价值不大的测试代码(在代码更新的时候测试代码需要同步维护,这个成本不划算,所以我们把一些价值有但不大的单元测试用例合并或者删除了),层次反而更清楚,测试代码反而更易懂了。

前些日子和我们组的数学达人讨论问题的时候他说,我们最常见的最通用的榔头,主要还是在“解空间的搜索”和“解的构造”这两方面。如果能构造,复杂程度往往就要低于搜索,这是一个递进;而另一方面,任何一个实际问题都是有额外信息的,通用的榔头却是不考虑这些实际信息的,就像这个求重复次数最多的单词问题一样,文件有多大、文件内存放的是一篇实际有意义的文章,等等(再比如如果这个文件里面不是一亿个单词,而是一亿个整数呢),这些都是额外的信息,这是另一个递进。利用这些,简化了问题,就可以杀鸡不用牛刀了吧。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接《四火的唠叨》

你可能也喜欢:

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah saya boleh membuat wang dengan menerbitkan artikel di Toutiao hari ini? Bagaimana untuk mendapatkan lebih banyak pendapatan dengan menerbitkan artikel di Toutiao hari ini! Bagaimanakah saya boleh membuat wang dengan menerbitkan artikel di Toutiao hari ini? Bagaimana untuk mendapatkan lebih banyak pendapatan dengan menerbitkan artikel di Toutiao hari ini! Mar 15, 2024 pm 04:13 PM

1. Bagaimanakah anda boleh membuat wang dengan menerbitkan artikel di Toutiao hari ini? Bagaimana untuk mendapatkan lebih banyak pendapatan dengan menerbitkan artikel di Toutiao hari ini! 1. Aktifkan hak dan kepentingan asas: Artikel asal boleh memperoleh keuntungan melalui pengiklanan dan video mestilah asli dalam mod skrin mendatar untuk memperoleh keuntungan. 2. Aktifkan hak 100 peminat: jika bilangan peminat mencecah 100 peminat ke atas, anda boleh mendapat keuntungan daripada tajuk mikro, ciptaan Soal Jawab asal dan Soal Jawab. 3. Menegaskan karya asli: Karya asal termasuk artikel, tajuk mikro, soalan, dsb., dan dikehendaki melebihi 300 patah perkataan. Sila ambil perhatian bahawa jika karya yang diciplak secara haram diterbitkan sebagai karya asli, mata kredit akan ditolak, malah sebarang keuntungan akan ditolak. 4. Ketegakan: Apabila menulis artikel dalam bidang profesional, anda tidak boleh menulis artikel merentas bidang sesuka hati Anda tidak akan mendapat cadangan yang sesuai, anda tidak akan dapat mencapai profesionalisme dan ketepatan kerja, dan sukar untuk menarik peminat. dan pembaca. 5. Aktiviti: aktiviti tinggi,

Kembali ke Pantai Omaha! World of Tanks melancarkan acara peringatan Normandy Kembali ke Pantai Omaha! World of Tanks melancarkan acara peringatan Normandy May 31, 2024 pm 10:25 PM

Apabila pencerobohan D-Day menghampiri ulang tahunnya yang ke-80, satu bulan penuh acara World of Tanks dan istimewa akan tertumpu pada Operation Overlord - mod PvE baharu, pas pertempuran bertema, keluaran mod Barisan Hadapan baharu dan sebulan- lama Kedai token Operasi Normandy akan dibuka. PETA OPERASI Dari 3 Jun hingga 30 Jun, terokai pantai Normandy dan kumpulkan sehingga 90 Token Operasi Normandy: 36 daripada peta ini dan 54 lagi dengan menyelesaikan tugasan harian. Lihat peta interaktif dan lihat tarikh mula untuk setiap acara, kemudian mula dapatkan token sekarang atau buka kunci pencarian token khas. Gunakan peta untuk mengetahui lebih lanjut tentang aktiviti berkaitan Operasi Normandy Selepas memperoleh token Operasi Normandy yang mencukupi, anda boleh pergi ke peniaga token Operasi Normandy

Temui dunia baharu perisian pengaturcaraan Java untuk telefon mudah alih: lima aplikasi disyorkan yang anda tidak patut ketinggalan Temui dunia baharu perisian pengaturcaraan Java untuk telefon mudah alih: lima aplikasi disyorkan yang anda tidak patut ketinggalan Jan 13, 2024 am 09:08 AM

Dalam era peranti mudah alih hari ini, telefon mudah alih telah menjadi bahagian yang sangat diperlukan dalam kehidupan kita. Dan jika anda berminat dalam pengaturcaraan, perisian pengaturcaraan Java pada telefon mudah alih anda akan menjadikan telefon mudah alih anda sebagai alat pembangunan yang berkuasa. Artikel ini akan memperkenalkan lima perisian pengaturcaraan Java mudah alih yang anda tidak boleh ketinggalan untuk membantu anda menerokai dunia pengaturcaraan dengan lebih baik. AIDEAIDE ialah perisian pengaturcaraan Java mudah alih berkuasa yang menyediakan persekitaran pembangunan Java yang lengkap, termasuk penyunting kod, pengkompil, penyahpepijat, dsb. Ia menyokong pelbagai projek pembangunan

Jadilah orang pertama yang membuka rumah harta karun misi Versi baharu 'World of Warships' kini dibuka. Jadilah orang pertama yang membuka rumah harta karun misi Versi baharu 'World of Warships' kini dibuka. Apr 17, 2024 pm 06:04 PM

Jadilah orang pertama yang membuka rumah harta karun misi dan merancang pertempuran selangkah ke hadapan Versi 13.3 "World of Warships" kini dibuka. Mengetahui semua maklumat penting tentang versi baharu misi tempur dan jenis tempur akan membantu kapten merancang pertempuran keseluruhan dan mendapatkan ganjaran yang berkaitan dengan cepat. Dalam versi 13.3, mod pertempuran asimetri yang ditunggu-tunggu oleh kapten untuk kembali. Kapten perlu mengawal kapal perang melawan kapal perang AI yang lebih rendah tahap tetapi lebih banyak. Mod ini sangat sesuai untuk permainan berpasukan sehingga 5 pemain boleh membentuk satu pasukan untuk bertarung secara bersebelahan. Semasa tampalan 13.3, semua kapten akan berpeluang mengumpul Koleksi Somme dan mendapatkan pemusnah Tahap IX ini. Keperluan untuk tugas ini juga sangat mudah, iaitu memenangi permainan sebelum versi seterusnya dikeluarkan.

Untuk membantu memusnahkan kereta kebal siri B, acara 'Lancer Charge' dalam 'World of Tanks' bermula Untuk membantu memusnahkan kereta kebal siri B, acara 'Lancer Charge' dalam 'World of Tanks' bermula Apr 19, 2024 pm 04:22 PM

Cawangan R&D meriam anti kereta kebal gerak sendiri siri B baharu sahaja menyertai "World of Tanks." Ahli peringkat tingginya boleh menembak peluru APCR berbentuk bintang, yang boleh menyebabkan kerosakan yang teruk pada sasaran tertutup. Untuk mengalu-alukan ketibaan kereta kebal unik ini, "World of Tanks" akan melancarkan acara masa terhad khas "Lancer Charge" dari jam 17:00 pada 19 April hingga 17:00 pada 26 April. Acara ini akan membuka 2 set tugasan. Selesaikan tugasan ini dan kumpulkan Token Helang Putih. Token juga boleh ditebus untuk ganjaran pilihan anda, dan pakej istimewa yang mengandungi token juga boleh didapati di Armory dan Pusat Beli-belah Tawaran Istimewa! ·Semasa keseluruhan acara, sistem akan membuka misi eksklusif untuk meriam anti kereta kebal gerak sendiri siri B baharu. Setiap misi boleh diselesaikan beberapa kali sehari Selepas menyelesaikan misi, anda boleh mendapatkan token White Eagle dan pengalaman krew tambahan dibayar balik setiap hari.

Panduan Strategi Dunia Tujuh Hari Panduan Strategi Dunia Tujuh Hari Mar 20, 2024 am 09:28 AM

Seven Days World ialah permainan menembak kelangsungan hidup dalam talian berbilang pemain Dalam dunia kiamat, pemain akan bekerjasama dengan rakan mereka untuk mengumpul sumber semasa proses ini, pemain juga akan menghadapi pelbagai masalah soalan-soalan ini Mari kita lihat ringkasan panduan tujuh hari kepada dunia ini. Seven Days World Guide: Bilakah Seven Days World Guide akan dilancarkan secara rasmi Adakah ia permainan dalam talian atau permainan mudah alih laman web rasmi: Far Returning Butterfly Bagaimana untuk menaikkan motosikal Bagaimana untuk mendapatkan Rotten Shadow Hunter Bagaimana untuk melawan Rumah Mudah Alih Hailes? Panduan Seven Days World Cara mendapatkan motosikal Jawapan: Kumpul bahan dan sintesis bahagian untuk membuat motosikal. Pengenalan terperinci 1. Untuk membuat motosikal, pemain perlu terlebih dahulu mengumpul bahagian yang sepadan, dan bahagian tersebut perlu diterokai pada peta. 2. Dalam tugasan dan penerokaan harian, anda boleh mendapatkan

Perhimpunan barisan hadapan yang muktamad! World of Tanks × hubungan 'Star Trek' bermula Perhimpunan barisan hadapan yang muktamad! World of Tanks × hubungan 'Star Trek' bermula Apr 30, 2024 pm 07:00 PM

Pelopor utama segera berhimpun! Acara rangkaian "World of Tanks" x "Star Trek" akan bermula secara rasmi pada 2 Mei! Antijirim dalam teras meledingkan Perusahaan telah dicuri oleh objek misteri yang tidak diketahui Gunakan kemahiran memandu kereta kebal anda untuk bersaing dengan ahli krew lain untuk memulihkan antijirim dan mengkaji objek yang tidak diketahui. Ganjaran kemajuan misi termasuk kandungan bertema Star Trek yang unik - termasuk 3 watak ikonik Star Trek: Kapten James T. Kirk, Komander Spock, Pakar Komunikasi Nyota Uhura, Semua anak kapal ini mempunyai suara mereka sendiri. Tetapkan mereka ke kereta kebal anda dan sertai pertempuran dalam mod standard! Menyelesaikan tugas acara harian juga boleh mendapatkan gaya 2D, pelekat dan tandatangan, serta kotak bekalan Orion. Objek misteri yang tidak dikenal pasti bergerak dalam susunan aneh di permukaan asteroid

Mari kita menulis lilitan baharu bersama-sama acara Hari Cina Sedunia Mari kita menulis lilitan baharu bersama-sama acara Hari Cina Sedunia Apr 24, 2024 pm 05:25 PM

Setiap perkataan menjadi lukisan, setiap ayat menjadi puisi Acara Hari Cina Sedunia "World of Warships" sedang berlangsung. Ambil bahagian dalam pengundian dan pilih watak Cina yang paling mewakili permainan dan keindahan bahasa Cina Ia akan ditambahkan pada permainan sebagai lilitan pada masa hadapan untuk membantu lebih ramai kapten di seluruh dunia memahami budaya Cina. Pada masa yang sama, anda juga boleh mendapatkan cat kekal dengan menyelesaikan misi tempur khas. Kini, 20 aksara Cina yang berkaitan dengan "World of Warships" dan dengan kepentingan budaya Cina sedang menunggu untuk dipilih oleh kapten. Kapten boleh mengambil bahagian dalam mengundi di halaman yang ditetapkan di laman web rasmi dan memilih aksara Cina kegemaran mereka. Watak Cina dengan undian terbanyak akan ditambahkan pada permainan sebagai lilitan lengan baharu pada masa hadapan! Aksara Cina seperti "Syurga", "Bumi", "Dao", "Serangan", "Pertahanan", dan "Meriam" akan ditambah pada permainan kerana lilitan lengan akan ditentukan oleh kapten. Halaman undian: h

See all articles