如何创建迭代有机搜索代码?我正在解析日志格式的网站文件

时间:2017-05-13 00:34:30

标签: javascript search real-time

我的关键字 - 值对搜索代码快速尖叫,但我们可以加快速度。这是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 &current->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;
}

1 个答案:

答案 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数据类型:

来实现

&#13;
&#13;
// 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;
&#13;
&#13;