找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: wowan1314

[研讨] 对于面域两两求交集的代码进行优化。

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-28 16:42:17 | 显示全部楼层
wowan1314 发表于 2013-5-28 16:27
多谢指导。。 待会好好学习。

我现在把求差集用下面的函数替代。发现速度极快,原来5s现在变成1s了。
...

ACAD肯定不会因为是25个以上就死了,肯定还是选择集的问题,就是我说的是不是有重复的UNION了,你在做UNION的时候,其实这个实体已经没了,因为之前已经和其他实体UNION了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 17:06:26 | 显示全部楼层
newer 发表于 2013-5-28 16:42
ACAD肯定不会因为是25个以上就死了,肯定还是选择集的问题,就是我说的是不是有重复的UNION了,你在做UNI ...

感谢指导!

迷糊中,传给UNION的是个选择集呀。 而SSADD建的选择集是没有重复图元的选择集呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-28 17:19:53 | 显示全部楼层
wowan1314 发表于 2013-5-28 17:06
感谢指导!

迷糊中,传给UNION的是个选择集呀。 而SSADD建的选择集是没有重复图元的选择集呀

你的代码:
while (ss1.......ssn){    1
    while (ss1....ssn)      2
}

两两求UNION,是不是循环第一次 取 第一个实体, 和 2里面选择集每个都UNION下 ? 1里面第二个实体尼,应该是和2里面第二个之后的做所有操作, 第二层循环,就不要从第一个实体开始了,因为第一个实体已经和 1里面的第一个实体运算过了。

我是粗略看下你的代码,感觉你二重循环那可能有重复的操作。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-28 17:28:23 | 显示全部楼层
wowan1314 发表于 2013-5-28 14:55
48就能测出来了,何必那么多。那么多的话就等着卡死算了。

你点评我,我没法回复你那个点评啊。

entpair好就换上它,用它主要是 外面循环到倒数第二个实体后,只和 选择集的最后一个实体操作一次。到N夸张,但肯定比N*N要少很多,N*LOGN吧。

主张你这样建表,主要是可以不用REPEAT,WHERE函数构造循环体了,可以都利用高效的MAPCAR处理表。你没注意吗,用entpair返回的表,你根本就没循环,一个MAPCAR 就处理了那些了。把2层循环,变成了1层的MAPCAR。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3255个

财富等级: 富可敌国

发表于 2013-5-28 17:51:29 | 显示全部楼层
高手过招,学习了:lol:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 17:58:13 | 显示全部楼层
newer 发表于 2013-5-28 17:28
你点评我,我没法回复你那个点评啊。

entpair好就换上它,用它主要是 外面循环到倒数第二个实体后,只 ...

1、两两求UNION, lst与lst1 。  lst中1与lst1中2之后的求。每求完一次,lst与lst1均CDR一次。
    测了下只多计算1次。
2、如果使用entpair。确实是可以少套用一层MAPCAR。确实是个好办法。感谢提供。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-28 18:08:59 | 显示全部楼层
1、两两求UNION, lst与lst1 。  lst中1与lst1中2之后的求。每求完一次,lst与lst1均CDR一次。
    测了下只多计算1次。


最主要的,是,你的CDR 什么的,都在循环结构里面做,你说过,循环结构尽可能减少代码,确实,多行代码,10万次循环就多10万次指令。

你把他们都改成 mapcar 做,程序里面不要体现while,repeat, 去掉ssname这些。 代码应该更快的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 18:15:50 | 显示全部楼层
本帖最后由 wowan1314 于 2013-5-28 18:17 编辑
newer 发表于 2013-5-28 18:08
最主要的,是,你的CDR 什么的,都在循环结构里面做,你说过,循环结构尽可能减少代码,确实,多行代码 ...

是的。用mapcar处理表  确实可以省去很多条件式的代码。
另外这个的程序改为VL求交集后。总是异常错误。求差集不会异常错误,求交集就会出现错误。这真奇怪了。

等明天再来研究。 下班先。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 21:21:22 | 显示全部楼层
newer 发表于 2013-5-28 17:28
你点评我,我没法回复你那个点评啊。

entpair好就换上它,用它主要是 外面循环到倒数第二个实体后,只 ...

entpair函数我怎么想不通怎么利用他两两求交集!?
有劳做个示范!可好?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-28 22:17:42 | 显示全部楼层
本帖最后由 newer 于 2013-5-28 22:21 编辑
wowan1314 发表于 2013-5-28 21:21
entpair函数我怎么想不通怎么利用他两两求交集!?
有劳做个示范!可好?

entPair表里面不是

((实体1 实体2 实体3.... 实体n)(实体2 实体3 .... 实体n)....(实体n-1 实体n)(实体n)) 这样的结构吗? 这个结构是把你的两重循环需要处理的实体,用一个表结构给列出来了。

因为第一个表 你操作过 e1 e2, 那个第二个表里面 就把 e1排除了,不用在计算  e2 e1. 第二个表从 e2 e3开始计算。这样就避免重复计算了。

你mapcar  对每个表 处理啊

  1. (mapcar '(lambda(x) (union ....)) entpair)


自己写下那个union, 或许你重建下那个entpair, 思路一样,找你要处理的放到表里面。没仔细看你的代码,如果你想这些实体都是园的前提下,每个都互相操作,就是我写的那个,如果还有条件,再加入下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 22:57:41 | 显示全部楼层
newer 发表于 2013-5-28 22:17
entPair表里面不是

((实体1 实体2 实体3.... 实体n)(实体2 实体3 .... 实体n)....(实体n-1 实体n)(实 ...

是的,要的就是两两求交集!
只是对entpair进行mapcar的时候!它里面还是个表结构!那么写union的时候我觉的还得用mapcar!结果还是套了一次!但是可以省略mapcar内的cdr.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-29 00:23:05 | 显示全部楼层
好,学习的好地方,不要又说俺灌水咯{:soso_e113:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-29 00:43:57 | 显示全部楼层
wowan1314 发表于 2013-5-28 22:57
是的,要的就是两两求交集!
只是对entpair进行mapcar的时候!它里面还是个表结构!那么写union的时候我 ...

是的,里面还一个mapcar,但也要很快的,忘记了?10万实体是0.01秒级别的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-29 01:09:42 | 显示全部楼层
newer 发表于 2013-5-29 00:43
是的,里面还一个mapcar,但也要很快的,忘记了?10万实体是0.01秒级别的。

那确实!mapcar级别还是很高的!
entpair也是个好函数!确实可以对我的两层mapcar代码再优化!
刚看到此函数时候还以为可以把两层变一层呢!呵呵。贪心了点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-29 01:15:57 | 显示全部楼层
wowan1314 发表于 2013-5-29 01:09
那确实!mapcar级别还是很高的!
entpair也是个好函数!确实可以对我的两层mapcar代码再优化!
刚看到 ...

确实是把你的两层变一层了。

你还要做事啊,在一层里面,除非你什么都不做:)

做事的时候MAPCAR是另算的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 04:49 , Processed in 0.194068 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表