当前位置:文档之家› 排序树与文件索引结构

排序树与文件索引结构


• HTTP服务器中的路径重映射特征
Hu Junfeng
47
自动提取所关注领域的网页
• 我觉得可以由用户提供一个关键词名单,每个关 键词有一定分值,网页文本中若出现此关键词就 得到相应的分数;总分高的网页优先显示。 • 问题:
– – – – 关键词名单如何确定? 关键词分值如何确定? 如何规避文本内容与所包含的词不一致的问题? 预习:网站上 “倒排表与向量空间模型” 内容。
半,第i次比较可能涉及的元素<=2i -1。 • 二分法检索的最大检索长度为:log2(n+1) • 算法复杂度:log2(n)
Hu Junfeng
9
Hash的思想:一种高效的词典结构
• 将数据集合中的所有对象都唯一对应到一个关键 值,然后通过关键值映射到一个表中(哈希表) 进行存放,之后可以根据关键值实现迅速查找。 • 其他实现方案: 插入速度 – 顺序表 – 链表 检索速度
Hu Junfeng
49
– 如果相等,则检索成功;
– 当扫描结束时,还未找到关键码等于给定值的元素,则检索失败。 – 顺序检索算法适用于非排序顺序存储或非关键码字段检索
• 顺序检索的算法复杂度为O(n),平均比较次数为n/2。
Hu Junfeng
6
字典的二分查找



二分查找(binary search)
要求:
查找表为有序表,即表中 结点按关键字有序排列,并且采用顺序存储结构。
网页为节点 网页中的HyperLink为有向边 Hu CrawlJunfeng 图遍历, right? ==
35
链接是哪些?
Hu Junfeng
36
Refer to HTML 4.01 Specification
Hu Junfeng
37
GET Method in HTTP
Refer to RFC 2616
sscanf()
Hu Junfeng
32
sscanf()
Hu Junfeng
33
网络爬虫:
• 网络爬虫是什么? • 怎样爬?
– 整体框架 – 核心算法 – 算法改进
Hu Junfeng
34
怎样搜集?
<href …>
<href …>
<href …>
<href …> <href …> <href …> <href …>
Hu Junfeng
10
Hash表的问题:空间冗余,多对一(碰撞)
• 确定性问题:关键码分布已知。
– 编码-解码
• 非确定性问题:关键码分布未知且理论上编码空 间巨大。(vs 实际问题规模)
Hu Junfeng
11
Hu Junfeng
12
样例数据:33/40
关键码?Value?
Hu Junfeng
13
文件直接存取(Random File Access)
… File* fp; file stream
– fseek(fileName, offset, origin)
Hu Junfeng
14
文件直接存取函数
• rewind() resets the current position to the start of the file
ADT Dictionary
operations Dictionary createEmptyDictionary ( void ) //创建一个空字典。 int search(Dictionary dic, KeyType key, Position p) //在字典dic中检索关键码为key的记录的位置p。 int insert(Dictionary dic, DicElement ele) //在字典dic中插入记录ele。* int delete(Dictionary dic, KeyType key) //在字典dic中删除关键码为key的记录。 *
– rewind(inFile)
• fseek() allows the programmer to move to any position in the file
– fseek(fileName, offset, origin)
– Origin: SEEK_SET, SEEK_CUR, and SEEK_END
HTTP Made Really Easy
Hu Junfeng
38
Agenda
• 网络爬虫是什么? • 怎样爬?
– – – – 预备知识 整体框架 核心算法 算法改进
• Distributed Crawling
Hu Junfeng
39
网络爬虫是什么? 系统框图
Hu Junfeng
40
Hu Junfeng
一般思路:
• 号码类 • 字符串类
Hu Junfeng
26
Hash的用途
• 词典索引 • 用来判重和统计数目
Hu Junfeng
27
字符串处理:
Hu Junfeng
28
sscanf()
Hu Junfeng
29
sscanf()
Hu Junfeng
30ห้องสมุดไป่ตู้
sscanf()
Hu Junfeng
31
排序树与文件索引结构
2010/05/06
Hu Junfeng
本讲主要内容:
• • • • • • Hash表(续) Web Crawler 正则表达式 倒排表与倒排索引 排序树与AVL树 文件的索引结构
Hu Junfeng
2
字典的基本概念
字典是一个由数据记录(record)构成的顺序表, 其中记录中有一个特殊的字段,称为关键码。每条 记录都有唯一的不重复的关键码取值。 字典中的元素之间能够根据其关键码进行比较与排 序,对字典元素的插入、删除和检索等操作一般也 以关键码为依据进行。 字典可以看成是由关键码值k到数据记录r的一个对 应。唯一的关键码取值可以唯一对应一条数据记录。
end ADT Dictionary
Dictionary表示抽象数据类型字典, DicElement 表示字典元素类型, KeyType 表示元素中关键码的类型, Position 表示字典中元素的位置。
5
Hu Junfeng
字典的顺序检索
• 字典中的元素可以是无序的,但为了实现的方便,可以把字典 中的元素按关键码值排序。 • 从字典的一端开始顺序扫描,将字典中元素的关键码和给定值 比较:
Hu Junfeng
44
URL不唯一性
• 不同url指向的同一个网页
–IP地址和域名之间的多对多关系
• 大规模网站用于负载平衡的技术:内容镜像 • “virtual hosting”和“Proxy pass”:不同的主 机名映射到同一个IP地址,发布多个逻辑网站的需 要(Apache支持)
• 动态网页的参数
17
Hu Junfeng
18
Hu Junfeng
19
Hu Junfeng
20
Hu Junfeng
21
如何处理文件中数据记录的删除?
Hu Junfeng
22
碰撞及解决方案:
Hu Junfeng
23
00820060 刘艳敏
Hu Junfeng
24
对hash函数的疑问:
• 以下是我对hash函数的理解。首先要尽可能的不发生碰撞,同时也要 尽可能避免开很大的空间,所以我们要找一个很巧妙的函数,对吧? • 那么对于一个已知的输入数据,我们可以分析它的特点,然后制定相 应的函数。比如作业题1中给出的那个解决方案,作者考虑到倒数第 三位和第一位很特殊,可以直接返回这个两位数。但是在加入了两组 捣乱的数据后,这个方案明显出了问题。 • 但我觉得这个因果关系有点颠倒了,如果我们已知了数据,hash函数 甚至可以直接用从小到大的对应的次序,这样根本不要费尽心机的找 一个函数出来。所以我觉得,一个好的函数,是不是应该在数据还未 知的情况下,就能有一定的把握,使碰撞次数很少。 • 如果这样想的话,就要要求这个函数尽可能散,随机的把数据投射到 另一个集合,但这样又似乎没法控制hash表的规模。而且保证随机( 或者说比较均匀的)也挺麻烦,就像课上说的,平方的话会使一些平 方数明显增多,等等。 • 然后我就困惑了,像这次的这个作业题,到底有没有一个比较厉害的 Hu Junfeng 函数,能够应对几乎所有的捣乱数据? 25
• ftell() returns the offset value of the next character that will be read or written
– ftell(inFile);
Hu Junfeng
15
Hu Junfeng
16
Hash函数设计:
• 观察法:
Hu Junfeng
• Session id • 上一页/下一页
Hu Junfeng
45
“同义”地址
• 域名与IP对应存在4种情况:
– 一对一,一对多,多对一,多对多。一对一不会造成 重复搜集,
• 后三种情况都有可能造成重复搜集。
– 可能是虚拟主机,多个域名共一个IP,内容不同
• , -> 162.105.129.12
46
server traps
• 防止系统异常
–病态HTML文件
• 例如,有的网页含有68 kB null字符
–误导Crawler的网站
• 用CGI程序产生无限个网页 • 用软目录创建的很深的路径
–/Flyfactory/hatchline/hatchline/hat chline/flyfactory/flyfactory/flyfactory/flyfactory/flyfactory /flyfactory/flyfactory/flyfactory/hatchline
相关主题