数据结构-哈希表

一、数组:

1、数组进行插入操作时,效率不高
2、数组进行查找操作的效率
(1)、如果是基于索引进行查找效率非常高
(2)、基于内容去查找,效率不高
3、数组进行删除操作,效率不高

二、哈希表:

1、 哈希表是基于数组进行实现的,相对于数组,它有很多优势:
(1)、可以非常快的 插入-删除-查找
(2)、哈希表的速度比树还要快,基本可以瞬间查找到想要的元素
2、哈希表的特点:
(1) 哈希表中的数据是没有顺序的。
(2) 哈希表中的key是不允许重复的。

哈希函数:

霍纳算法类似于我国的秦九韶算法

哈希函数的封装

  // 设计哈希函数
  // 1、将字符串转成比较大的数字:hashCode
  // 2、将大的数字hashCode压缩成数组范围之内
  function hashFunc(str, size) {
   
      // 1.初始化hashCode的值
      var hashCode = 0

      // 2.霍纳算法, 来计算hashCode的数值
      for (var i = 0; i < str.length; i++) {
   
          hashCode = 37 * hashCode + str.charCodeAt(i)
      }

      // 3.取模运算
      var index = hashCode % size
      return index
  }

  alert(hashFunc("abc", 7)) // 4
  alert(hashFunc("cba", 7)) // 3
  alert(hashFunc("nba", 7)) // 5
  alert(hashFunc("mba", 7)) // 1

质数:
质数也称为素数
质数表示大于1的自然数中,只能被1和自己整除的数,
也就是说不能被2到num - 1之间的数字整除
写法1(效率不高):

   function isPrime(num) {
   
       for (var i = 2; i < num; i++) {
   
           if (num % i == 0) {
   
               return false
           }
       }
       return true
   }

写法2(效率高):

    function isPrime(num) {
   
        // 1.获取平方根
        var temp = parseInt(Math.sqrt(num))

        // 2.循环判断
        for (var i = 2; i <= temp; i++) {
   
            if (num % i == 0) {
   
                return false
            }
        }
        return true
    }

    // 测试
    alert(isPrime(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值