swift 字符串hash 算法


公司项目需求需要把三个整型映射到一个整型中以达到减小数据传输量。传输后的数据不需要反编译出来,事实上也反编译不出来,想到了用hash算法来实现。

一: Hash原理以及限制

  1. Hash的主要原理就是把大范围映射到小范围;所以,你输入的实际值的个数必须和小范围相当或者比它更小。不然冲突就会非常多。
  2. 因为Hash逼近单向函数;所以,你能够用它来对数据进行加密。
  3. 不同的应用对Hash函数有着不同的要求;比方,用于加密的Hash函数主要考虑它和单项函数的差距,而用于查找的Hash函数主要考虑它映射到小范围的冲突率。

二: 常见的Hash算法已经swfit的实现

  1. 加法Hash

  2. 位运算Hash

extension String {
    func stringHash() -> Int {
        var hash:Int64 = 0;
        var x:Int64 = 0;
        for i in 0 ..< self.characters.count {
            hash = (hash << 4 ) + Int64((self as NSString).character(at:i));
            let x = hash & Int64.init(0xF0000000)
            if x != 0 {
                hash ^= (x >> 24);
                hash &= ~x;
            }
        }
        hash = (hash & Int64.init(0x7FFFFFFF))
        hash = hash % 2147483647
        return Int(hash);
    }
}
  1. 乘法Hash
  2. 除法Hash
  3. 查表Hash
  4. 混合Hash

这里选用了位移hash达到了预期的效果,后续其他方法的hash有时间会一起补上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,430评论 11 349
  • 散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表...
    yeying12321阅读 9,031评论 0 6
  • 男生,17岁了,初中毕业没上职高,上职高其实也没什么用,现在在一家玻璃厂打工,一个月1000块钱都不知道干啥,迷茫...
    盖世英雄_84be阅读 4,353评论 1 0
  • 当你感到自傲 愤怒就会升起 看那婴儿走路 他的智力多么迟缓 怎么走路 别人的愚昧 让你变得尖酸刻薄 要利用他人的蔑...
    卡布奇诺花蜜阅读 3,907评论 0 50
  • 风依然很轻,只是心却冷得像结了冰。 收拾好包袱,她离开了那个城市。 离开了生活十多年,经历了许多坎坷、无奈和揪心疼...
    CROTEL阅读 1,053评论 0 0