🐵指尖猴全新升级
第20课:冲突与解决
💥

冲突与解决

撞柜不可怕,化解冲突有妙招!

📖知识引入

💥什么是冲突
两个不同的键算出同一个下标,如11%10和21%10都指向1号柜
📿链地址法
每个格子挂一条小链表,撞柜的元素排队住一起,查找时顺链比对
🎯开放寻址法
撞了就往后找下一个空位:1号被占住2号,2号不行去3号
📉负载因子
元素数÷格子数,比值越高冲突越频繁,快满时该扩容了
💡
链地址法实现简单又稳定,是竞赛与工程中最常用的冲突解决方案

🔍链地址法示意图与代码

// table[i] 存一个 vector,撞柜元素挂成小链
vector<pair<int, string>> table[10];

void insert(int key, string val) {
    int h = key % 10;              // 哈希定位
    table[h].push_back({key, val}); // 撞柜就挂链尾
}

string find(int key) {
    int h = key % 10;
    for (auto& p : table[h])       // 只在冲突链里找
        if (p.first == key) return p.second;
    return "未找到";
}
// 11 和 21 都映射到 1 号柜,挂在同一条链上

撞柜元素挂成链,定位后小范围查找,冲突轻松化解

🎯小测验

第1题:哈希冲突指的是?

第2题:链地址法如何处理冲突?

第3题:负载因子越高意味着?

📝本课知识点

  • ✓冲突=不同键同下标
  • ✓链地址法挂链最常用
  • ✓负载因子高就该扩容
第20课完成!继续探索下一课吧 🚀