C#,数值计算——64位哈希表的计算方法与实现代码

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    public class HashAll
    {
        public HashAll()
        {
        }

        /// <summary>
        /// Pseudo-DES hashing of the 64-bit word(lword, rword). Both 32-bit arguments
        /// are returned hashed on all bits.
        /// </summary>
        /// <param name="lword"></param>
        /// <param name="rword"></param>
        public static void psdes(ref uint lword, ref uint rword)
        {
            const int NITER = 2;
            uint[] c1 = { 0xbaa96887, 0x1e17d32c, 0x03bcdc3c, 0x0f33d1b2 };
            uint[] c2 = { 0x4b0f3b58, 0xe874f0c3, 0x6955c5a6, 0x55a7ca46 };

            uint itmph = 0;
            uint itmpl = 0;
            for (uint i = 0; i < NITER; i++)
            {
                uint iswap = rword;
                uint ia = (uint)((iswap) ^ c1[i]);
                itmpl = ia & 0xffff;
                itmph = (uint)(ia >> 16);
                uint ib = itmpl * itmpl + ~(itmph * itmph);
                rword = (uint)(lword ^ (((ia = (uint)((ib >> 16) | ((ib & 0xffff) << 16))) ^ c2[i]) + itmpl * itmph));
                lword = iswap;
            }
        }

        /// <summary>
        /// Replace the array arr by a same-sized hash, all of whose bits depend on all
        /// of the bits in arr.Uses psdes for the mutual hash of two 32-bit words.
        /// </summary>
        /// <param name="arr"></param>
        /// <exception cref="Exception"></exception>
        public static void hashall(uint[] arr)
        {
            int m = arr.Length;
            int n = m - 1;
            n |= n >> 1;
            n |= n >> 2;
            n |= n >> 4;
            n |= n >> 8;
            n |= n >> 16;
            n++;
            int nb = n;
            int nb2 = n >> 1;
            if (n < 2)
            {
                throw new Exception("size must be > 1");
            }
            while (nb > 1)
            {
                for (int jb = 0; jb < n - nb + 1; jb += nb)
                {
                    for (int j = 0; j < nb2; j++)
                    {
                        if (jb + j + nb2 < m)
                        {
                            psdes(ref arr[jb + j], ref arr[jb + j + nb2]);
                            //uint jbj = arr[jb + j];
                            //uint jbjnb2 = arr[jb + j + nb2];
                            //psdes(ref jbj, ref jbjnb2);
                            //arr[jb + j] = jbj;
                            //arr[jb + j + nb2] = jbjnb2;
                        }
                    }
                }
                nb = nb2;
                nb2 >>= 1;
            }
            nb2 = n >> 1;
            if (m != n)
            {
                for (int j = nb2; j < m; j++)
                {
                    psdes(ref arr[j], ref arr[j - nb2]);
                    //uint jbj = arr[j];
                    //uint jbjnb2 = arr[j - nb2];
                    //psdes(ref jbj, ref jbjnb2);
                    //arr[j] = jbj;
                    //arr[j - nb2] = jbjnb2;
                }
            }
        }
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{public class HashAll{public HashAll(){}/// <summary>/// Pseudo-DES hashing of the 64-bit word(lword, rword). Both 32-bit arguments/// are returned hashed on all bits./// </summary>/// <param name="lword"></param>/// <param name="rword"></param>public static void psdes(ref uint lword, ref uint rword){const int NITER = 2;uint[] c1 = { 0xbaa96887, 0x1e17d32c, 0x03bcdc3c, 0x0f33d1b2 };uint[] c2 = { 0x4b0f3b58, 0xe874f0c3, 0x6955c5a6, 0x55a7ca46 };uint itmph = 0;uint itmpl = 0;for (uint i = 0; i < NITER; i++){uint iswap = rword;uint ia = (uint)((iswap) ^ c1[i]);itmpl = ia & 0xffff;itmph = (uint)(ia >> 16);uint ib = itmpl * itmpl + ~(itmph * itmph);rword = (uint)(lword ^ (((ia = (uint)((ib >> 16) | ((ib & 0xffff) << 16))) ^ c2[i]) + itmpl * itmph));lword = iswap;}}/// <summary>/// Replace the array arr by a same-sized hash, all of whose bits depend on all/// of the bits in arr.Uses psdes for the mutual hash of two 32-bit words./// </summary>/// <param name="arr"></param>/// <exception cref="Exception"></exception>public static void hashall(uint[] arr){int m = arr.Length;int n = m - 1;n |= n >> 1;n |= n >> 2;n |= n >> 4;n |= n >> 8;n |= n >> 16;n++;int nb = n;int nb2 = n >> 1;if (n < 2){throw new Exception("size must be > 1");}while (nb > 1){for (int jb = 0; jb < n - nb + 1; jb += nb){for (int j = 0; j < nb2; j++){if (jb + j + nb2 < m){psdes(ref arr[jb + j], ref arr[jb + j + nb2]);//uint jbj = arr[jb + j];//uint jbjnb2 = arr[jb + j + nb2];//psdes(ref jbj, ref jbjnb2);//arr[jb + j] = jbj;//arr[jb + j + nb2] = jbjnb2;}}}nb = nb2;nb2 >>= 1;}nb2 = n >> 1;if (m != n){for (int j = nb2; j < m; j++){psdes(ref arr[j], ref arr[j - nb2]);//uint jbj = arr[j];//uint jbjnb2 = arr[j - nb2];//psdes(ref jbj, ref jbjnb2);//arr[j] = jbj;//arr[j - nb2] = jbjnb2;}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GDB之调试系统接口syscall(九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

JavaScript 知识扫盲

JavaScript 知识扫盲 写在前面一、JavaScript 写入形式二、常用输入输出三、JS 是动态类型语言四、运算符五、数组1、数组创建2、获取和修改数组元素3、新增元素4、删除元素 六、函数七、对象1、对象的创建2、属性方法的使用 八、JavaScript 和 Java 对比九、事件1、常见事件2、…

Kubernetes(k8s)上搭建nacos集群

Kubernetes上搭建nacos集群 环境准备Kubernetes准备数据库准备 部署nacos集群官方镜像地址创建configmap创建部署文件根据yaml资源清单文件部署nacos 环境准备 Kubernetes准备 你需要准备一个Kubernetes集群&#xff0c;如图我的集群已经准备完毕&#xff1a; 数据库准备 …

【蓝桥杯选拔赛真题60】Scratch旋转风车 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析

目录 scratch旋转风车 一、题目要求 编程实现 二、案例分析 1、角色分析

【脑机接口论文与代码】 基于自适应FBCCA的脑机接口控制机械臂

Brain-Controlled Robotic Arm Based on Adaptive FBCCA 基于自适应FBCCA的脑机接口控制机械臂论文下载&#xff1a;算法程序下载&#xff1a;摘要1 项目介绍2 方法2.1CCA算法2.2FBCCA 算法2.3自适应FBCCA算法 3数据获取4结果4.1脑地形图4.2频谱图4.3准确率 5结论 基于自适应FB…

Spring底层的核心原理解析

这篇文章大致讲解一下spring的整个执行流程&#xff0c;也就是在我们脑子里面建立一个笼统的概念 spring如何创建一个容器呢 容器里面是对象 上面就是利用AnnotationConfigApplicationContext这个对象&#xff0c;然后传入了一个配置类的字节码对象给我们创建一个Spring容器&am…

Hyper-V 安装 CentOS (二)

总目录 https://preparedata.blog.csdn.net/article/details/132877836 文章目录 总目录一、Hyper-V 创建centos的虚拟机实例二、虚拟机安装Centos ISO镜像三、重启后&#xff0c;进入系统 一、Hyper-V 创建centos的虚拟机实例 网络连接先不选择&#xff0c;后面文章专门配置网…

【软考】系统架构设计师 - 知识扩展 - “区块链技术“

目录 一 简介&#x1f451; 1 比特币❤️ 2 区块链的特点❤️ 3 共识算法❤️ 二 练习题&#x1f451; 三 扩展&#x1f451; 1 哈希算法❤️ 2 哈希指针❤️ 3 UTXO❤️ 4 参考资料❤️ 一 简介&#x1f451; 1 比特币❤️ 比特币底层采用了区块链技术。 比特币交易…

03目标检测-传统方法与深度学习算法对比

目录 一、目标学习的检测方法变迁及对比 二、深度学习目标检测算法基本流程 三、传统目标检测算法VS深度学习目标检测算法 一、目标学习的检测方法变迁及对比 “目标检测“是当前计算机视觉和机器学习领域的研究热点。从Viola-Jones Detector、DPM等冷兵器时代的智…

【数据结构】二叉树的链式结构

【数据结构】二叉树的链式存储结构 二叉树的存储结构 typedef int BTDataType; // 二叉树的结构 typedef struct BinaryTreeNode {BTDataType data; // 树的值struct BinaryTreeNode *left; // 左孩子struct BinaryTreeNode *right;// 右孩子 } BinaryTreeNode;二…

EXCEL如何把一个单元格内的文本和数字分开?例如:龚龚15565 = 龚龚 15565

使用工具&#xff1a;WPS 举例&#xff1a; EXCEL如何把一个单元格内的文本和数字批量分开&#xff1f;不使用数据分列。 第一步、将第二行数据冻结 第二步、在B1、C1单元格输入需要分开的示例 第三步、点击选中B1单元格&#xff0c;输入快捷键【CTRLE】进行填充。B2单元格也是…

【AIGC】图片生成的原理与应用

前言 近两年 AI 发展非常迅速&#xff0c;其中的 AI 绘画也越来越火爆&#xff0c;AI 绘画在很多应用领域有巨大的潜力&#xff0c;AI 甚至能模仿各种著名艺术家的风格进行绘画。 目前比较有名商业化的 AI 绘画软件有 Midjourney、DALLE2、以及百度出品的文心一格&#xff1a;…

MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0)VSCode配置c/c++环境 彻底删除vscode(包括插件及配置!)

目录 一、简介 二、下载 1 旧版安装&#xff08;8.1.0&#xff09; 从 sourceforge.net 下载 2 新版安装(本次采用较新版本~~~) 从 github 下载 从 镜像站点 下载 自己编译 三、安装与配置 1. 在线安装&#xff08;这里仅作参考了解&#xff09; 2. 离线安装&…

异步FIFO设计的仿真与综合技术(3)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文&#xff0c;添加了笔者的个人理解与注释&#xff0c;文中蓝色部分为笔者注或意译。前文链接&#xff1a; 异步FIFO设计的仿真与综合技术&#xf…

自动化测试(五):自动化测试框架的搭建和基于yaml热加载的测试用例的设计

该部分是对自动化测试专栏前四篇的一个补充&#xff0c;本次参考以下文章实现一个完整的谷歌翻译接口自动化测试:   [1]【python小脚本】Yaml配置文件动态加载   [2]【python做接口测试的学习记录day8——pytest自动化测试框架之热加载和断言封装】 目标&#xff1a;框架封…

新增动态排序图、桑基图、AntV组合图,DataEase开源数据可视化分析平台v1.18.10发布

2023年9月14日&#xff0c;DataEase开源数据可视化分析平台正式发布v1.18.10版本。 这一版本的功能升级包括&#xff1a;数据集方面&#xff0c;对字段管理的后台保存做了相关优化&#xff0c;降低了资源消耗&#xff1b;仪表板方面&#xff0c;对联动、查询结果以及过滤组件等…

系统架构:软件工程速成

文章目录 参考概述软件工程概述软件过程 可行性分析可行性分析概述数据流图数据字典 需求分析需求分析概述ER图状态转换图 参考 软件工程速成(期末考研复试软考)均适用. 支持4K 概述 软件工程概述 定义&#xff1a;采用工程的概念、原理、技术和方法来开发与维护软件。 三…

GET,POST,DELETE,PUT参数传递的形式

一.get请求参数在地址后面进行拼接 1.代码&#xff1a; <template><div class""><button click"fn">点击</button></div> </template><script> import axios from "axios"; //安装完之后&#xff0…

MFC中嵌入显示opencv窗口

在MFC窗体中建立一个Picture Control控件,用于显示opencv窗口 在属性中设置图片控件的资源ID为IDC_PIC1 主要的思路: 使用GetWindowRect可以获取图片控件的区域 使用cv::resizeWindow可以设置opencv窗口的大小,适合图片控件的大小 使用cvGetWindowHandle函数可以获取到ope…

OpenCV(四十二):Harris角点检测

1.Harris角点介绍 什么是角点&#xff1f; 角点指的是两条边的交点&#xff0c;图中红色圈起来的点就是角点。 Harris角点检测原理&#xff1a;首先定义一个矩形区域&#xff0c;然后将这个矩形区域放置在我的图像中&#xff0c;求取这个区域内所有的像素值之和&#xff0c;之…