打字稿与indexOf中的二进制搜索-如何正确获得性能

问题描述 投票:1回答:1

我用某种打字稿写了二进制搜索算法,我想针对array.indexOf获得它的性能。我的结果表明打字稿版本较慢。我试图在网络上的可用基准测试中评估性能,结果表明二进制搜索要快得多(应该如此)。这段代码/打字稿/我试图获得功能性能的方式出了什么问题?

我尝试过基准测试,结果看起来完全不同。 http://jsben.ch/VBjt0

下面的我的代码。

function binarySearch(
  sortedArray: number[],
  seekElement: number,
): number {
  let startIndex = 0;
  let endIndex: number = sortedArray.length - 1;
  while (startIndex <= endIndex) {
    const mid = startIndex + Math.floor((endIndex - startIndex) / 2);
    const guess = sortedArray[mid];
    if (guess === seekElement) {
      return mid;
    } else if (guess > seekElement) {
      endIndex = mid - 1;
    } else {
      startIndex = mid + 1;
    }
  }

  return -1;
}

const indexOfSearch = function(arr, element) {
  return arr.indexOf(element);
};

const testArray = [...Array(100000).keys()].map(x => x + 1);


console.time('binarySearch');
binarySearch(testArray, 4400) // binarySearch: 0.134ms
console.timeEnd('binarySearch');

console.time('indexOfSearch');
indexOfSearch(testArray, 4400) // indexOfSearch: 0.029ms
console.timeEnd('indexOfSearch');

我也尝试通过此util函数使用performance.now

import { performance } from 'perf_hooks';

export const getPerformance = (func: Function, ...params) => {
  const start = performance.now();

  func(params);

  const end = performance.now();

  console.log(`${func.name} took ${end - start} milliseconds to execute`);
}

但是结果甚至更糟。在相同的测试数组中,使用getPerformance函数进行二进制搜索需要11毫秒,而indexOf则需要0.003毫秒。它很奇怪,我不知道我在做什么错。感谢您的帮助

javascript typescript algorithm search
1个回答
0
投票
indexOf()

用二进制编写,称为“硬编码”函数的调用,该函数具有JavaScript的软接口。

probably it's also binary search

JavaScript开发人员并不愚蠢。您访问变量,通过OP代码和令牌以及所有虚拟沙箱的方式,永远无法达到光速(C)。

JavaScript关于性能的平均值,笔记本电脑尚未配备8GB内存。要做事更多的是要做事的简单性。如今,计算机比人类便宜。

如果您想对基准进行非常好的测试,请在WebAssembly中编写它,或使用C对其进行编译。但是,在花费时间的同时,请考虑以下事项:执行任务的能力远远不止几毫秒。

© www.soinside.com 2019 - 2024. All rights reserved.