当前位置: 首页 > news >正文

网站备份与恢复/网络推广运营途径

网站备份与恢复,网络推广运营途径,企业网站建设合同书标准版,深圳 seo 外贸网站建设 多语种文章目录 前言一、哈希函数是什么?二、哈希冲突与解决方案1. 拉链法(Separate Chaining)2. 开放地址法(Open Addressing) 三、哈希表的性能分析四、C STL 中的 unordered\_map五、词频统计总结 前言 哈希表&#xff0…

文章目录

  • 前言
  • 一、哈希函数是什么?
  • 二、哈希冲突与解决方案
    • 1. 拉链法(Separate Chaining)
    • 2. 开放地址法(Open Addressing)
  • 三、哈希表的性能分析
  • 四、C++ STL 中的 unordered\_map
  • 五、词频统计
  • 总结


前言

哈希表(Hash Table)就是一种常见的、高效的数据结构,它利用哈希函数将数据映射到固定大小的空间,从而实现常数级别的插入、删除和查找操作。


一、哈希函数是什么?

哈希函数(Hash Function)是将任意长度的数据映射为固定长度的哈希值的函数。它的目标是尽量均匀地分布键值,避免哈希冲突。

示例(字符串转哈希):

int simpleHash(string key, int tableSize) {int hashVal = 0;for (char ch : key) {hashVal = (hashVal * 31 + ch) % tableSize;}return hashVal;
}

该函数将字符串转换为整数索引,31 是常见的“乘法因子”,用于增强哈希分布。


二、哈希冲突与解决方案

由于哈希函数不可能完全避免冲突,常用的冲突解决方案有以下两种:

1. 拉链法(Separate Chaining)

每个桶(bucket)保存一个链表,将冲突的元素链在一起。

#include <iostream>
#include <list>
#include <vector>
using namespace std;class HashTable {
private:vector<list<int>> table;int size;int hash(int key) {return key % size;}public:HashTable(int s) : size(s) {table.resize(size);}void insert(int key) {int idx = hash(key);table[idx].push_back(key);}bool search(int key) {int idx = hash(key);for (int val : table[idx]) {if (val == key) return true;}return false;}
};

2. 开放地址法(Open Addressing)

如果出现冲突,就向后找下一个空位。常用方法有线性探测、二次探测和双重哈希。

线性探测示例:

#include <iostream>
#include <vector>
using namespace std;class LinearProbingHash {
private:vector<int> table;int size;int EMPTY = -1;int hash(int key) {return key % size;}public:LinearProbingHash(int s) : size(s) {table.resize(size, EMPTY);}void insert(int key) {int idx = hash(key);while (table[idx] != EMPTY) {idx = (idx + 1) % size;}table[idx] = key;}bool search(int key) {int idx = hash(key);int start = idx;while (table[idx] != EMPTY) {if (table[idx] == key) return true;idx = (idx + 1) % size;if (idx == start) break; // 表满}return false;}
};

三、哈希表的性能分析

操作平均时间复杂度最坏时间复杂度
查找O(1)O(n)(所有冲突)
插入O(1)O(n)(所有冲突)
删除O(1)O(n)(所有冲突)

注意: 哈希表性能取决于负载因子(load factor),负载因子高时容易冲突,需要扩容重哈希


四、C++ STL 中的 unordered_map

标准库中的 unordered_map 就是哈希表的封装:

#include <iostream>
#include <unordered_map>
using namespace std;int main() {unordered_map<string, int> mp;mp["apple"] = 3;mp["banana"] = 5;if (mp.find("apple") != mp.end()) {cout << "Found apple, count = " << mp["apple"] << endl;}
}

unordered_map 使用哈希表实现,插入、删除、查找操作平均为 O(1)。


五、词频统计

假设有一段文本,要求统计每个单词出现的频率:

#include <iostream>
#include <unordered_map>
#include <sstream>
using namespace std;int main() {string text = "this is a test this is a test again";unordered_map<string, int> freq;stringstream ss(text);string word;while (ss >> word) {freq[word]++;}for (auto& [k, v] : freq) {cout << k << ": " << v << endl;}return 0;
}

总结

本文介绍了哈希函数与哈希表的基本概念、冲突解决方案(拉链法和开放地址法)、性能分析,以及实际应用示例。哈希表在工程中非常常用,比如数据库索引、缓存系统、集合判断、唯一值统计等。

http://www.cadmedia.cn/news/733.html

相关文章:

  • 湖南畅想网站建设/网站定制开发
  • 济南网站推广¥做下拉去118cr/手机优化软件
  • 设计师网站源码/阿里巴巴国际贸易网站
  • 来广营网站建设/百度竞价推广效果好吗
  • 建设报名系统网站可靠吗/百度服务
  • 宿迁公司做网站/周口网站seo
  • 腾讯云可以做网站吗/优化大师的优化项目有哪7个
  • 网站建设 资质荣誉/网站营销方案模板
  • 网站备案表格/搜索引擎哪个好
  • 电大亿唐网不做网站做品牌/百度搜索关键词排名优化技术
  • 深圳企业网站建设公司排名/软文营销经典案例优秀软文
  • 个人微网站怎么做/站长工具关键词挖掘
  • wordpress font-spider/优化大师的使用方法
  • 软件公司做网站吗/seo快速入门教程
  • 做网站推广logo/合肥seo服务商
  • 深圳专门做网站的公司/合肥网络科技有限公司
  • 达州住房和城乡建设部网站/seo优化网站查询
  • 超酷win8风格企业网站织梦模板/软文推广渠道主要有
  • 太仓建设银行网站/济南网站推广
  • 青海西宁制作网站专业/广东seo点击排名软件哪里好
  • 建设银行官方网站/有哪些可以推广的平台
  • 河南郑州汽车网网站建设/seo优化软件免费
  • 网站建设赠送seo/怎么提高百度搜索排名
  • 做网站网页的工作怎么样/足球排行榜前十名
  • 梁山网站建设/网络推广服务合同
  • 汕头网站建设套餐/全国知名网站排名
  • 大理建设学校官方网站/网站设计方案模板
  • 全网营销系统是不是传销/西安seo诊断
  • 电子外发加工网/长春网站优化流程
  • 四川省建设工程质量监理协会网站/什么是网络营销策略