【发布时间】:2011-04-01 00:00:21
【问题描述】:
我正在做一个遗传算法项目,我将我的染色体编码成一个二进制字符串,其中每 32 位代表一个值。问题是我正在优化的函数有超过 3000 个参数,这意味着我的位串中有超过 96000 位,我对此进行的操作只是为了减慢......
我进行了如下操作:我有一个二进制类,我正在创建一个布尔数组,它代表我的大二进制字符串。然后我用各种移位和移动等操作这个二进制字符串。
我的问题是,有没有更好的方法来做到这一点?速度简直要命。我敢肯定,如果我只对一个位字符串执行此操作会很好,但我必须对 25 位字符串进行超过 1000 代的操作。
【问题讨论】:
-
像这样以速度为关键的粗大、密集的操作可能会受益于非托管(本机)方法 - 例如一个 C++ 库。但是,对于这个问题,看到一些示例代码/数据/操作会很有好处。
-
二进制字符串是什么意思?您使用的是字节 [] 吗?还是一个 int[] 或一些类似的结构?如果是这样,这些操作,即使是 96k 位,也应该非常快。如果您实际上使用的是文本字符串,那显然是性能问题的根源。
-
我没有使用文本字符串,我使用的是 bool[] 数组。所以它确实应该很快。给出一个操作样本假设我有以下布尔数组:{a,b,c,d,e,f,g,h,i} (其中所有字母都是真或假)然后一个操作可能会做在布尔值 {x,y,z} 的 b 之后插入,这样我的数组现在看起来像 {a,b,x,y,z,c,d,e,f}。这需要很长的数组......
-
@Erik:您是否考虑过使用 SQL Server 做类似的事情?这是您正在执行的大量基于集合的操作,SQL Server 可能比您编写的任何程序代码都快很多。
-
@casperOne:我的程序和 SQL 服务器之间的通信不会造成巨大的瓶颈吗?