我的关键字 - 值对搜索代码快速尖叫,但我们可以加快速度。这是Fiddle的代码。
当客户端调用HashCompactor的.add(关键字,数据)方法时,它通过预处理器提供关键字,该预处理器用于迭代关键字。在这种情况下,假设字符是一个字母的字符串。所有以字母开头的关键字' a'将从该节点的孩子身上找到,就像一棵树。
对于这个问题,重用_finder3和_finder4来创建_finderN函数的最快方法是什么?您可以从代码中看到_finderN例程的模式,但我不确定如何最好地自动执行该过程。
#include<iostream>
#include "20112310_3.h"
using namespace std;
template<typename T>
Chain<T>::Chain(){first=0;}
template<typename T>
Chain<T>::ChainIterator::ChainIterator(ChainNode<T> startNode){
current=startNode;
}
template<typename T>
T& Chain<T>::ChainIterator::operator*() const{
return current->data;
}
template<typename T>
T* Chain<T>::ChainIterator::operator->() const{
return ¤t->data;
}
template<typename T>
ChainIterator& Chain<T>::ChainIterator::operator++(){
current=current->link;
return *this;
}
template<typename T>
ChainIterator Chain<T>::ChainIterator::operator++(int){
ChainIterator old=*this;
current=current->link;
return old;
}
template<typename T>
bool Chain<T>::ChainIterator::operator!=(const ChainIterator right) const{
return current!=right.current;
}
template<typename T>
bool Chain<T>::ChainIterator::operator==(const ChainIterator right) const{
return current==right.current;
}
int main(void)
{
return 0;
}
答案 0 :(得分:1)
什么是重用_finder3和_finder4来创建一个的最快方法 _finderN功能?
我建议使用一个简单的for循环,它会在找到结果时提前终止:
_finderN: function(node, character, n) {
let currentChildIndex = node.currentChildIndex;
for (let i = 0; i < n; i++) {
if (i === currentChildIndex) continue;
let child = this._finder1(node, i, character);
if (child) return child;
}
return null;
}
如果需要,您仍然需要处理default
案例。
我的关键字 - 值对搜索代码快速尖叫,但我们可以做到 更快。
通常,内置类型与自制解决方案相比具有卓越的性能。对于性能测试,我建议使用benchmark.js这样的库来执行预热并对许多测试运行进行平均。 http://jsperf.com/是一个基于上述图书馆的已知在线性能测试游乐场。
在我看来,你正在实施某种multimap。这可以使用内置的Map
数据类型:
// Simple 'multimap' insertion:
let add = (map, key, value) => {
let data = map.get(key);
if (data) data.push(value);
else map.set(key, data = [value]);
return data;
}
let map = new Map();
add(map, 'key', 1);
add(map, 'key', 2);
console.log(map.get('key'));
&#13;