求一算法,看似简单的题目,做起来确很伤脑啊,求救
现要将数组a中的放入数组b中,但重复的数只能留一个,
如将1,2,1,4,2, 插入b后 变成 1,2,4, 大小顺序不要求~~
现要将数组a中的放入数组b中,但重复的数只能留一个,
如将1,2,1,4,2, 插入b后 变成 1,2,4, 大小顺序不要求~~
先个占个位置........
先对A排序,然后给B
B 输出..相同的就输出一个
不要用排序,
因为我的本意是搜了些网址,想去掉重复的网址,排序毫无意义的
我觉得.从开始往B里加. B已经有的不加.没有的加在最后.
和qhfu(崩溃) 的意思差不多.
同意楼上的说法。简单。
不要用排序,
因为我的本意是搜了些网址,想去掉重复的网址,排序毫无意义的
——————————————————————————————
排下序,判断一个网址是否已经在B数组中的效率会高很多的(网址越多效率越高),那里来的“毫无意义”
最好是,不要用数组,用hash表来存储
这样查找一个网址是否已经在B数组中的代价基本是常数,而且查找可以和插入同时完成
to Roaming_Sheep:
hash无法保证hash值相同字符串一定就相同,还是要进行一次字符串比较,不过hash可以用来加速定位
mark一下
呵呵,用stl一下子搞定
先转换成字符串,然后处理就可以了
to Roaming_Sheep:
hash无法保证hash值相同字符串一定就相同,还是要进行一次字符串比较,不过hash可以用来加速定位
__________________________________________________________________
我有说不用进行字符串比较吗?
to Roaming_Sheep(Roaming Sheep) :
我以为flying_dancing(小混混-_-) 说的排序是指对a大小的排序,网址哪来的大小~
另外,我的网址a是在类似数组的东西中的,它是通过正则表达式得来的,而b是在队列中的~,我用的语言是vb.net,用队列比较方便
昨天我自己做的有点钻牛角尖了~
:)
我以为flying_dancing(小混混-_-) 说的排序是指对a大小的排序,网址哪来的大小~
————————————————————————————————————————
字典序
另外,我的网址a是在类似数组的东西中的,它是通过正则表达式得来的,而b是在队列中的~,我用的语言是vb.net,用队列比较方便
————————————————————————————————————————
要方便也行啊,对A中每个网址遍历B来检查该网址是否在B中就行了
关键就是有多少条网址了,不多的话速度也能接受
mark
mark
呵呵,网址很多啊,我是在做获取链接啊,搜索网页的功能
可以用hash函数(hash表),存在的就不加了,实现应该简单吧
一个数组,然后一个线性hash函数进行散列
排序是为了提高效率,排序后可以应用一些泛型算法,例如unique_copy等
CString temp,itemp,jtemp;
int a[10],b[10],i,j;
for(i=0;i<10;i++)
a[i]=rand()%10+1;
j=0;
for(i=0;i<10;i++)
{
itemp.Format("*%d*",a[i]);
if(temp.Find(itemp)==-1)
{
b[j++]=a[i];
jtemp.Format("*%d*",a[i]);
temp+=jtemp;
}
}
b[j]='\0';
AfxMessageBox(temp);
呵呵,网址很多啊,我是在做获取链接啊,搜索网页的功能
————————————————————————————
这样说的话,你最好还是用hash……
否则B中的url很多的情况下,判断一个url是否在其中所花的时间会远远超出你想象的
构造一个最小堆吧,肯定比排序好
看来是个不小的问题啊。赫赫,我一开始还觉得很简单的,但是看看别人的建议后我觉得我还是不说了。
就up一下好了。
Echone902(阿莫)
不要用排序,
因为我的本意是搜了些网址,想去掉重复的网址,排序毫无意义的
不排序,来搜索重复的话,速度很慢
你们都说排序,怎么排字典序???按字母大小排??
主要是我没时间搞那么多的研究了,毕设要交了,我想先实现这功能再说,优化的事有时间剩再高高~~
不排序就hash,要排序就用字典序,用多重的动态二叉排序树,这样对于例如第一关键字相同的,第二关键字不同的元素,又可以继续对第二关键字动态排序,查找就是nlogn。虽然比不上hash,但不用处理冲突。
路过学习
把a[n]里的数insert到一个set里,就可以把重复的过滤掉了,而且是排好顺序的...
然后再放回b[n]里。