php 使用下降,PHP 中巧用数组降低程序的时间复杂度

用数组来优化算法

主要思路 :在所需数据中存在相对简单且数据量稳定的情况下,利用 PHP 数组 (Array) 的下标 (Index) 可以为字符串 (String) 的特点,巧妙的将数据临时存放到数组中。这样可以通过下标 (Index) 快速获取所需值,从而降低对数据库的查询次数,进而降低算法的时间复杂度。

[方法 3 ]从 Classes 表中获取 ClassID 和 ClassName 的对应关系存放到 ClassArray 一维数组中,从 Students 表中获取 SID 和 StuName 以及 ClassID 的对应关系存放到 StuArray 二维数组中。之后从 Scores 表中找出满足条件的学生学号,从 StuArray 数组中读取学生的姓名和班级编号,从 ClassArray 中读取班级的名称。PHP 算法描述如下:

清单 3. 方法 3

$ClassArray = Array();

$StuArray = Array();

$classstr = "select ClassID,ClassName from Classes";

$classdata = $db2handle->query( $classstr);

while( $class=$classdata ->fetchRow(DB_FETCHMODE_ASSOC) ){

// 生成 ClassArray 数组,下标 Index 以 ClassID 命名,对应的值为 ClassName

$ClassArray[$class[ ' ClassID ' ]] = $class[ ' ClassName ' ];

}//end while $ClassArray

$stustr="select SID,StuName,ClassID from Students";

$studata = $db2handle->query( $stustr);

while( $stu=$studata ->fetchRow(DB_FETCHMODE_ASSOC) ){

// 生成 StuArray 数组,下标 Index 以 SID 命名,对应的值为 StuName 和 ClassID

$StuArray[$stu [ ' SID ' ]][ ' StuName ' ] = $stu[ ' StuName ' ];

$StuArray[$stu [ ' SID ' ]][ ' ClassID ' ] = $stu[ ' ClassID ' ];

}//end while $StuArray

$scorestr = "select distinct SID from Scores where Course= '数学' and Score>90";

$scoredata = $db2handle->query( $scorestr );

// 从数据库中获取满足条件的学生学号

while( $score=$scoredata->fetchRow(DB_FETCHMODE_ASSOC) ){

// 读取学生的学号,并从 StuArray 中读取学生的姓名,从 ClassArray 中读取班级名称

echo "StudentName=".$StuArray[ $score[ ' SID ' ] ][ ' StuName']."\t ";

echo "ClassName=".$ClassArray[ $StuArray[ $score[ ' SID ' ] ][ ' ClassID ' ] ]."\n";

}//end while for getting each student ' s ID. Done

改进后方法的时间复杂度仍为 T(n)=O(1)。和方法 1 相比,方法 3 不必担心因某一个表中的记录增加而引起的数据库查询代价的成倍增加。和方法 2 相比,时间复杂度降低的同时,也没有影响算法空间复杂度。可谓一举两得。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值