首页 > 编程知识 正文

python 差集,php是一种什么类型的语言

时间:2023-05-04 01:21:45 阅读:42528 作者:1544

主题如下。 给出两个各自有5000个元素的数组,计算他们的差集---简言之,用PHP和你认为最好的算法实现array_diff的算法。 第一次接到这个主题,我意识到这非常简单。 因此,根据至今为止的经验,“随便”写了一个:

水平。

functionarray_diff($array_1,$array_2) {

$diff=array (;

Foreach($Array_1as$k=$V1 ) {

$flag=false;

Foreach($Array_2as$V2 ) {

if($flag=) $v1==$v2 ) }{

布雷克;

}

}

if (! $flag

$diff[$k]=$v1;

}

}

返回$ diff;

}

虽然可以实现,但我们发现这个函数的效率很悲惨。 于是我重新考虑了一下,优化了算法。 第二个函数看起来是这样的:

functionarray_diff($array_1,$array_2) {

Foreach($Array_1as$key=$item ) {

if(in_array($item,$array_2,true ) ) }

unset($Array_1) $key );

}

}

返回$ array _ 1;

}

嗯,这次几乎和原array_diff函数的速度相当。 但是有更优化的方法吗? 从ChinaUnix的文章(对不起,我作弊了)中,我发现PHP可以这样写。

functionarray_diff($array_1,$array_2) {

$array_2=array_flip($array_2);

Foreach($Array_1as$key=$item ) {

if(isset($Array_2) $item () ) ) 0

unset($Array_1) $key );

}

}

返回$ array _ 1;

}

此函数的效率非常惊人,比原始array_diff函数快。 理由是,我找到了说明:

密钥是HASH组织的,所以搜索很快;

另一方面,Value只是由Key组织存储,本身没有索引,每次查找时都会进行扫描。 总结

这是PHP语言的一个小技巧,但是在遍历和比较数组值时,如果需要比较值,则与键进行反转比比较通常的值和值要高效得多。

举例来说,以上函数2需要调用in_array函数,其必须循环地确定函数中是否存在,而函数3可以仅确定该数组中是否存在该键。 很明显,加上数组键和值不同的组织索引方式,效率比想象的要高。

function microtime_float

list($usec,$sec )=explode ) ',microtime );

返回((浮动) $sec ) )浮动) $sec );

}

functionarray_diff2($array_1,$array_2) {

$diff=array (;

Foreach($Array_1as$k=$V1 ) {

$flag=false;

Foreach($Array_2as$V2 ) {

if($flag=) $v1==$v2 ) }{

布雷克;

}

}

if (! $flag

$diff[$k]=$v1;

}

}

返回$ diff;

}

functionarray_diff3($array_1,$array_2) {

Foreach($Array_1as$key=$item ) {

if(in_array($item,$array_2,true ) ) }

unset($Array_1) $key );

}

}

返回$ array _ 1;

}

functionarray_diff4($array_1,$array_2) {

$array_2=array_flip($array_2);

Foreach($Array_1as$key=$item ) {

if(isset($Array_2) $item () ) ) 0

unset($Array_1) $key );

}

}

返回$ array _ 1;

}

//

for($I=0,$ary_1=array ); $i 5000; $i ) {

$ ary _1[ ]=rand (100,999 );

}

for($I=0,$ary_2=array ); $i 5000; $i ) {

$ ary _2[ ]=rand (100,999 );

}

header (内容类型:文本/平面; charset=utf-8 ';

$time_start=microtime_float (;

array_diff($Ary_1,$ary_2);

echo '函数array_diff执行'.(microtime_float ) (- $time_start ). ' 秒(n );

$time_start=microtime_float (;

array_diff2($Ary_1,$ary_2);

echo '函数array_diff2执行'.(microtime_float ) (- $time_start ). ' 秒(n );

$time_start=microtime_float (;

array_diff3(Ary_1,$ary_2);

echo '函数array_diff3执行'.(microtime_float ) (- $time_start ). ' 秒(n );

$time_start=microtime_float (;

array_diff4($Ary_1,$ary_2);

echo '函数array_diff4执行'.(microtime_float ) (- $time_start ). ' 秒(n );

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。