手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2012年07月22日的文章

最小完美哈希函数

不好意思,这是一个标题党,主要是这个词语太让人震惊,但现在它又将变的地了。所以我先记录一下。

什么是完美哈希函数?
這一段內容來自:(http://www.kuqin.com/algorithm/20111108/314569.html)
最小完美哈希函数是什么,要从定义说起,这个名字很长,一步步解释。

  1. 哈希函数 任意函数h(x)都可以说哈希函数,一般来说,一个良好的哈希函数可以尽量避免重复。x的集合是参数域,h(x)的集合是值域。
  2. 完美哈希函数  完美哈希函数,就是完全不会冲突的哈希函数,这要求函数的值域至少比参数域要大
  3. 最小完美哈希函数 最小完美哈希函数,就是指函数的值域和参数域的大小完全相等,一个也不多
  4. 保序最小完美哈希函数 保序的意思就是指这个哈希之后顺序是不变的,同时还能满足其他两个条件。
这个函数的优点就是形式上很完美,就像给一个排好序的文档编上的序号一般紧凑可靠。但是这个函数有两个缺点,一是必须事前必须知道原数据集,二 是需要花一定的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网站

转:如何彻底删除 Mac OS X 里那巨大的 sleepimage 文件(当 sudo pmset -a hibernatemode 0 无效时)

這篇文章很有意思,它。居然是模仿了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 的软件,同样无效。

最后网上搜到一个偏方,问题解决。分享给大家。

  1. 打开 TextEdit,建立一个空的文本文件,取名为 sleepimage,保存到桌面。
  2. 去 Finder 里找到这个文件,选中,按 return,将后缀名(.rtf 或 .txt)删除。
  3. 在 Finder 里按 Command + Shift + G,输入 /private/var/vm,回车。
  4. 新开一个 Finder 窗口,将桌面的 sleepimage 文件拖入上述第三步中的窗口。这时系统会要求你输入管理员账号密码。
  5. 在 /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空间就这么没有了。。。凄凉啊。不过我还不敢删除,毕竟 ,我真的有时候会用到没电。。。。