摘要:
智能Web算法(美)玛若曼尼斯(Marmanis, H.),(美)巴宾寇(Babenko, D.)著阿稳,陈钢译ISBN 978-7-121-13919-22011 年7 月出版定 价:65.00 元16开400页内 容 简 介本书涵盖了五类重要的智能算法:搜索、推荐、聚类、分类和分类器组合,并结合具体的案例讨论了它们在Web 应用中的角色及要注意的问题。除了第1 章的概要性介绍以及第7 章对所有技术的整合应用外,第2~6 章以代码示例的形式分别对这五类算法进行了介绍。本书面向的是广大普通读者,特别是对算法感兴趣的工程师与学生,所以对于读者的知识背景并没有过多的要求。本书中的例子和思想应用广泛 阅读全文
摘要:
算法评测算法评测——复杂度记法刚才说过,线性查找的计算量为O(n),二分查找的复杂度为O(log n)。大多情况下,算法的复杂度可以这样定量评测。算法评测一般使用复杂度记法(Order记法)。复杂度记法表示的含义是,当算法的输入大小为n时,大致需要这么多的计算量。花费时间与n的大小无关,能在固定时间内完成的处理,其复杂度为O(1)。例如从散列中查找数据,虽然要计算散列函数,但散列函数计算不依赖于n,所以复杂度为O(1)。而散列搜索中,给定键的值(几乎)是唯一的,因此通过键搜索值的处理也是O(1)(也依赖于具体实现)。因此,散列搜索整体复杂度为O(1)[1]。如前所见,线性查找要从开头开始查找, 阅读全文
摘要:
算法和数据结构算法和数据结构——千丝万缕的联系纵观各种算法书籍,大多都是将算法和数据结构作为一个整体来讲述。数据结构就是数组、树结构等存储或表现对象数据的结构。将算法和数据结构作为整体讲述,是因为必须依照算法中的常用操作选择数据结构。例如,事先将数据保存在适当的树形结构中,大多数情况下搜索会变得很简单,可以降低复杂度。第11课中已经看到,RDBMS的索引的实现采用了B+树这种树结构。B+树是个空间上适合外部存储的树结构。利用B+树保存索引,不仅能减少查找所需的操作步骤,还能将磁盘读取次数降至最低。因此,RDBMS的索引一般采用B+树,同时使用适合该数据结构的算法进行查找、插入、排序等操作。所以 阅读全文
摘要:
什么是关键字链接?什么是关键字链接?博客服务Hatena Diary(http://d.hatena.ne.jp/)支持关键字链接,这是个很特别的功能。该功能在前面的图5.3(p.112)的关键字链接截图中已介绍过。如图5.3所示,写博客时部分关键字会自动加上链接,链接目标就是该关键字的解释页面。Wiki的实现也能给Wiki关键字自动加链接,这个功能与它很相似。被链接的关键字就是用户在Hatena Keyword(http://k. hatena.ne.jp/)上添加的关键字。本书执笔时(2009年8月),Hatena Keyword已有27万条以上关键字,用户每天创建的新关键字大约有100个 阅读全文
摘要:
何谓算法之前反复说过,要处理的数据越大,算法和数据结构的选择对速度的影响也就越大。首先看个简单的例子。假设要从数据中使用线性查找(Linear Search),从头开始依次查找所需数据,那么如果有1000条数据,那就需要反复查找数据直至找到为止,这个算法最多要进行1000次查找。对于n条数据要进行n次搜索,因此称为O(n)算法。而“二分查找”(binary search)算法能在log n次之内查找n条数据,是O(log n)算法。使用二分查找,1000条数据最多只需10次就能查找完。这个“最大查找次数”可以大致判断计算次数,称为复杂度。一般来说,复杂度越低,算法就越快。n=1000时,O(n 阅读全文
摘要:
--大规模Web服务开发技术[日]伊藤直也, 田中慎司编著李剑译ISBN 978-7-121-13884-3 2011年7月出版定价:59.00元16开356页内 容 简 介Hatena是日本最大的Web 服务提供商之一,它提供的服务包括关键字(类似于维基百科)、博客、相册等。本书的内容主要来自Hatena为学生们举行的暑期实习的课程,内容涵盖广泛,介绍了性能优化、分布式、算法、系统架构等各个方面,甚至还介绍了硬件的经济成本,是运维工程师们必不可少的参考书。书中还包括几个算法实习课题,介绍了压缩算法、全文搜索等算法的实现方法,对于打算靠Web创业的人不失为一本很不错的参考书。译者序去年8 月份 阅读全文
摘要:
什么是依赖,什么是抽象1.关于依赖和耦合:从小国寡民到和谐社会在老子的“小国寡民”论中,提出了一种理想的社会状态:邻国相望,鸡犬之声相闻,民至老死,不相往来。这是他老人家的一种社会理想,老死不相往来的人群呈现了一片和谐景象。因为不发生瓜葛,也就无所谓关联,进而无法导致冲突。这是先祖哲学中的至纯哲理,但理想的大同总是和现实的生态有着或多或少的差距,人类社会无法避免联系的发生,所以小国寡民的理想成为一种美丽的梦想,不可实现。同样的道理,映射到软件“社会”中,也就是软件系统结构中,也预示着不同的层次、模块、类型之间也必然存在着或多或少的联系,这种联系不可避免但可管理。正如人类社会虽然无法实现小国寡民 阅读全文
摘要:
关于抽象和具体什么是抽象呢?首先不必澄清什么是抽象,而从什么算抽象说起,稳定的、高层的就代表了抽象。就像一个公司,最好保证了高层的稳定,才能保证全局的发展。在进行系统设计时,稳定的抽象接口和高层逻辑,也代表了整个系统的稳定与柔性。兵熊熊一窝,将良良一窝,软件的构建也正如打仗,良好的设计都是自上而下的。而对具体的编程实践而言,接口和抽象类则代表了语言层次的抽象。追溯概念的分析,一一过招,首先来看依赖于具体,如图3-3所示。因此,为了分离这种紧耦合,最好的办法就是隔离,引入中间层来分离变化,同时确保中间层本身的稳定性,因此抽象的中间层是最佳的选择(如图3-4所示)。 以例而理,从最常见的服务端逻辑 阅读全文
摘要:
模式的起点¡工厂方法(FactoryMethod Pattern)模式起点:将程序中创建对象的操作单独进行处理,大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式。典型应用:工厂方法模式是最简单也最容易理解的模式之一。其关注的核心是对于对象创建这件事儿的分离。¡单例(SingletonPattern)模式起点:一个类只有一个实例,且提供一个访问全局点的方式,更加灵活地保证了实例的创建和访问约束,并且唯一约束的实施由类本身实现。典型应用:一个类只有一个实例,经常被应用于Façade模式,称为单例外观。¡命令(CommandP 阅读全文
摘要:
好代码、坏代码之四9.扩展无处不在扩展性是衡量一个软件产品的重要尺度之一。通过合适的设计为软件系统赋予一定程度的扩展,是架构师着手设计的重要考虑因素,如图3-16所示。扩展是个大课题,涉及软件系统的方方面面,依赖于粒度不同的架构格局。举例来说,数据库设计可以考虑在横向或纵向的扩展、在多层架构中实现可适配的数据层、为业务层实现注入逻辑设计、在UI层提供可配置的界面选择以及为物理架构提供横向扩展的部署设计。实现基于服务的系统,就意味着在服务层支持扩展良好的高层架构;而一个面向接口的设计,将是为扩展提供可能的选择之一;采用ASP.NET MVC构建的Web系统,将在很多方面被赋予扩展的标签,基于管线 阅读全文