【问题标题】:Hash function for 8 / 16 bit "graphics" on 8 bit processor8 位处理器上 8 / 16 位“图形”的散列函数
【发布时间】:2018-01-24 22:23:46
【问题描述】:

对于相干噪声的实现(类似于Perlin noise),我正在寻找适合图形的hash function

我不需要它以任何方式加密,实际上,我什至不需要它是一个超级出色的哈希。

我只想组合两个 16 位数字并输出一个 8 位哈希。尽可能随机是好的,但在 AVR 处理器(8 位,Arduino 使用)上快速也是好的。

目前我正在使用一个实现here

const uint32_t hash(uint32_t a)
{
    a -= (a<<6);
    a ^= (a>>17);
    a -= (a<<9);
    a ^= (a<<4);
    a -= (a<<3);
    a ^= (a<<10);
    a ^= (a>>15);
    return a;
}

但考虑到我只截断了 8 位,而且我不需要任何壮观的东西,我可以使用更少的指令来完成一些事情吗?

…我在这次搜索中受到lib8tion 库的启发,该库与FastLED 打包在一起。它具有特定的功能,例如,将两个 uint8_t 数字相乘以在尽可能少的时钟周期内得到一个 uint16_t 数字。

【问题讨论】:

    标签: hash 8-bit fastled


    【解决方案1】:

    查看Pearson hashing:

    unsigned char hash(unsigned short a, unsigned short b) {
        static const unsigned char t[256] = {...};
        return t[t[t[t[a & 0xFF] ^ (b & 0xFF)] ^ (a >> 8)] ^ (b >> 8)];
    }
    

    【讨论】:

    • :-) 谢谢!这就是最终使用的东西,我忘记了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 2015-06-19
    • 1970-01-01
    • 2011-01-27
    • 2017-07-12
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多