一种效率极高的分类算法(转--非常好,帮助很大对于想做好asp的朋友)

算法

分类算法要解决的问题
在网站建设中,分类算法的应用非常的普遍。在设计一个电子商店时,要涉及到商品分类;在设计发布系统时,要涉及到栏目或者频道分类;在设计软件下载这样的程序时,要涉及到软件的分类;如此等等。可以说,分类是一个很普遍的问题。

我常常面试一些程序员,而且我几乎毫无例外地要问他们一些关于分类算法的问题。下面的举几个我常常询问的问题。你认为你可以很轻松地回答么^_^.

1、分类算法常常表现为树的表示和遍历问题。那么,请问:如果用数据库中的一个Table来表达树型分类,应该有几个字段?
2、如何快速地从这个Table恢复出一棵树;
3、如何判断某个分类是否是另一个分类的子类;
4、如何查找某个分类的所有产品;
5、如何生成分类所在的路径。
6、如何新增分类;

在不限制分类的级数和每级分类的个数时,这些问题并不是可以轻松回答的。本文试图解决这些问题。

分类的数据结构
我们知道:分类的数据结构实际上是一棵树。在《数据结构》课程中,大家可能学过Tree的算法。由于在网站建设中我们大量使用数据库,所以我们将从Tree在数据库中的存储谈起。

为简化问题,我们假设每个节点只需要保留Name这一个信息。我们需要为每个节点编号。编号的方法有很多种。在数据库中常用的就是自动编号。这在Access、SQL Server、Oracle中都是这样。假设编号字段为ID。

为了表示某个节点ID1是另外一个节点ID2的父节点,我们需要在数据库中再保留一个字段,说明这个分类是属于哪个节点的儿子。把这个字段取名为FatherID。如这里的ID2,其FatherID就是ID1。

这样,我们就得到了分类Catalog的数据表定义:

Create Table [Catalog](

        [ID] [int]  NOT NULL,

        [Name] [nvarchar](50) NOT NULL,

        [FatherID]  [int] NOT NULL

);

约定:我们约定用-1作为最上面一层分类的父亲编码。编号为-1的分类。这是一个虚拟的分类。它在数据库中没有记录。

如何恢复出一棵树
上面的Catalog定义的最大优势,就在于用它可以轻松地恢复出一棵树—分类树。为了更清楚地展示算法,我们先考虑一个简单的问题:怎样显示某个分类的下一级分类。我们知道,要查询某个分类FID的下一级分类,SQL语句非常简单:

select Name from catalog where FatherID=FID

显示这些类别时,我们简单地用<LI>来做到:

    

<%

REM oConn---数据库连接,调用GetChildren时已经打开

REM FID-----当前分类的编号

Function GetChildren(oConn,FID)

                 strSQL = "select ID,Name from catalog where FatherID="&FID

                 set rsCatalog = oConn.Execute(strSQL)

%>

                 <UL>

<%

                 Do while not rsCatalog.Eof       

%>

                 <LI><%=rsCatalog("Name")%>

<%

                 Loop

%>

                 </UL>

<%           

                 rsCatalog.Close

End Function

%>

现在我们来看看如何显示FID下的所有分类。这需要用到递归算法。我们只需要在GetChildren函数中简单地对所有ID进行调用:GetChildren(oConn,Catalog(“ID”))就可以了。

<%

REM oConn---数据库连接,已经打开

REM FID-----当前分类的编号

Function GetChildren(oConn,FID)

                 strSQL = "select Name from catalog where FatherID="&FID

                 set rsCatalog = oConn.Execute(strSQL)

%>

                 <UL>

<%

                 Do while not rsCatalog.Eof       

%>

                                     <LI><%=rsCatalog("Name")%>

                                <%=GetChildren(oConn,Catalog("ID"))%>

            

<%

                 Loop

%>

时间: 2024-12-26 21:29:14

一种效率极高的分类算法(转--非常好,帮助很大对于想做好asp的朋友)的相关文章

介绍一种效率极高的分类算法

算法 在网站建设中,分类算法的应用非常的普遍.在设计一个电子商店时,要涉及到商品分类:在设计发布系统时,要涉及到栏目或者频道分类:在设计软件下载这样的程序时,要涉及到软件的分类:如此等等.可以说,分类是一个很普遍的问题. 我常常面试一些程序员,而且我几乎毫无例外地要问他们一些关于分类算法的问题.下面的举几个我常常询问的问题.你认为你可以很轻松地回答么^_^.1. 分类算法常常表现为树的表示和遍历问题.那么,请问:如果用数据库中的一个Table来表达树型分类,应该有几个字段?2. 如何快速地从这个

一种效率极高的分类算法

算法 分类算法要解决的问题在网站建设中,分类算法的应用非常的普遍.在设计一个电子商店时,要涉及到商品分类:在设计发布系统时,要涉及到栏目或者频道分类:在设计软件下载这样的程序时,要涉及到软件的分类:如此等等.可以说,分类是一个很普遍的问题. 我常常面试一些程序员,而且我几乎毫无例外地要问他们一些关于分类算法的问题.下面的举几个我常常询问的问题.你认为你可以很轻松地回答么^_^. 1.分类算法常常表现为树的表示和遍历问题.那么,请问:如果用数据库中的一个Table来表达树型分类,应该有几个字段?2

分类算法之决策树(Decision tree)

3.1.摘要       在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法.这两种算法都以贝叶斯定理为基础,可以对分类及决策问题进行概率推断.在这一篇文章中,将讨论另一种被广泛使用的分类算法--决策树(decision tree).相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用. 3.2.决策树引导       通俗来说,决策树分类的思想类似于找对象.现想象一个女孩的母亲要给这个女孩介绍男朋友,

对象-Dbhelper save 和 update哪一个效率更高

问题描述 Dbhelper save 和 update哪一个效率更高 public void updateUser(int id, int time, String password) throws Exception { // 根据用户id查询用户 User user = getUser(id); // time==1,需要更新系统时间 if (time == 1) { user.setLast_vist_time(DateUtil.formatDate(new Date())); ; } /

《大数据算法》一1.2 大数据算法

1.2 大数据算法 这一节我们概述大数据算法. 1.2.1 大数据上求解问题的过程 首先我们看一看在大数据上问题求解的过程.我们面对的是一个计算问题,也就是说我们要用计算机来处理一个问题. 拿到一个计算问题之后,首先需要判定这个问题是否可以用计算机进行计算,如果学习过可计算性理论,就可以了解有许多问题计算机是无法计算的,比如判断一个程序是否有死循环,或者是否存在能够杀所有病毒的软件,这些问题都是计算机解决不了的.从"可计算"的角度来看,大数据上的判定问题和普通的判定问题是一样的,也就是

专家称高铁发展将对航空和高速公路冲击很大

3月30日下午消息,土木工程学会秘书长张雁今日在北京的一个发布会上表示,高铁的发展除了对航空冲击很大外,也会对高速公路发展有所影响. "2010中国国际轨道交通技术展览会"(CRTS China 2010)将于2010年11月18-20日在北京举办. 上海市土木工程学会秘书长傅德明表示,在国家大力支持轨道交通国产化的背景下,此次展览会还将就轨道交通的运营和安全等,展开研讨会.据介绍,此次展览会的内容包括专业技术展览会.战略性国际峰会.企业技术交流会.国内外学会与协会的年会活动. 傅德明

针对网站排名优化的算法在笔者这里更是曝光率极高的分析源

搜索引擎算法我们之前了解过很多,尤其是针对网站排名优化的算法在笔者这里更是曝光率极高的分析源.在众多的搜索引擎算法中,直接影响网站排名算法的当属投票算法. 投票算法是我们进行网站基础优化的关键,同时也是提升排名的后期优化的主要针对面.提到投票算法,我们首先想到的就是站内链接的布局投票以及站外链接的推荐投票,但是投票算法仅仅是局限于此吗!?显然是不全面的. 搜索引擎排名列表中会根据用户需求来对网站内的关键词.页面及用户推荐进行投票得分,以此来提高网站排名. 第一,我们来了解一下网站关键词投票得分.

数据挖掘中分类算法小结

数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势的模型.分类方法(Classification)用于预测数据对象的离散类别(Categorical Label);预测方法(Prediction )用于预测数据对象的连续取值. 分类技术在很多领域都有应用,例如可以通过客户分类构造一个分类模型来对银行贷款进行风险评估;当前的市场营销中很重要的一个特点是强调客户细分.客户类别分析

分类算法总结

决策树分类算法 决策树归纳是经典的分类算法. 它采用自顶向下递归的各个击破方式构造决策树. 树的每一个结点上使用信息增益度量选择测试属性. 可以从生成的决策树中提取规则. KNN法(K-Nearest Neighbor): KNN法即K最近邻法,最初由Cover和Hart于1968年提出的,是一个理论上比较成熟的方法. 该方法的思路非常简单直观:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 该方法在定类决策上只依据最邻近的一个