说下算法的重要性。

uuq 2005-01-09 10:23:59
有用户说我以前做的页面打开太慢,我查出来是以前自已做一个树形下拉菜单拖慢的。
情况如下。
数据表有四个字段
artcleID,fatherID,artcleName,isSub
artcleID:是本表唯一字段ID
fatherID:是父类artcleID值.以前我想减少查数据次数据以没有让fatherID等于artcleID
isSub:是标记是否为子类,0表示为父类。1表示为子类
artcleName:是标题字符串
$sql="select artcleID,fatherID,artcleName,isSub from ppw_artcle where type='XXX' order by isSub asc";因为fatherID在父级为0,所以按这个值排序也没有什么作用
我自已也想懒得去改,但是还是发现了算法的有误,用了两个for循环,数据大时是直接耗时间的杀手。
经过我两三小时的改进,发现改进后速度N次方倍。
原来代码:
是这样
用while取得查询数据库数据组。
再用两个
for($i;$i<$total;$i++)
{
if($artcleArr[isSub]==0)
{
处理父类
for($j;$j<$total;$j++)
{
处理父级下子类
}
}
}
这些处理变成耗total*total个处理单位。
所以为影响时间。

...全文
389 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
是是非非 2005-01-21
  • 打赏
  • 举报
回复
帮定蹭分
uuq 2005-01-21
  • 打赏
  • 举报
回复
//如果是子类
if($bigIS[$row['fatherID']]=='')
{
//父类没有登录记过,创建一个新的父类
$bigTopic[$bigNum]['artcleID']='';
$bigTopic[$bigNum]['artcleName']='';
$bigTopic[$bigNum]['subNum']=0;
$bigTopic[$bigNum]['sub'][$bigTopic[$bigNum]['subNum']]['artcleID']=$row['artcleID'];
$bigTopic[$bigNum]['sub'][$bigTopic[$bigNum]['subNum']]['artcleName']=$row['artcleName'];
$bigIS[$row['fatherID']]=$bigNum;
/////////////////////////////////////////////////////////////////////////////
//修正一个小bug,如果子类排在父类前第一个子类会被复盖掉。
//加入下面一行
$bigTopic[$bigNum]['subNum']=1;
////////////////////////////////////////////////////////
$bigNum++;
zilong544 2005-01-13
  • 打赏
  • 举报
回复
想破了脑袋,提高了效率
riverking23 2005-01-13
  • 打赏
  • 举报
回复
都是高人啊,小弟在努力!!
neilxp 2005-01-13
  • 打赏
  • 举报
回复
我加到两个三角就够了
surfchen 2005-01-11
  • 打赏
  • 举报
回复
回复人:ashchen(陈辉) ( 一星(中级)) 信誉:120 2005-01-10 23:07:00 得分:0
?
隔段时间看看以前自己写的程序就觉得脸红。
=====================

same feel
Cain 2005-01-11
  • 打赏
  • 举报
回复
赞同 flyonet(人生如梦【★】梦如人生)

TO:jakey9826(无眠) 你做过测试吗?
程序猿之殇 2005-01-11
  • 打赏
  • 举报
回复
数据量大的时候放到数组里一样也慢呀,楼上的!
flyonet 2005-01-11
  • 打赏
  • 举报
回复
很多时候好像都喜欢读两次数据库,可为什么不一次读到数组中,然后利用数组来排列呢?
gaochao79 2005-01-11
  • 打赏
  • 举报
回复
唉,在看到这片文章之前总是以为现在的计算机已经够快了,只作网页的话不需要也无所谓,没想到……
多菜鸟 2005-01-11
  • 打赏
  • 举报
回复
好的算法可以少走很多的弯路,让代码更加的优美,精简。
DeltaCat 2005-01-11
  • 打赏
  • 举报
回复
l
fronm 2005-01-11
  • 打赏
  • 举报
回复
算法重要
uuq 2005-01-11
  • 打赏
  • 举报
回复
Meteorlet(Meteorlet) ( ) 信誉:104
那个也不错,
不错查出数据多了点
Meteorlet 2005-01-10
  • 打赏
  • 举报
回复
不错,但是看起来不简洁,为什么不用你以前的想法?用SQL语句看起来可能查询多了点但是数据库都是优化过的,但也不会很慢的,你可以试试:
$query = "Select p1.*, p2.* from ppw_article AS p1, ppw_article AS p2 ".
"Where p1.fatherID = p2.articleID AND p1.isSub=1 AND p2.isSub=0 ";
$res = mysql_query($query, $link);
while ($row = mysql_fetch_array($res))
{
$Topic[$row[p2.articleID]][$row[p1.articleID]][] = $row[p1.articleName];
$Topic[$row[p2.articleID]][$row[p1.articleID]][] = $row[p2.articleName];
}

比你写的至少看起来简洁,但是具体效率怎么样就不知道了
dxflingxing 2005-01-10
  • 打赏
  • 举报
回复
学习~~学习
ashchen 2005-01-10
  • 打赏
  • 举报
回复
隔段时间看看以前自己写的程序就觉得脸红。
小神.Chen 2005-01-10
  • 打赏
  • 举报
回复
接分!
allkill 2005-01-10
  • 打赏
  • 举报
回复
Good Good Study ! Day Day UP !
uuq 2005-01-10
  • 打赏
  • 举报
回复
复制到editPlus看下吧,
现在想想当时怎么做出来的。
看看都有点头晕。
可能结合前面那个算法,可以更加简单和更加快。
for($i=0;$i<$num;$i++)
{
if($row[$i][parentID]==$temp)
{
这里可以改成前面的算法思想,这样比较完美了.
发现看下以前写的程序也挺有意思的。
本人水平有限,希望高人也拿点出来分享下。
分数嘛,当然不会给太少
加载更多回复(15)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧