两组字符串做比较的问题(求最佳算法)

_131_ 2002-02-19 09:06:15
现有两组字符串,每一组的字符串个数不定,且各组中的每个字符串的长度也不定,且每组字符串中的字符串是无序排列。
例如字符串A中有如下字符串ab-123,cd-231,erq-475,tep-987......等,字符串B中有如下字符串ab-123,po-163,erq-475,iqw-812......等。现要求通过比较,将存在于字符串B中但是不存在于字符串A中的字符串取出。
以上各组字符串的最大个数<=4000,请给出最佳算法。
原来考虑过使用数组比较,但是效率比较低下,用户意见比较大,因此考虑更改算法。
...全文
105 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hanson_bati_zhu 2002-02-24
  • 打赏
  • 举报
回复
8-(
来晚了

帮主的办法是最简单的
ideage 2002-02-23
  • 打赏
  • 举报
回复
再看看
qiyao 2002-02-20
  • 打赏
  • 举报
回复
高手们,帮帮我啦!!!
http://www.csdn.net/expert/topic/533/533679.xml
_131_ 2002-02-20
  • 打赏
  • 举报
回复
另,怎么方分?
_131_ 2002-02-20
  • 打赏
  • 举报
回复
结帐了!
谢谢各位的参与!
Kanfu 2002-02-19
  • 打赏
  • 举报
回复
先将A数组采用快速排序法排序(小于),然后用折半查找(小于4000*11次字符串比较)找出存在于B但不存在于A的串。
bjay 2002-02-19
  • 打赏
  • 举报
回复
那你就找本算法(或数据结构)的书,上面有字符串查找算法。
不是数学问题,是算法问题。
keani 2002-02-19
  • 打赏
  • 举报
回复
在数量很多的情况下,可以考虑这样的做法:首先,将第一个数组中的字符串以某个标准划分为n个小的数组,比如以开头字母为划分标准,第二个数组中的元素就不需要比较第一个数组中的每一个元素了,只需要比较第一个数组中的某一个小数组中的元素,这样效率会提高不少吧。划分标准应该是这种想法的关键所在了。
ideage 2002-02-19
  • 打赏
  • 举报
回复
不用数据库,只能用PB提供的函数。
也可以用扩展数据窗口,具体的办法是:
1.建立Data,Dir两列的扩展数据窗口
2.将每个字符串写入Data,A串的Dir列写A,B串的Dir列写B
3.利用SetSort排序Data,Dir,相同的排在一起
(也可以先删除全有的、在删Dir是A的)。
4.逐行判断Sort,Dir是否连续。不连续的取出

例:
Data Dir
ab-123 A
ab-123 B
bb-1s3 A
bc-133 A
bc-113 B
_131_ 2002-02-19
  • 打赏
  • 举报
回复
谢谢楼上二位!
现在的想法是不使用数据库,直接用纯数学的方法搞定!
望大家积极参与啊,分数不是问题!
xcwonder 2002-02-19
  • 打赏
  • 举报
回复
不是很明白,学习先
zhuzhichao 2002-02-19
  • 打赏
  • 举报
回复
該題有意思.
我的想法也是先將數組中的
所有字符串用逗號或一個特定的符號分格組成一個大字符串然後
根據該特定的符號寫到表中去.

然後用SQL語句中not exists來比較.
速度會很快.
zqllyh 2002-02-19
  • 打赏
  • 举报
回复
建议用临时表,利用POS(,‘,’)<> 0做循环。。。。
再把字串A、B分别生成两个表,
SELECT DISTINCT 字串 FROM B WHERE 字串 NOT IN (SELECT DISTINCT 字串 FROM A)
一句就搞定。并且放到存储过程去,肯定提高了很大的速度。

liulee 2002-02-19
  • 打赏
  • 举报
回复

我这个是最简单的算法,至于是否最优就未知了。
不过你可以和别的算法比较一下。


liulee 2002-02-19
  • 打赏
  • 举报
回复

这样吧:
1、你的这两个串集在生成时,考虑放到数据窗中(datastore)中;
2、两个Find函数搞定。

至于速度,就看pb的datastore的find有多快,你就有多快了。
查找前对datastore排序或许有些用场。
_131_ 2002-02-19
  • 打赏
  • 举报
回复
come on
_131_ 2002-02-19
  • 打赏
  • 举报
回复
我的qq:18052506
_131_ 2002-02-19
  • 打赏
  • 举报
回复
大家继续啊

401

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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