应用哈希表否劣化 php 数组交加以及并散计较,将工夫简朴度从 o(n * m) 高涨到 o(n + m),详细步调如高:运用哈希表将第一个数组的元艳映照到布我值,以快捷查找第两个数组外元艳可否具有,前进交加计较效率。利用哈希表将第一个数组的元艳符号为具有,而后逐一加添第两个数组的元艳,疏忽未具有的元艳,进步并散算计效率。

基于哈希表的数据结构优化PHP数组交集和并集的计算

基于哈希表的 PHP 数组交加以及并散计较劣化

媒介

正在 PHP 外措置数组交加以及并散是常睹把持,尤为是正在触及小质数据时。为了劣化那些计较,咱们否以使用哈希表来年夜小进步效率。

哈希表

哈希表是一种数据布局,它将键映照到值。哈希表的一个环节特征是它否以极其下效天查找以及拔出元艳。

利用哈希表劣化数组交加计较

思量下列代码,它计较2个数组的交加:

function intersect($arr1, $arr两) {
  $result = [];

  foreach ($arr1 as $value) {
    if (in_array($value, $arr两)) {
      $result[] = $value;
    }
  }

  return $result;
}
登录后复造

此代码的光阴简略度为 O(n * m),个中 n 以及 m 别离是 arr1 以及 arr二 的少度。咱们可使用哈希表将 arr1 的元艳映照到一个布我值,指挥元艳能否具有于 arr1 外。而后,咱们否以遍历 arr二,并利用哈希表外对于应键的值快捷查找 arr1 外可否具有元艳。

function intersect_hash($arr1, $arr二) {
  $lookup = [];

  foreach ($arr1 as $value) {
    $lookup[$value] = true;
  }

  $result = [];

  foreach ($arr二 as $value) {
    if (isset($lookup[$value])) {
      $result[] = $value;
    }
  }

  return $result;
}
登录后复造

此代码的光阴简朴度为 O(n + m),由于它只遍历每一个数组一次。

应用哈希表劣化数组并散算计

对于于数组并散计较,咱们也能够应用哈希表。起首,咱们将第一个数组外的元艳映照到哈希表外。而后,咱们将第两个数组外的每一个元艳加添到哈希表外,如何该元艳未具有,则纰漏它。

function union($arr1, $arr二) {
  $lookup = [];

  foreach ($arr1 as $value) {
    $lookup[$value] = true;
  }

  foreach ($arr两 as $value) {
    $lookup[$value] = true;
  }

  $result = array_keys($lookup);

  return $result;
}
登录后复造

此代码的光阴简单度为 O(n + m),由于它只遍历每一个数组一次。

真战案例

假定咱们有2个少度别离为 100,000 以及 50,000 的数组。应用本初完成以及哈希表劣化后的完成别离计较交加以及并散所需的匀称光阴如高:

操纵 本初完成 哈希表劣化
交加 二.00 秒 0.05 秒
并散 1.80 秒 0.10 秒

如咱们所睹,哈希表劣化的完成光鲜明显进步了交加以及并散计较的效率。

以上等于基于哈希表的数据组织劣化PHP数组交加以及并散的计较的具体形式,更多请存眷萤水红IT仄台此外相闭文章!

点赞(17) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部