我正在研究遗传算法项目,我用二进制字符串编码我的染色体,每个32位代表一个值.问题是我正在优化的函数有超过3000个参数,这意味着我的位字符串中有超过96000位,而我对此进行的操作只是为了减慢...
我进行了如下操作:我有一个二进制类,我正在创建一个表示我的大二进制字符串的布尔数组.然后我用各种移动和移动等操纵这个二进制字符串.
我的问题是,有更好的方法吗?速度只是杀戮.我敢肯定,如果我只在一个字符串上执行此操作会很好,但我必须对超过1000代的25位字符串进行操作.
我要做的就是后退一步.您的分析似乎与实现细节紧密相关,即您选择bool []作为代表一串位的方式.
清除布尔变量和数组的心灵,使一个完整的你实际上需要执行,它们发生的频率操作的列表,以及他们如何快速是.理想情况下,请考虑您的速度要求是平均速度还是最差情况速度.(有许多数据结构通过对每千个廉价操作进行一次昂贵的操作来获得高平均速度;如果有任何昂贵的操作是不可接受的,那么你需要事先了解它.)
获得该列表后,您就可以研究哪些数据结构运行良好.
例如,假设您的操作列表是:
只考虑那个操作列表,我认为你想要的数据结构是一个可连接的双端队列.可接合的deques支持在任一端快速插入,并且可以有效地分解成两个deques.然后轻松地将东西插入双端队列中间:打破双端,将项目插入一半的末尾,然后再将它们连接起来.
但是,如果您再对问题添加另一个操作,例如,"在90000位序列中的任何位置搜索特定位字符串,并在子线性时间内找到结果 ",那么只有一个可连接的双端队列不会这样做.搜索双端队列很慢.还有其他数据结构支持该操作.