数据结构思维
文章平均质量分 94
Ragty_
人生の目的の一つは楽しむことです
展开
-
数据结构思维笔记(一)接口
1.为什么要有两种ListJava中List接口为ArrayList, LinkedList都继承于List.哪一个更适合于特定的应用程序,取决于它最常执行的操作.对于一些应用,LinkedList更快;对于其他应用,ArrayList更快.2.List接口public class ListClientExample { private List list; publi...原创 2019-04-10 18:51:44 · 240 阅读 · 0 评论 -
数据结构思维笔记(十七) 布尔搜索
接着上一节的内容,我们已经构建了一个爬取百度百科并持久化的爬虫。现在客户使用,我们需要构建一个搜索工具。1.信息检索这个项目的下一个阶段是实现一个搜索工具。我们需要的部分包括:一个界面,其中用户可以提供检索词并查看结果。一种查找机制,它接收每个检索词并返回包含它的页面。用于组合来自多个检索词的搜索结果的机制。对搜索结果打分和排序的算法。2.布尔搜索大多数搜索引擎可以执行“布尔...原创 2019-05-31 22:30:58 · 1062 阅读 · 0 评论 -
数据结构思维笔记(十六)爬取百度百科
1.基于Redis的索引器在我的解决方案中,我们在 Redis 中存储两种结构:对于每个检索词,我们有一个URLSet,它是一个 Redis 集合,包含检索词的 URL。对于每个网址,我们有一个TermCounter,这是一个 Redis 哈希表,将每个检索词映射到它出现的次数。在JedisIndex中,我提供了一个方法,它可以接受一个检索词并返回 Redis 中它的URLSet的键:...原创 2019-05-16 08:46:32 · 573 阅读 · 0 评论 -
数据结构思维笔记(十五)持久化
第十五章 持久化现在我们回顾一下搜索引擎的构建:抓取:我们需要一个程序,可以下载一个网页,解析它,并提取文本和任何其他页面的链接。索引:我们需要一个索引,可以查找检索项并找到包含它的页面。检索:我们需要一种方法,从索引中收集结果,并识别与检索项最相关的页面。抓取和索引我们之前都处理过,但是还不够好,我们现在先处理索引,存在Redis里持久化并排序,最后再处理检索功能。1.Redi...原创 2019-05-10 14:43:58 · 225 阅读 · 0 评论 -
数据结构思维笔记(十二)HashMap
上一章中,我们写了一个使用哈希的Map接口的实现。我们期望这个版本更快,因为它搜索的列表较短,但增长顺序仍然是线性的(k太小,而且是固定的)。如果存在n个条目和k个子映射,则子映射的大小平均为n/k,这仍然与n成正比。但是,如果我们与n一起增加k,我们可以限制n/k的大小。例如,假设每次n超过k的时候,我们都使k加倍;在这种情况下,每个映射的条目的平均数量将小于1,并且几乎总是小于10,只要散...原创 2019-04-24 10:29:48 · 276 阅读 · 0 评论 -
数据结构思维笔记(十四)二叉搜索树
本章继续承接上章的内容,具体实现TreeMap中的方1.简单的TreeMap这里比较核心的一个方法是findNode,用来寻找与键值相当的节点,下面是它的实现: private Node findNode(Object target) { if (target == null) { throw new IllegalArgumentException...原创 2019-04-28 09:52:03 · 286 阅读 · 0 评论 -
数据结构思维笔记(十一)哈希
在本章中,我定义了一个比MyLinearMap更好的Map接口实现,MyBetterMap,并引入哈希,这使得MyBetterMap效率更高。1.哈希为了提高MyLinearMap的性能,我们将编写一个新的类,它被称为MyBetterMap,它包含MyLinearMap对象的集合。它在内嵌的映射之间划分键,因此每个映射中的条目数量更小,这加快了findEntry,以及依赖于它的方法的速度...原创 2019-04-23 15:10:42 · 222 阅读 · 0 评论 -
数据结构思维笔记(七) 树的遍历
本章将介绍一个 Web 搜索引擎,我们将在本书其余部分开发它。我描述了搜索引擎的元素,并介绍了第一个应用程序,一个从维基百科下载和解析页面的 Web 爬行器。本章还介绍了深度优先搜索的递归实现,以及迭代实现,它使用 Java Deque实现“后入先出”的栈。1.搜索引擎网络搜索引擎,像谷歌搜索或 Bing,接受一组“检索项”,并返回一个网页列表,它们和这些项相关。搜索引擎的基本组成部分是...原创 2019-04-15 15:46:38 · 464 阅读 · 0 评论 -
数据结构思维笔记(十三)TreeMap
这一章展示了二叉搜索树,它是个Map接口的高效实现。如果我们想让元素有序,它非常实用。1.哈希的不足HashMap被广泛使用,但并不是唯一的Map实现。有几个原因可能需要另一个实现:哈希可能很慢,所以即使HashMap操作是常数时间,“常数”可能很大。 如果哈希函数将键均匀分配给子映射,效果很好。但设计良好的散列函数并不容易,如果太多的键在相同的子映射上,那么HashMap的性能可能...原创 2019-04-26 16:44:58 · 396 阅读 · 0 评论 -
数据结构思维笔记(十)Map接口
在接下来的几个练习中,我介绍了Map接口的几个实现。其中一个基于哈希表,这可以说是所发明的最神奇的数据结构。另一个是类似的TreeMap,不是很神奇,但它有附加功能,它可以按顺序迭代元素。我们从一个Map开始,它使用键值对的List实现。1.实现MyLinearMap简单来说,就是继承Map,放入List中,来看下初始结构public class MyLinearMap<K, ...原创 2019-04-22 15:09:08 · 250 阅读 · 0 评论 -
数据结构思维笔记(九)索引器
目前,我们构建了一个基本的 Web 爬虫;我们下一步将是索引。在网页搜索的上下文中,索引是一种数据结构,可以查找检索词并找到该词出现的页面。此外,我们想知道每个页面上显示检索词的次数,这将有助于确定与该词最相关的页面。例如,如果用户提交检索词“Java”和“编程”,我们将查找两个检索词并获得两组页面。带有“Java”的页面将包括 Java 岛屿,咖啡昵称以及编程语言的网页。具有“编程”一词的页...原创 2019-04-20 17:53:03 · 309 阅读 · 0 评论 -
数据结构思维笔记(八)到达哲学
本章的目标是开发一个Web爬虫,同时验证之前提到的 到达哲学1.起步首先介绍本章中帮你起步的代码:WikiNodeExample.java包含前一章的代码,展示了 DOM 树中深度优先搜索(DFS)的递归和迭代实现。WikiNodeIterable.java包含Iterable类,用于遍历 DOM 树。我将在下一节中解释这段代码。WikiFetcher.java包含一个工具类,使用...原创 2019-04-16 14:29:05 · 259 阅读 · 0 评论 -
数据结构思维笔记(六)双链表
1.双链表数据结构List和Deque接口的双链表实现。[…] 所有的操作都能像双向列表那样执行。索引该列表中的操作将从头或者尾遍历列表,使用更接近指定索引的那个。每个节点包含下一个节点的链接和上一个节点的链接。LinkedList对象包含指向列表的第一个和最后一个元素的链接。所以我们可以从列表的任意一端开始,并以任意方向遍历它。因此,我们可以在常数时间内,在列表的头部和末尾添加和...原创 2019-04-12 09:05:35 · 230 阅读 · 0 评论 -
数据结构思维笔记(五)性能分析
对于下一个练习,我提供了一个Profiler类,它包含代码,使用一系列问题规模运行方法,测量运行时间和绘制结果。你将使用Profiler,为 Java 的实现ArrayList和LinkedList,划分add方法的性能。Profiler.java包含上述Profiler类的实现。你会使用这个类,但你不必知道它如何工作。但可以随时阅读源码。ProfileListAdd.java包含此练...原创 2019-04-11 09:42:04 · 625 阅读 · 0 评论 -
数据结构思维笔记(四)LinkedList
1.链式数据结构在链表中,每个节点包含列表中下一个节点的引用. 其它的链表结构包括树和图,其中节点可以包含多个其它节点的引用。简单的节点Demopublic class ListNode { public Object node; public ListNode next; //init Node public ListNode() { ...原创 2019-04-11 09:40:35 · 226 阅读 · 0 评论 -
数据结构思维笔记(三)ArrayList
1.Add方法单参方法(分析它的时间复杂度)@Override public boolean add(T element) { //make a bigger array and copy over the elements if (size >= array.length) { T[] bigger = new Objec...原创 2019-04-11 09:38:35 · 331 阅读 · 0 评论 -
数据结构思维笔记(二) 算法分析
1.简单算法分类常数时间O(1):不依赖于输入线性O(n):依赖于输入,并跟输入量大小成正比平方O(n^2 ):随着n的增长变为n^22.简单排序public class SelectionSort { /** * Swaps the elements at indexes i and j. */ public static void swapE...原创 2019-04-10 18:58:02 · 167 阅读 · 0 评论