ASP编程:分类算法要处理的成绩
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。处理|算法|成绩 在网站建立中,分类算法的使用十分的广泛。在设计一个电子商铺时,要触及到商品分类;在设计宣布体系时,要触及到栏目或频道分类;在设计软件下载如许的法式时,要触及到软件的分类;如斯等等。可以说,分类是一个很广泛的成绩。我经常面试一些法式员,并且我几近毫无破例地要问他们一些关于分类算法的成绩。上面的举几个我经常扣问的成绩。你以为你可以很轻松地回覆么^_^.
1、分类算法经常体现为树的暗示和遍历成绩。那末,请问:假如用数据库中的一个Table来表达树型分类,应当有几个字段?
2、若何疾速地从这个Table恢复出一棵树;
3、若何判别某个分类是不是是另外一个分类的子类;
4、若何查找某个分类的一切产物;
5、若何生成份类地点的途径。
6、若何新增分类;
在不限制分类的级数和每级分类的个数时,这些成绩并非可以轻松回覆的。本文试图处理这些成绩。
分类的数据布局
咱们晓得:分类的数据布局实践上是一棵树。在《数据布局》课程中,人人能够学过Tree的算法。因为在网站建立中咱们大批利用数据库,所以咱们将从Tree在数据库中的存储谈起。
为简化成绩,咱们假定每一个节点只需求保存Name这一个信息。咱们需求为每一个节点编号。编号的办法有良多种。在数据库中经常使用的就是主动编号。这在Access、SQLServer、Oracle中都是如许。假定编号字段为ID。为了暗示某个节点ID1是别的一个节点ID2的父节点,咱们需求在数据库中再保存一个字段,申明这个分类是属于哪一个节点的儿子。把这个字段取名为FatherID。如这里的ID2,其FatherID就是ID1。如许,咱们就失掉了分类Catalog的数据表界说:
CreateTable(
NOTNULL,
(50)NOTNULL,
NOTNULL
);
商定:咱们商定用-1作为最下面一层分类的父亲编码。编号为-1的分类。这是一个虚拟的分类。它在数据库中没有纪录。
若何恢复出一棵树
下面的Catalog界说的最大优势,就在于用它可以轻松地恢复出一棵树―分类树。为了更清晰地展现算法,咱们先思索一个复杂的成绩:如何显示某个分类的下一级分类。咱们晓得,要查询某个分类FID的下一级分类,SQL语句十分复杂:
selectNamefromcatalogwhereFatherID=FID
显示这些种别时,咱们复杂地用<LI>来做到:
<%
REMoConn---数据库毗连,挪用GetChildren时已翻开
REMFID-----以后分类的编号
FunctionGetChildren(oConn,FID)
strSQL="selectID,NamefromcatalogwhereFatherID="&FID
setrsCatalog=oConn.Execute(strSQL)
%>
<UL>
<%
DowhilenotrsCatalog.Eof
%>
<LI><%=rsCatalog("Name")%>
<%
Loop
%>
</UL>
<%
rsCatalog.Close
EndFunction
%>
如今咱们来看看若何显示FID下的一切分类。这需求用到递归算法。咱们只需求在GetChildren函数中复杂地对一切ID停止挪用:GetChildren(oConn,Catalog(“ID”))就能够了。
<%
REMoConn---数据库毗连,已翻开
REMFID-----以后分类的编号
FunctionGetChildren(oConn,FID)
strSQL="selectNamefromcatalogwhereFatherID="&FID
setrsCatalog=oConn.Execute(strSQL)
%>
<UL>
<%
DowhilenotrsCatalog.Eof
%>
<LI><%=rsCatalog("Name")%><%=GetChildren(oConn,Catalog("ID"))%>
<%
Loop
%>
</UL>
<%
rsCatalog.Close
EndFunction
%>
修正后的GetChildren就能够完成显示FID分类的一切子分类的义务。要显示一切的分类,只需求如斯挪用就能够了:
<%
REMstrConn--毗连数据库的字符串,请依据情形修正
setoConn=Server.CreateObject("ADODB.Connection")
oConn.OpenstrConn
GetChildren(oConn,-1)
oConn.Close
%>
若何查找某个分类的一切产物;
如今来处理咱们在后面提出的第四个成绩。第三个成绩留作习题。咱们假定产物的数据表以下界说:
CreateTableProduct(
NOTNULL,
NOTNULL,
NOTNULL
);
个中,ID是产物的编号,Name是产物的称号,而FatherID是产物所属的分类。
对第四个成绩,很轻易想到的举措是:先找到这个分类FID的一切子类,然后查询一切子类下的一切产物。完成这个算法实践上很庞杂。代码大致以下:
<%
FunctionGetAllID(oConn,FID)
DimstrTemp
IfFID=-1then
strTemp=""
else
strTemp=","
endif
strSQL="selectNamefromcatalogwhereFatherID="&FID
setrsCatalog=oConn.Execute(strSQL)
DowhilenotrsCatalog.Eof
strTemp=strTemp&rsCatalog("ID")&GetAllID(oConn,Catalog("ID"))REM递归挪用
Loop
rsCatalog.Close
GetAllID=strTemp
EndFunction
REMstrConn--毗连数据库的字符串,请依据情形修正
setoConn=Server.CreateObject("ADODB.Connection")
oConn.OpenstrConn
FID=Request.QueryString("FID")
strSQL="selecttop100*fromProductwhereFatherIDin("&GetAllID(oConn,FID)&")"
setrsProduct=oConn.Execute(strSQL)
%>
<UL><%
DowhilenotrsProduct.EOF
%>
<LI><%=rsProduct("Name")%>
<%
Loop
%>
</UL>
<%rsProduct.Close
oConn.Close
%>
这个算法有良多弱点。试罗列几个以下:
1、因为咱们需求查询FID下的一切分类,当分类十分多时,算法将十分地不经济,并且,因为要机关一个很大的strSQL,试想假如有1000个分类,这个strSQL将很大,可否履行就是一个成绩。
2、咱们晓得,在SQL中利用In子句的效力长短常低的。这个算法不成防止地要利用In子句,效力很低。
我发明80%以上的法式员宠爱如许的算法,并在良多体系中大批地利用。仔细的法式员会发明他们写出了很慢的法式,但苦于找不到缘由。他们重复地反省SQL的履行效力,进步机械的层次,但效力的增添很少。
最基本的成绩就出在这个算法自己。算法定了,可以再优化的时机就不多了。咱们上面来引见一种算法,效力将是下面算法的10倍以上。优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。 以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。 完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助: ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
页:
[1]