Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何提高“获取链接列表”的性能?_Javascript_Algorithm_Linked List - Fatal编程技术网

Javascript 如何提高“获取链接列表”的性能?

Javascript 如何提高“获取链接列表”的性能?,javascript,algorithm,linked-list,Javascript,Algorithm,Linked List,我试着自己实现一个链表,并面临这样一个问题:“我如何才能以O(1)复杂性获得节点?” 是否有机会(或良好实践)改进“get”方法?我需要在链表中添加另一个数据结构吗?我在一些文章中读到关于将哈希表用于链表的内容。这正常吗 类节点{ 构造函数(值){ 这个值=值; this.next=null; } } 类链接列表{ 构造函数(){ this.head=null; this.tail=null; } //O(1) addToTail(值){ 设newNode=newNode(值); if(thi

我试着自己实现一个链表,并面临这样一个问题:“我如何才能以O(1)复杂性获得节点?”

是否有机会(或良好实践)改进“get”方法?我需要在链表中添加另一个数据结构吗?我在一些文章中读到关于将哈希表用于链表的内容。这正常吗

类节点{
构造函数(值){
这个值=值;
this.next=null;
}
}
类链接列表{
构造函数(){
this.head=null;
this.tail=null;
}
//O(1)
addToTail(值){
设newNode=newNode(值);
if(this.head==null){
this.head=newNode;
this.tail=newNode;
}否则{
this.tail.next=newNode;
this.tail=newNode;
}
}
//O(n)
获取(值){
让cur=this.head;
while(cur&&cur.value!==值){
cur=cur.next;
}
返回电流;
}
//O(n)
删除(值){
让cur=this.head;
设prev=null;
while(cur&&cur.value!==值){
prev=cur;
cur=cur.next;
}
如果(当前){
//第一节点
if(this.head==cur){
this.head=cur.next;
if(this.head==null){
this.tail=null;
}
}否则{
//不是第一个节点
上一个=当前下一个;
if(cur.next==null){
this.tail=prev;
}
}
返回true;
}
返回false;
}
打印(){
让cur=this.head;
while(cur!==null){
控制台日志(当前值);
cur=cur.next;
}
}
}
const cars=[‘音频’、‘宝马’、‘马自达’、‘丰田’];
const list=new LinkedList();
for(设i=0;i
…并面临这样一个问题:“我如何才能获得O(1)复杂度的节点?”

你不能。链表总是需要一定程度的扫描。纯单链表是O(n),IIRC

我在一些文章中读到关于将哈希表用于链表的内容。这正常吗

有一个映射结构对键进行散列以找到正确的“bucket”并不少见,其中“bucket”是一个链表或类似的线性搜索容器,用于所有键散列相同的条目。基本上,get是:

  • 对密钥进行哈希运算
  • 按哈希查找桶
  • 在桶中搜索钥匙
不过,在这一点上,整个事情不再是一个链表,而是一个地图。即使是哈希表支持的映射也不是O(1),尽管它比O(n)好

(我知道您这样做是为了学习,但我必须指出JavaScript的本机
Map
,它确实使用了散列或(引用)“……其他机制,平均而言,这些机制提供的访问时间与集合中的元素数呈次线性关系。”)

O(n)获取链表元素的性能是预期的。获取元素的普通链表为O(n)。查看->