《数据结构与算法图解》-Chapter7

本文介绍了数据结构与算法图解中的散列表概念,包括其在O(1)查找的优势,冲突处理方法(分离链接),以及如何使用散列表检测重复数据和统计选票。还提供了JavaScript中数组与散列表的实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

书名:数据结构与算法图解
作者:[美]杰伊.温格罗 (Jay Wengrow)
出版社:人民邮电出版社
出版时间:2019-04-01
ISBN: 9787115509000

知识点:

  1. 散列表,仅用O(1)就能找出数据,线性查找要O(n),有序数组二分查找要O(logn)
  2. 散列表,也称散列、映射、散列映射、字典、关联数组
  3. 字符串转换为数字串的过程就是散列,用于对照的密码就是散列函数,比如:A=1,B=2,C=3...那么CAB就会转换成312.
  4. 处理冲突:散列值相同情况,分离链接(构造数组与子数组,每个数组包含散列值相同的键值对,子数组中包含一个键值对中的键和值两个元素)
  5. 找到平衡:散列表效率取决于数据量、可用内存、散列函数,既要避免冲突又要节约空间
  6. 负载因子:黄金法则即每增加7个元素,增加10个格子,理想的负载因子是0.7(7/10)
  7. 用散列表查数据是否存在重复数据,数组与散列表的JavaScript描述如代码1和2
  8. 用散列表统计选票及其优化如代码3

代码1

function hasDuplicateValue(array) {
    for (var i = 0; i < array.length; i++) {
        for (var j = 0; j < array.length; j++) {
            if (i !== j && array[i] === array[j]) {
                return true;
            }
        }
    }
    return false;
}

代码2

function hasDuplicateValue(array) {
    var existingValues = {};
    for (var i = 0; i < array.length; i++) {
        if (existingValues[array[i]] === undefined) {
            existingValues[array[i]] = 1;
        } else {
            return true;
        }
    }
    return false;
}

代码3

var votes = [];

function addVote(candidate) {
    votes.push(candidate);                    // 生成一个很长的列表
}

function countVotes(votes) {
    var tally = {};
    for (var i = 0; i < votes.length; i++) {    // 循环N次
        if (tally[votes[i]]) {
            tally[votes[i]]++;
        } else {
            tally[votes[i]] = 1;
        }
    }
    return tally;
}

// 以上是用数组统计选票,以下是用散列表统计选票
var votes = {};

function addVote(candidate) {
    if (votes[candidate]) {
        votes[candidate]++;        // 直接将选票和被选举人映射
    } else {
        votes[candidate] = 1;
    }
}

function countVotes() {
    return votes;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值