仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2817|回复: 19
打印 上一主题 下一主题

[学习教程] ASP编程:分类算法要处理的成绩

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
#
发表于 2015-2-16 00:24:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。处理|算法|成绩   在网站建立中,分类算法的使用十分的广泛。在设计一个电子商铺时,要触及到商品分类;在设计宣布体系时,要触及到栏目或频道分类;在设计软件下载如许的法式时,要触及到软件的分类;如斯等等。可以说,分类是一个很广泛的成绩。

我经常面试一些法式员,并且我几近毫无破例地要问他们一些关于分类算法的成绩。上面的举几个我经常扣问的成绩。你以为你可以很轻松地回覆么^_^.

1、分类算法经常体现为树的暗示和遍历成绩。那末,请问:假如用数据库中的一个Table来表达树型分类,应当有几个字段?
2、若何疾速地从这个Table恢复出一棵树;
3、若何判别某个分类是不是是另外一个分类的子类;
4、若何查找某个分类的一切产物;
5、若何生成份类地点的途径。
6、若何新增分类;

在不限制分类的级数和每级分类的个数时,这些成绩并非可以轻松回覆的。本文试图处理这些成绩。

分类的数据布局

咱们晓得:分类的数据布局实践上是一棵树。在《数据布局》课程中,人人能够学过Tree的算法。因为在网站建立中咱们大批利用数据库,所以咱们将从Tree在数据库中的存储谈起。

为简化成绩,咱们假定每一个节点只需求保存Name这一个信息。咱们需求为每一个节点编号。编号的办法有良多种。在数据库中经常使用的就是主动编号。这在Access、SQLServer、Oracle中都是如许。假定编号字段为ID。为了暗示某个节点ID1是别的一个节点ID2的父节点,咱们需求在数据库中再保存一个字段,申明这个分类是属于哪一个节点的儿子。把这个字段取名为FatherID。如这里的ID2,其FatherID就是ID1。如许,咱们就失掉了分类Catalog的数据表界说:

CreateTable[Catalog](
[ID][int]NOTNULL,
[Name][nvarchar](50)NOTNULL,
[FatherID][int]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(
[ID][int]NOTNULL,
[Name][nvchar]NOTNULL,
[FatherID][int]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能做到,例如银行安全控件
乐观 该用户已被删除
19#
发表于 2015-7-14 00:08:22 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
只想知道 该用户已被删除
18#
发表于 2015-7-10 09:08:50 | 只看该作者
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
简单生活 该用户已被删除
17#
发表于 2015-6-13 21:46:17 | 只看该作者
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
谁可相欹 该用户已被删除
16#
发表于 2015-4-30 11:46:15 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
15#
发表于 2015-4-27 20:24:14 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
活着的死人 该用户已被删除
14#
发表于 2015-4-26 08:10:13 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-4-24 17:48:18 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
再现理想 该用户已被删除
12#
发表于 2015-4-21 13:23:17 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
不帅 该用户已被删除
11#
发表于 2015-4-16 09:10:27 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
柔情似水 该用户已被删除
10#
发表于 2015-3-31 13:09:15 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
莫相离 该用户已被删除
9#
发表于 2015-3-31 04:36:28 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
分手快乐 该用户已被删除
8#
发表于 2015-3-20 23:32:25 | 只看该作者
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
老尸 该用户已被删除
7#
发表于 2015-3-17 11:54:52 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
飘灵儿 该用户已被删除
6#
发表于 2015-3-16 15:09:41 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
蒙在股里 该用户已被删除
5#
发表于 2015-3-13 06:09:24 | 只看该作者
ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
小魔女 该用户已被删除
地板
发表于 2015-3-11 05:08:04 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
爱飞 该用户已被删除
板凳
发表于 2015-3-6 11:07:20 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
第二个灵魂 该用户已被删除
沙发
发表于 2015-3-3 11:46:37 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
精灵巫婆 该用户已被删除
楼主
发表于 2015-2-16 00:50:33 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表