简单问题, about set(100分)

  • 主题发起人 SuperMMX
  • 开始时间
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
想找出两个系列的整数中是否有重复的,没有顺序,
所以 set 是最好的选择,但现在的问题是 set 有
大小限制,最多只能有 256 个元素,所以声明的
时候:

a: set of 1..500; 就会出错,
我保证两个整数集的个数都不超过 256, 但最大数可以超过 256,
所以麻烦来了,
难道除了 set 没有什么好的办法了吗?用数组可以,觉得有点慢。
看大家有什么好的想法??

另:谁知道 delphi 的 set 的操作是怎么实现的,
in + * - 等等, 是否也是一个一个判断?
 
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
大家看看呀。
 
W

wjiachun

Unregistered / Unconfirmed
GUEST, unregistred user!
集合 的操作 + - * in 都是一个一个判断的(Pascal老师语)
因为它是无序的

用数组如果觉得小可以多用几个数组啊
 
I

iie

Unregistered / Unconfirmed
GUEST, unregistred user!
set 的元素必须是byte基类,也就是不可以大于255
你可以对你的元素集合编码,映射过去
 
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
to iie:
我的虽然个数不足 256, 但却都有用,比如求交集什么的,映射会
减小范围,

to wjiachun:
最终肯定要一个一个判断,我的意思是数组与 set 的哪个效率好点。

to all:
不想用数组,(可能无解,//sigh)
 
C

cch_b

Unregistered / Unconfirmed
GUEST, unregistred user!
好像在DELPHI中对SET的操作是通过位操作来判断的,老早以前看的一本
外国佬的书上说的。用SET效率更高, 但SET的限制也是很清楚的
 
I

iie

Unregistered / Unconfirmed
GUEST, unregistred user!
一定要用set?
考虑动态编码吧,建一个表array [0..255] of integer
每次加入元素之前,先查表取得其编码,再将序号加入集合
实质上就是序号在进行集合操作
 
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数字可是都要用的,比方说 1..500 都不能缺,

我也想了一些办法,都觉得不合适,数组,毫无疑问,是行的,
我觉得有点慢(虽然不考虑速度, 但程序中总出现 for 不好)
现在就是要 set 的简单操作,要像 set 那么简单就好了
当然, 做函数用数组是没问题的,总觉得不好。
 
K

Kang

Unregistered / Unconfirmed
GUEST, unregistred user!
金无足赤,用不太完美的方法吧,解决问题是目的
 
I

iie

Unregistered / Unconfirmed
GUEST, unregistred user!
速度取决于元素个数,set只所以快,就是因为元素少,
这是个鱼和熊掌的问题
如果你愿意听一个10多年前就在8086上用过turbo pascal的人的经验的话
我可以告诉你,同样的问题,用数组和集合分别解决
结果是显示用set的效率不如自己写代码实现
我的感觉是你的应用集合刚好是256个元素的时候,用set比较合适
 
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
//sigh 用数组吧,
 
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部