大家来讨论下搜索算法吧.

chowming 2010-07-09 09:46:23
希望用此贴号召大家来讨论下搜索算法,共同探讨,共同学习,共同进步。

因为搜索算法很多,所以内容不限,但是能够满足以下几点最好。
1.常用的搜索算法
2.一些经典例子
3.自己的想法
4.最新动态
5...

回帖有分,此贴目的只在于大家共同学习,分享学习,达到共同进步。希望大家支持
...全文
163 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
acdbxzyw 2010-07-12
  • 打赏
  • 举报
回复

我还以为大家会谈些A星,遗传,蚁群之类的。。。
声明以上算法本人都不会,都没学进去,呵呵。
thegodofwar 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cattycat 的回复:]
搜索其实就是查找了,可以对数据先快速排序,然后二分查找。这是数据量比较小的情况。
还有stl的map可以用来查找,map是红黑树实现的,查找也能实现O(logN).
还可以用hash的办法,基于内容hash到具体某一项,很多大数据量中都用到这个,先对数据分块,然后hash等等。
再说说搜索引擎的搜索,建立倒排索引,索引对应的是索引文件中的记录。这个数据量很大了。
在数据库中,经常用是B+树……
[/Quote]
你的头像不是加菲呀?
starcat 2010-07-11
  • 打赏
  • 举报
回复
我很纠结现在C++ STL容器与迭代器的学习,倒是数据结构还有感觉一点!!
刚看了有序表插入排序
#include <iostream>
using namespace std;

class Link {
public:
double dData;
Link* pNext;
Link(double dd) : dData(dd), pNext(NULL) {}
void displayLink() {
cout << dData << " ";
}
};

class SortedList {
private:
Link* pFirst;
public:
SortedList() : pFirst(NULL) {}
~SortedList() {
Link* pCurrent = pFirst;
while(pCurrent != NULL) {
Link* pOldCur = pCurrent;
pCurrent = pCurrent->pNext;
delete pOldCur;
}
}
bool isEmpty() {
return (pFirst == NULL);
}
void insert(double key) {
Link* pNewLink = new Link(key);
Link* pPrevious = NULL;
Link* pCurrent = pFirst;

while(pCurrent != NULL && key > pCurrent->dData) {
pPrevious = pCurrent;
pCurrent = pCurrent->pNext;
}
if(pPrevious == NULL)
pFirst = pNewLink;
else
pPrevious->pNext = pNewLink;
pNewLink->pNext = pCurrent;
}
void remove() {
Link* pTemp = pFirst;
pFirst = pFirst->pNext;
delete pTemp;
}
void displayList() {
cout << "List (first-->last): ";
Link* pCurrent = pFirst;
while(pCurrent != NULL) {
pCurrent->displayLink();
pCurrent = pCurrent->pNext;
}
cout << endl;
}
};

int main() {
SortedList theSortedList;
theSortedList.insert(20);
theSortedList.insert(40);

theSortedList.displayList();

theSortedList.insert(10);
theSortedList.insert(30);
theSortedList.insert(50);

theSortedList.displayList();

theSortedList.remove();

theSortedList.displayList();
return 0;
}

maole413149 2010-07-11
  • 打赏
  • 举报
回复
高手给个归并和快速排序的小Demo。。。。
fengfengTev@qq.com
语言不限。3Q
cattycat 2010-07-11
  • 打赏
  • 举报
回复
搜索其实就是查找了,可以对数据先快速排序,然后二分查找。这是数据量比较小的情况。
还有stl的map可以用来查找,map是红黑树实现的,查找也能实现O(logN).
还可以用hash的办法,基于内容hash到具体某一项,很多大数据量中都用到这个,先对数据分块,然后hash等等。
再说说搜索引擎的搜索,建立倒排索引,索引对应的是索引文件中的记录。这个数据量很大了。
在数据库中,经常用是B+树,因为要频繁插入删除,这个相对来说还可以了。

ps,注意结贴率。
whbbo 2010-07-10
  • 打赏
  • 举报
回复
很困顿的是,拿到一个搜索题,不知道怎么应用算法。书上说深搜,广搜怎么样,理解还可以,拿到题就完全没头绪了。不知道大牛们肯否介绍下你们在这方面的应用心得,希不吝赐教,小弟不甚感激。
aiston 2010-07-10
  • 打赏
  • 举报
回复
这个需要关注下
canshui 2010-07-10
  • 打赏
  • 举报
回复
我很纠结现在数据结构的学习!!
一起加油吧……
pmars 2010-07-10
  • 打赏
  • 举报
回复
在学习希尔排序的时候,我弄错了,结果给里面的插入排序写成了冒泡排序……后来测试一下,速率还是蛮高的!

//希尔排序
void shellsort(int * array,int k)
{
int m=k;
while (m>1)
{
m=(m+1)/2;
for (int i=m;i<k;i++)
{
int temp=array[i];
int j=i;
while (j>=m&&temp<array[j-m])
{
array[j]=array[j-m];
j-=m;
}
array[j]=temp;
}
}
}


自己写错了的希尔,因为冒泡不一定就能对,但是排完之后已经基本有序了,所以最后用冒泡啊,用插入啊,都很快的!
void sort(int *array,int n)
{
int m=n,temp;
while ( m>1 )
{
m=(m+1)/2;
for ( int i=0; i+m<n; i++)
{
if ( array[i]>array[i+m] )
{
temp=array[i];
array[i]=array[i+m];
array[i+m]=temp;
}
}
}
bool b=1;
int i,j;
for (i=1;i<n&&b==1;++i)
{
b=0;
for (j=0;j<n-i;++j)
{
if (array[j]>array[j+1])
{
b=1;
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
hua_zhixing_ 2010-07-10
  • 打赏
  • 举报
回复
搜索算法估计就那几种了吧,一般的数据结构书上都有。
然后只能对于特定的情况进行相关算法的适应性改进吧?
huochai2008 2010-07-10
  • 打赏
  • 举报
回复
搜索需要的东西很多~要求有递归,动态规划,基本数据结构要运用的很熟练啊
qq120848369 2010-07-09
  • 打赏
  • 举报
回复
给搜索过程加上智慧的因素.

回帖有分,共同进步.

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧