【轻松掌握数据结构与算法】哈希(Hashing)

哈希(hash) 哈希(hash)---C++详解 阅读详情

什么是哈希?

哈希是一种将任意长度的数据转换为固定长度的数据的技术。这个固定长度的数据通常被称为哈希值或哈希码。哈希函数是实现这一转换的关键,它接受任意长度的输入,并产生一个固定长度的输出。

为什么使用哈希?

哈希的主要用途之一是快速查找数据。通过哈希函数,我们可以将数据映射到一个较小的范围,从而减少查找时间。此外,哈希还可以用于数据完整性检查、密码存储等场景。

哈希表抽象数据类型(ADT)

哈希表是一种基于哈希函数的数据结构,它允许我们以接近O(1)的时间复杂度进行插入、删除和查找操作。哈希表的核心思想是使用哈希函数将键映射到表中的一个位置,然后将键值对存储在该位置。

理解哈希

哈希函数的设计对于哈希表的性能至关重要。一个好的哈希函数应该能够均匀地分布键值对,以减少冲突的发生。冲突是指多个键通过哈希函数映射到同一个位置的情况。

哈希组件

哈希表由以下几个关键组件组成:

  1. 哈希函数:将键映射到表中的位置。

  2. 哈希表:存储键值对的数组。

  3. 负载因子:表中已使用位置与总位置数的比值。

  4. 冲突解决技术:处理多个键映射到同一个位置的情况。

哈希表

哈希表是实现哈希功能的数据结构。它通常是一个数组,数组的每个位置可以存储一个或多个键值对。

哈希函数

哈希函数是哈希表的核心,它将键转换为哈希表中的索引。一个好的哈希函数应该满足以下条件:

  • 均匀分布:键值对在哈希表中均匀分布。

  • 快速计算:哈希函数的计算应该快速且高效。

  • 确定性:相同的键总是映射到相同的索引。

常见函数分类及示例

哈希函数是将任意长度的输入数据转换为固定长度输出的函数。一个好的哈希函数应该具有均匀分布、快速计算和确定性的特点。以下是一些常见的哈希函数分类及其示例:

1. 除法哈希函数(Division Hash Function)

除法哈希函数是最简单的哈希函数之一,它通过取模运算将输入数据映射到哈希表的索引。

公式

h(k) = k \mod m

其中,k 是输入键,m 是哈希表的大小。

示例代码
def division_hash_function(key, table_size):
    return key % table_size

# 示例输入输出
table_size = 10
print(division_hash_function(25, table_size))  # 输出: 5
print(division_hash_function(35, table_size))  # 输出: 5

2. 乘法哈希函数(Multiplication Hash Function)

乘法哈希函数通过乘法和取模运算将输入数据映射到哈希表的索引。这种方法通常使用一个常数 A,通常选择为黄金分割比。

公式

h(k) = \lfloor m \times ((k \times A) \mod 1) \rfloor

其中,k 是输入键,m 是哈希表的大小,A 是一个常数(通常选择为黄金分割比 0.618033988749895)。

示例代码
def multiplication_hash_function(key, table_size):
    A = 0.618033988749895
    return int(table_size * ((key * A) % 1))

# 示例输入输出
table_size = 10
print(multiplication_hash_function(25, table_size))  # 输出: 4
print(multiplication_hash_function(35, table_size))  # 输出: 6

3. 中平方哈希函数(Mid-Square Hash Function)

中平方哈希函数通过将输入数据平方,然后取中间几位作为哈希值。

公式

h(k) = \text{mid}((k^2) \mod (10^{2p}))

其中,k 是输入键,p 是哈希表大小的位数。

示例代码
def mid_square_hash_function(key, table_size):
    key_squared = key * key
    key_str = str(key_squared)
    mid = len(key_str) // 2
    mid_value = int(key_str[mid-2:mid+2])
    return mid_value % table_size

# 示例输入输出
table_size = 100
print(mid_square_hash_function(25, table_size))  # 输出: 56
print(mid_square_hash_function(35, table_size))  # 输出: 25

4. 折叠法哈希函数(Folding Hash Function)

折叠法哈希函数通过将输入数据分成若干部分,然后将这些部分相加得到哈希值。

公式

h(k) = \sum_{i=0}^{n-1} k_i \mod m

其中,k 是输入键,k_i 是输入键的第 i 个部分,m 是哈希表的大小。

示例代码
def folding_hash_function(key, table_size, part_size=2):
    key_str = str(key)
    parts = [int(key_str[i:i+part_size]) for i in range(0, len(key_str), part_size)]
    return sum(parts) % table_size

# 示例输入输出
table_size = 100
print(folding_hash_function(253456, table_size))  # 输出: 66
print(folding_hash_function(356789, table_size))  # 输出: 87

5. 旋转哈希函数(Rotating Hash Function)

旋转哈希函数通过将输入数据的每一位旋转特定的位数,然后计算哈希值。

公式

h(k) = \left( \sum_{i=0}^{n-1} (k_i \ll (i \times p)) \right) \mod m

其中,k 是输入键,k_i 是输入键的第 i 个字节,p 是旋转位数,m 是哈希表的大小。

示例代码
def rotating_hash_function(key, table_size, shift=4):
    hash_value = 0
    for byte in key.to_bytes((key.bit_length() + 7) // 8, byteorder='big'):
        hash_value = ((hash_value << shift) + byte) % table_size
    return hash_value

# 示例输入输出
table_size = 100
print(rotating_hash_function(253456, table_size))  # 输出: 76
print(rotating_hash_function(356789, table_size))  # 输出: 37

6. 通用哈希函数(Universal Hash Function)

通用哈希函数通过选择一个随机的哈希函数,确保不同输入键的哈希值尽可能均匀分布。

公式

h_{a,b}(k) = ((a \times k + b) \mod p) \mod m

其中,k 是输入键,a 和 b 是随机选择的整数,p 是一个大于 m 的质数,m 是哈希表的大小。

示例代码
import random

def universal_hash_function(key, table_size):
    p = 104729  # 一个较大的质数
    a = random.randint(1, p-1)
    b = random.randint(0, p-1)
    return ((a * key + b) % p) % table_size

# 示例输入输出
table_size = 100
print(universal_hash_function(253456, table_size))  # 输出: 42
print(universal_hash_function(356789, table_size))  # 输出: 17

以上是一些常见的哈希函数及其示例代码。每种哈希函数都有其特定的用途和优缺点。在实际应用中,选择合适的哈希函数可以显著提高哈希表的性能。希望这些示例能帮助您更好地理解和应用哈希技术。

负载因子

负载因子是哈希表中已使用位置与总位置数的比值。它用于衡量哈希表的满程度。当负载因子超过一定阈值时,通常需要对哈希表进行重新调整大小,以保持性能。

冲突

冲突是指多个键通过哈希函数映射到同一个位置的情况。冲突解决技术包括:

  • 链地址法(Separate Chaining):每个哈希表位置维护一个链表,所有映射到该位置的键值对都存储在链表中。

  • 开放定址法(Open Addressing):当发生冲突时,寻找下一个可用位置存储键值对。

冲突解决技术比较

冲突解决技术优点缺点
链地址法实现简单,适合负载因子较高的情况需要额外的指针空间
开放定址法不需要额外的指针空间负载因子较高时性能下降,删除操作复杂

如何哈希表获得O(1)复杂度?

在理想情况下,哈希表可以实现O(1)的插入、删除和查找操作。然而,这需要一个良好的哈希函数和适当的冲突解决策略。在实际应用中,哈希表的性能通常接近O(1),但可能会因为冲突和负载因子的影响而有所下降。

不适合哈希表的问题

虽然哈希表在许多情况下都非常高效,但有些问题不适合使用哈希表。例如,需要保持键的顺序或进行范围查询的问题,哈希表就不太适用。

布隆过滤器

布隆过滤器是一种空间高效的概率型数据结构,用于测试一个元素是否是一个集合的成员。它可能会返回假阳性,但不会返回假阴性。

哈希:问题与解决方案

问题1:实现一个简单的哈希表

问题描述:实现一个简单的哈希表,支持插入、删除和查找操作。

示例代码:

class HashTable:
    def __init__(self, size=10):
        self.size = size
        self.table = [[] for _ in range(size)]

    def hash_function(self, key):
        return hash(key) % self.size

    def insert(self, key, value):
        index = self.hash_function(key)
        for item in self.table[index]:
            if item[0] == key:
                item[1] = value
                return
        self.table[index].append([key, value])

    def delete(self, key):
        index = self.hash_function(key)
        for i, item in enumerate(self.table[index]):
            if item[0] == key:
                del self.table[index][i]
                return

    def search(self, key):
        index = self.hash_function(key)
        for item in self.table[index]:
            if item[0] == key:
                return item[1]
        return None

# 示例输入输出
ht = HashTable()
ht.insert("apple", 1)
ht.insert("banana", 2)
print(ht.search("apple"))  # 输出: 1
ht.delete("apple")
print(ht.search("apple"))  # 输出: None

问题2:处理哈希表的冲突

问题描述:实现一个哈希表,使用链地址法处理冲突。

示例代码:

class HashTable:
    def __init__(self, size=10):
        self.size = size
        self.table = [[] for _ in range(size)]

    def hash_function(self, key):
        return hash(key) % self.size

    def insert(self, key, value):
        index = self.hash_function(key)
        bucket = self.table[index]
        for i, (k, v) in enumerate(bucket):
            if k == key:
                bucket[i] = (key, value)
                return
        bucket.append((key, value))

    def delete(self, key):
        index = self.hash_function(key)
        bucket = self.table[index]
        for i, (k, v) in enumerate(bucket):
            if k == key:
                del bucket[i]
                return

    def search(self, key):
        index = self.hash_function(key)
        bucket = self.table[index]
        for k, v in bucket:
            if k == key:
                return v
        return None

# 示例输入输出
ht = HashTable()
ht.insert("apple", 1)
ht.insert("banana", 2)
print(ht.search("apple"))  # 输出: 1
ht.delete("apple")
print(ht.search("apple"))  # 输出: None

问题3:使用开放定址法处理冲突

问题描述:实现一个哈希表,使用开放定址法处理冲突。

示例代码:

class HashTable:
    def __init__(self, size=10):
        self.size = size
        self.table = [None] * size

    def hash_function(self, key):
        return hash(key) % self.size

    def insert(self, key, value):
        index = self.hash_function(key)
        while self.table[index] is not None:
            if self.table[index][0] == key:
                self.table[index] = (key, value)
                return
            index = (index + 1) % self.size
        self.table[index] = (key, value)

    def delete(self, key):
        index = self.hash_function(key)
        while self.table[index] is not None:
            if self.table[index][0] == key:
                self.table[index] = None
                # Rehash elements to maintain open addressing
                self.rehash(index)
                return
            index = (index + 1) % self.size

    def rehash(self, start_index):
        index = start_index
        while True:
            next_index = (index + 1) % self.size
            if self.table[next_index] is None:
                break
            key, value = self.table[next_index]
            self.table[next_index] = None
            self.insert(key, value)
            index = next_index

    def search(self, key):
        index = self.hash_function(key)
        while self.table[index] is not None:
            if self.table[index][0] == key:
                return self.table[index][1]
            index = (index + 1) % self.size
        return None

# 示例输入输出
ht = HashTable()
ht.insert("apple", 1)
ht.insert("banana", 2)
print(ht.search("apple"))  # 输出: 1
ht.delete("apple")
print(ht.search("apple"))  # 输出: None

问题4:实现布隆过滤器

问题描述:实现一个布隆过滤器,用于测试一个元素是否是一个集合的成员。

示例代码:

import mmh3
from bitarray import bitarray

class BloomFilter:
    def __init__(self, size, hash_num):
        self.size = size
        self.hash_num = hash_num
        self.bit_array = bitarray(size)
        self.bit_array.setall(0)

    def add(self, item):
        for i in range(self.hash_num):
            digest = mmh3.hash(item, i) % self.size
            self.bit_array[digest] = True

    def lookup(self, item):
        for i in range(self.hash_num):
            digest = mmh3.hash(item, i) % self.size
            if not self.bit_array[digest]:
                return False
        return True

# 示例输入输出
bf = BloomFilter(50, 7)
bf.add("apple")
bf.add("banana")
print(bf.lookup("apple"))  # 输出: True
print(bf.lookup("orange"))  # 输出: False

总结

哈希表是一种非常高效的数据结构,适用于快速查找、插入和删除操作。通过合理设计哈希函数和冲突解决策略,可以显著提高哈希表的性能。布隆过滤器则是一种空间高效的概率型数据结构,适用于测试元素是否属于某个集合。希望这些示例代码和输入输出能帮助您更好地理解和应用哈希技术。

密码学之哈希 原文链接:https://zhuanlan.zhihu.com/p/44544072 哈希(hash) 哈希函数是一种函数。 举一个简单的例子来说明它的用法。譬如学校里以学生名字为索引建了一张表,存储学生的信息。同时希望在查找的时候能够高效率地查找到学生。可以怎么实现呢?(如果以学号为索引,可以一次查找就找到;以名字为索引纯粹是举例;但是在实际中有很多以名字为索引的情况,譬如Web开发中,表单fo... 阅读详情

相关推荐

哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶

文章目录哈希哈希(散列)函数 哈希 哈希(散列)是一种数据结构,通过散列算法将元素值转换为散列值进行存储。使得元素存储的位置与元素本身建立起了映射关系,如果要查、改数据,就可以直接到对应的位置去,使得时间复杂度达到了 O(1)。 哈希(散列)函数 哈希函数就是建立起元素与其存储位置的映射关系。 对于哈希函数来说,必须具有以下特点; 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0 到m-1之间 哈希函数计算出来的地址能均匀分布在整个空间中(防止产生密集的哈希冲突

Jormungand_V的博客 4763

哈希(Hash)

开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。比如:在布隆过滤器中查找"alibaba"时,假设3个哈希函数计算的哈希值为:1、3、7,刚好和其他元素的比特位重叠,此时布隆过滤器告诉该元素存在,但实该元素是不存在的。注意:布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可能存在,因为有些哈希函数存在一定的误判。

m0_63742310的博客 6365

Java MD5哈希算法原理、实现与安全实践指南

哈希函数是计算机安全与数据完整性校验的核心基础技术,它将任意长度的输入通过单向数学变换映射为固定长度的输出,即哈希值。其核心原理在于利用雪崩效应确保数据微小变动即导致结果剧变,从而实现数据指纹的唯一性标识。在技术价值上,哈希算法为密码存储、文件校验、数字签名等场景提供了高效的数据完整性验证机制。然而,随着计算能力的提升和密码学分析的发展,MD5等早期算法因存在碰撞漏洞,其安全性已被削弱。在应用场景中,开发者常将其用于文件去重、缓存键生成等非高安全需求环节,但需注意其已不适用于密码存储等高敏感场景。本文结合g

weixin_30363509的博客 328

【数据结构】哈希(Hash)

数据结构:哈希函数

秋之回忆Alex的博客 9215

从哈希冲突到实时3D重建:Voxel Hashing如何重塑空间数据结构

本文深入探讨了Voxel Hashing技术在实时3D重建中的革命性应用。通过创新的空间哈希表结构,该技术有效解决了传统体素网格内存消耗过大的问题,实现了大规模场景的高精度实时重建。文章详细解析了其动态内存管理策略和高效算法设计,展示了在医疗、工业检测等领域的实际应用价值。

weixin_29058331的博客 264

深入解析Linux密码哈希:crypt-md5算法原理、实现与应用

密码哈希是信息安全与系统认证的核心基础技术,其核心原理是将用户密码通过单向散列函数转换为不可逆的固定长度字符串。在Linux系统中,crypt-md5算法作为经典的密码哈希方案,通过引入盐值(salt)和多次迭代的MD5计算,有效抵御彩虹表攻击并增加暴力破解难度。该技术广泛应用于系统认证、Web服务器配置和脚本开发等场景,尤其在处理/etc/shadow文件、Apache .htpasswd认证及嵌入式系统兼容性开发中具有重要价值。理解crypt-md5的实现机制,不仅有助于排查用户登录失败、密码验证不一致

weixin_30693683的博客 411

bloomfilter.js核心原理:FNV哈希算法与增强双哈希技术详解

bloomfilter.js是一款高效的JavaScript布隆过滤器实现,它利用FNV哈希算法实现快速数据处理,通过增强双哈希技术显著提升查询性能。本文将深入解析其核心原理与技术实现,帮助开发者理解如何在项目中高效应用这一强大的数据结构。 ## 布隆过滤器基础:空间与时间的精妙平衡 布隆过滤器是一种空间高效的概率性数据结构,能够快速判断一个元素是否存在于集合中。它的核心优势在于:以极小的空间

gitblog_00401的博客 635

字符串哈希核心原理与实战:从Rabin-Karp算法到工程优化

哈希函数是计算机科学中一种将任意长度数据映射为固定长度摘要的核心技术,其核心原理是通过特定算法(如多项式滚动哈希)生成数据的“指纹”。这种技术通过牺牲极小的冲突概率,换取了O(1)时间复杂度的等值比较能力,在算法设计与工程实践中具有极高的技术价值。它广泛应用于字符串快速匹配、海量数据去重、内容指纹生成等场景,是构建高效搜索引擎、数据库索引和大规模文本处理系统的基石。本文深入剖析了字符串哈希的实现细节,包括如何通过前缀哈希和双哈希策略优化性能与可靠性,并结合Rabin-Karp算法等高频搜索关键词,展示了其在

weixin_34236869的博客 524

JDK7-HashMap源码解析

为了方便阅读和写注释,笔者将HashMap源码单独拷出来了,推荐大家也这么做,阅读起来更加轻松,Debug也很方便,更重要的是,你可以修改源码来测试。 继承关系图 阅读源码建议采用自上而下的结构,建议先看Map接口、然后AbstractMap抽象类、最后HashMap。 整体结构分层 Map接口 定义Map具备的功能,使用内部接口Entry来对单个映射关系进行封装,Entry是Map的基本组成单...

程序员小潘 3671

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析)

本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。

7z8x2c4v6b9的博客 299

Zemax实战:5步搞定牛顿望远镜光学设计(附球差优化技巧)

本文详细介绍了在Zemax OpticStudio中构建高精度牛顿望远镜光学系统的5步实战流程,包括初始参数设置、球差优化、折叠镜与遮光面配置等关键步骤。特别针对球差问题,提供了将主镜圆锥系数设为-1的优化方案,有效消除轴上弥散斑。通过3D视图和MTF分析验证,该系统可实现接近衍射极限的成像质量,适合天文观测等应用场景。

x8y9z0的博客 929

PTA 11-散列4 Hashing - Hard Version 解法详述

PTA-mooc完整题目解析及AC代码库:PTA(拼题A)-浙江大学中国大学mooc数据结构全AC代码与题目解析(C语言) 虽然课程后面专门给出了一节用来讲解这道题,但是我在做这道题的时候觉得老师的思路非常巧妙,具体实现上也有很多优化的方法,所有在这里给出了具体的解法分析详细说明 Given a hash table of size N, we can define a hash functio...

zhuiyisinian的博客 1429

gem5 run parsec2.1 ---- 亲测跑通教程

使用gem5模拟仿真parsec2.1,排除了各种bug,成功跑通,亲测有效!!!

m0_55539563的博客 1546

RK哈希、线性探测

题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词。     文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个)。并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了。 输入描述 Input Description 第1行

GAUSS_CLB 984

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 569

flowable工作流看这一篇就够了(基础篇)

接下来我们构建一个非常简单的请假流程,Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。

qq_38196449的博客 2万+

openMVG高级特征匹配:级联哈希与KD树算法的效率之争

在计算机视觉和三维重建领域中,特征匹配是关键的技术环节。openMVG作为一个开源的多视角几何库,提供了多种高效的特征匹配算法,其中级联哈希(Cascade Hashing)和KD树(KD-Tree)算法是两种极具代表性的高效匹配方法。本文将深入探讨这两种算法在openMVG中的实现原理和性能对比。 ## 🔍 特征匹配的重要性 特征匹配是计算机视觉中的基础任务,它负责在不同图像间建立对应关系

gitblog_00130的博客 453

继电保护原理1.2-反时限过流保护

反时限过流保护

让你爱上电路设计 1万+

绝区零一条龙(ZenlessZoneZero-OneDragon)登录游戏流程自动化解析:从打开游戏到进入大世界的完整状态机

本篇技术指南聚焦 ZenlessZoneZero-OneDragon(绝区零 一条龙)项目中「登录游戏」玩法链路的完整自动化实现:从游戏启动后的登录页开始,覆盖自动登录、手动登录(验证码/账号密码/扫码)、选区服枢纽态、加载画面直至进入大世界的全部状态流转,并结合仓库源码与 screen_info 配置剖析底层状态机与画面识别原理。读完你将掌握该项目的登录状态机建模方式、关键操作节点调用链,以及各

gitblog_00508的博客 1102

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1740

【嵌入式硬件】DRV8874电机驱动

1)N沟道H桥电机驱动;2)驱动1个双向有刷直流电机;3)2个单向有刷直流电机;4)4.5V-37V工作电压范围;5)集成电流感测和调节;6)成比例电流输出(IPROPI);7)可选电流调节(IMODE):逐周期或固定关断时间;8)支持1.8、3V、5V逻辑输入;9)集成保护:欠压、电荷泵欠压、过流保护、输出关闭、热关断、自动故障恢复。

qq_39200110的博客 4424

11-散列4 Hashing - Hard Version(2种方法)

题目描述 Given a hash table of size N, we can define a hash function H(x)=x%N. Suppose that the linear probing is used to solve collisions, we can easily obtain the status of the hash table with a given s...

计算机科学与技术专业学生的成长之路 1997

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Uncharted PC 移植版 GPU 命令处理器并行化实战:从单核瓶颈到两阶段绘制管线

本文以 Uncharted PC 移植项目(uncharted_pc,基于 shadPS4 的 PS4 模拟层)的设计文档 [docs/parallel_gpu.md](https://link.gitcode.com/i/5266c34999c6891fef44293324b88016) 为核心,完整记录其消除“模拟 GPU 命令处理器单核瓶颈”的工程实践:从基线测量、投机式 Draw 预计算(

gitblog_00438的博客 333

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Dash:Scalable Hashing on Persistent Memory

Abstract 字节寻址的PM让哈希表具有低延迟,持久化代价低,立刻恢复的潜能。最近的英特尔的DCPMM的出现加速了这一趋势。很多新的哈希表算法被提出,但大部分都是基于仿真并且在真的PM上的效果是次优的,他们都是piece-wise.partitial 的方法(不知道什么意思,我估计是能在部分或者局部可以取得最优的效果),这些方法都规避了很多重要的特性 ,例如可测量性、高的载重因子和立即恢复的能力。 我们提出了Dash,一种基于PM的功能全面的方法,建立一个动态可升级的哈希表。这个方法具有之前提到的所有的

persimmon_xh的博客 735

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

CMPH——C Minimal Perfect Hashing Library【译】

CMPH - C Minimal Perfect Hashing Library C最小完美哈希库 翻译:ZH奶酪 博客地址:http://www.cnblogs.com/CheeseZH  动机: 一个完美的hash函数可以讲一个包含n个键的静态集合映射到m个整数而不出现冲突,此时m大于等于n。如果m等于n,这个函数就可以称作最小; 最小完美哈希函数被广泛的应用在高效存储以及从静...

weixin_34236869的博客 328

gh_mirrors/alg/algos:终极编程竞赛算法库,助你轻松征服ACM ICPC

你是否正在准备编程竞赛,却苦于找不到高质量、易于理解的算法实现?gh_mirrors/alg/algos 正是你需要的终极编程竞赛算法库!这个强大的C++算法集合专门为ACM ICPC、Codeforces等编程竞赛设计,包含了从基础到高级的各种经典算法实现。无论你是编程竞赛新手还是经验丰富的选手,这个库都能帮助你快速掌握核心算法,提升解题效率,轻松征服各种竞赛难题。🚀 ## 为什么选择这个算

gitblog_07228的博客 368
上一篇: 【轻松掌握数据结构与算法】符号表(Symbol Tables)
下一篇: 【轻松掌握数据结构与算法】字符串算法(String Algorithms)
Whoisbug
博客等级 码龄9年 894粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值