(3)算法综合实践——搜索引擎
搜索引擎:在搜索引擎分类部分我们提到过全文搜索引擎从网站提取信息建立网页数据库的概念。搜索引擎的自动信息搜集功能分两种。一种是定期搜索,即每隔一段时间(比如Google一般是28天),搜索引擎主动派出“蜘蛛”程序,对一定IP地址范围内的互联网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库。
引擎原理:
(1)索引数据库的规模继续增大,一般的商业搜索引擎都保持在几千万甚至 上亿个网页。
(2)除了一般意义上的搜索以外,开始出现主题搜索和地域搜索。很多小型的垂直门户站点开始使用该技术。
(3)由于搜索返回数据量过大,检索结果相关度评价成为研究的焦点。相关的研究又可以分为两类:一类是对超文本链的分析,在这方面Stanford大学的Google系统和IBM的Clever系统作出了很大的贡献;另一类是用户信息的反馈,Direct Hit系统采用的就是这种方法。
(4)开始使用自动分类技术。Northern Light和Inktomi的Directory,Engine都在一定程度上使用了该技术。
(4)经典算法面试题——把一个有序整数数组放到二叉树
代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
struct TreeNode
{
int m_nValue;
TreeNode *m_pLeft;
TreeNode *m_pRight;
};
//把一个有序整数数组放到二叉树
void RecurCreateTree(int *p, int length, TreeNode *&pHead)
{
if (length > 0)
{
pHead = new TreeNode;
int mid = length/2;
pHead->m_nValue = p[mid];
pHead->m_pLeft = NULL;
pHead->m_pRight = NULL;
RecurCreateTree(p, mid, pHead->m_pLeft);
RecurCreateTree(p + mid + 1, length - mid - 1, pHead->m_pRight);;
}
else
{
pHead = NULL;
}
}
//中序递归遍历
void MidRecurTraversal(TreeNode* pHead)
{
if (NULL != pHead)
{
MidRecurTraversal(pHead->m_pLeft);
cout<<pHead->m_nValue<<" ";
MidRecurTraversal(pHead->m_pRight);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12};
TreeNode *pHead = NULL;
RecurCreateTree(arr, sizeof(arr)/sizeof(arr[0]), pHead);
MidRecurTraversal(pHead);
cout<<endl;
return 0;
}