不好意思,这是一个标题党,主要是这个词语太让人震惊,但现在它又将变的地了。所以我先记录一下。
什么是完美哈希函数?
這一段內容來自:(http://www.kuqin.com/algorithm/20111108/314569.html)
最小完美哈希函数是什么,要从定义说起,这个名字很长,一步步解释。
- 哈希函数 任意函数h(x)都可以说哈希函数,一般来说,一个良好的哈希函数可以尽量避免重复。x的集合是参数域,h(x)的集合是值域。
- 完美哈希函数 完美哈希函数,就是完全不会冲突的哈希函数,这要求函数的值域至少比参数域要大
- 最小完美哈希函数 最小完美哈希函数,就是指函数的值域和参数域的大小完全相等,一个也不多
- 保序最小完美哈希函数 保序的意思就是指这个哈希之后顺序是不变的,同时还能满足其他两个条件。
这个函数的优点就是形式上很完美,就像给一个排好序的文档编上的序号一般紧凑可靠。但是这个函数有两个缺点,一是必须事前必须知道原数据集,二 是需要花一定的CPU来生成这个函数。我认为,对于数据仓库类的线下搜索应用,这个算法是有用武之地的。但对于强调实时的数据业务,这个算法是不适合的。
----------
這裏還有一個點評:(http://liulixiang.info/blog/tag/%E6%9C%80%E5%B0%8F%E5%AE%8C%E7%BE%8E%E5%93%88%E5%B8%8C%E5%87%BD%E6%95%B0/)
点评:(by liulixiang)
“最小完美哈希函数”从概念上很完美,生成的思想也很不错,不过实际运用中并不是那么常见:应用中已知数据集再做哈希的情况不是特别多,对时空的复杂度要求也没有过于苛刻,普通的方法即可承受。另外一般数据集很大,生成该函数的开销也太大。
---------
參考文檔:
最小完美哈希函数方法来自于Czech, Havas, Majewski等的论文:
An optimal algorithm for generating minimal perfect hash functions(Czech等1991)
Graphs, hypergraphs and hashing(Havas等1993)
A family of perfect hashing methods(Majeki等1996)
本文大部分转述或摘抄自《深入搜索引擎——海量信息的压缩、索引和查询》(该书豆瓣链接) 一书(Page 173~181),该书由梁斌翻译(原版即大名鼎鼎的MG——“Managing Gigabytes: Compressing and Indexing Documents and Image, Second Edition” 由Ian H. Witten, Alistair Moffat, Timothy C.Bell合著)(MG网站)
這篇文章很有意思,它。居然是模仿了windows下面那些操作:創建一個同名文件,然後設為只讀(windows下面因為有一些奇怪,即,如果目錄名和文件名一樣,先有目錄的時候,同名文件是不能寫入的,也不能創建,所以在windows下面的時候,我們為了防止會創建這種病毒性文件,可以預先創建一個同名目錄。黑黑,好象就是當年優盤的autorun.inf的無敵解決方法)
現在開始轉貼內容 :http://apple4.us/2012/07/how-to-remove-sleepimage-in-mac-os-x-when-pmset-command-does-not-work.html
用 SSD 的朋友硬盘空间不大,需要节省。而 Mac OS X 的冬眠模式会自动放一个和内存等大的名叫「sleepimage」的文件到 /private/var/vm 目录,换言之,你的内存是多少 GB,就有多少 GB 的硬盘空间会被这个文件吃掉。
江疆以前介绍过用命令行方法禁用冬眠模式,只要在终端里运行 sudo pmset -a hibernatemode 0
即可。但这招在 Mac OS X 10.7 (Lion) 上似乎行不通,禁用之后删除 sleepimage,过不了多久它又会死灰复燃。
我试过一个叫 SmartSleep 的软件,同样无效。
最后网上搜到一个偏方,问题解决。分享给大家。
- 打开 TextEdit,建立一个空的文本文件,取名为 sleepimage,保存到桌面。
- 去 Finder 里找到这个文件,选中,按 return,将后缀名(.rtf 或 .txt)删除。
- 在 Finder 里按 Command + Shift + G,输入 /private/var/vm,回车。
- 新开一个 Finder 窗口,将桌面的 sleepimage 文件拖入上述第三步中的窗口。这时系统会要求你输入管理员账号密码。
- 在 /private/var/vm 中选中 sleep image,按 Command + i,把 Locked 勾上。
完毕。
(这个偏方的原理是将一个体积极小的同名文件放入 sleepimage 所在的目录(/private/var/vm),并禁止系统对该文件进行写操作。)
----------EOF------
我試著看了一下我的本地:
mac$ ls -lh
total 20971520
-rw------T 1 root wheel 8.0G 7 22 20:07 sleepimage
-rw------- 1 root wheel 64M 6 21 14:31 swapfile0
-rw------- 1 root wheel 64M 7 22 21:04 swapfile1
-rw------- 1 root wheel 128M 7 22 21:04 swapfile2
-rw------- 1 root wheel 256M 7 22 21:04 swapfile3
-rw------- 1 root wheel 512M 7 22 21:04 swapfile4
-rw------- 1 root wheel 1.0G 7 22 21:04 swapfile5
好吧,8G空间就这么没有了。。。凄凉啊。不过我还不敢删除,毕竟 ,我真的有时候会用到没电。。。。