当前位置: 首页 > 后端技术 > Node.js

趣味算法:JS实现红绳算法(匹配合适的小伙伴)

时间:2023-04-03 14:21:42 Node.js

今天的话题为什么要发明红绳算法?因为我在朋友圈发起了一个活动,所以看看大家留下了什么数据如何?意思是,两个关键数据:city+number(特殊字符)来分析这个数据city的意思:留下数据的人所在的城市,但是现在车马信件都很快,所以这是不是我们用来定义男女的匹配依据,只能说是基于特殊需求,比如不接受异地恋的人。这次我们不考虑数字:即使是幸运数字,我们如何让每个人都匹配?(合理且随机)使用HashTable(也叫HashMap)的数据结构来存储大家的信息。对于可能发生冲突的哈希值,使用单独的链接或者线性检测来解决冲突。小姐姐稀缺,小弟太多,所以这次不区分性别(泪流满面)正式开始什么是hashTable哈希表(Hashtable,也叫哈希表)是一种数据结构,直接根据键码值(Keyvalue)。也就是说,它通过将键值映射到表中的某个位置来访问记录,以加快查找速度。这种映射函数称为哈希函数,存储记录的数组称为哈希表。给定一个表M,有一个函数f(key)。对于任意给定的键值键,如果代入函数后可以得到包含该键的表中记录的地址,则表M称为一个散列(Hash)。表中,函数f(key)是一个散列(Hash)函数。开始手工实现HashTable,写哈希函数lolososeHashCodeclassHashTable{constructor(){this.table=[];//以数组形式存储}//哈希运算函数,可以自定义//这里最常用的哈希函数'loselose'staticloseloseHashCode(key){lethash=0;for(vari=0;i-1&&position=0&&position<=length){//检查边界letnode=newNode(element),current=head,previous,index=0if(position===0){//首先添加node.next=currentpositionhead=node}else{while(index++{hash.put(Object.keys(item)[0],item[Object.keys(item)[0]]);});console.log(hash.get('深圳').getHead(),hash.get('深圳').size());打印结果,深圳有18个人,幸好我们做了一个单独的链接保存这些重复的hash对应的值:目前我们的hashTable数据很长,每个hash都是一个数组下标对应一个链表(ifany)/undefined(ifnot)中奖规则设计今天是七夕节,所以我取出每个hash对应链表的第七位,人出来匹配getGoodLuck=function(num){constdata=[];hash.table.forEach((list,index)=>{letcount=0;letitem=list.getHead();for(leti=0;i