草庐IT

高效化

全部标签

c++ - 高效最长公共(public)子序列算法库?

我正在寻找一种用于C++程序的LCS算法的(空间)高效实现。输入是两个随机访问的整数序列。我目前正在使用关于LCS的维基百科页面中的动态编程方法。但是,这在内存和时间上有O(mn)的行为,并且在我身上死了,因为更大的输入会出现内存不足的错误。我已经阅读了Hirschberg的算法,它可以显着提高内存使用率,Hunt-Szymanski以及Masek和Paterson。由于实现这些并非易事,我更愿意使用现有实现在我的数据上尝试它们。有人知道这样的图书馆吗?我想既然文本差异工具很常见,应该有一些开源库吧? 最佳答案 在搜索此类内容时,请

performance - 用于线程消息的 MongoDB/Mongoose 模式(高效)

我对noSQL数据库有些陌生(不过我对关系数据库相当熟悉),我想知道使用线程消息处理收件箱系统的最有效方法是什么。每条“消息”都有一个发件人和收件人。用户之间接收/发送消息的数量会有很大差异。这个系统应该可以很好地扩展到超过1k的用户。我已经阅读了有关写/读时扇出的信息,但我不确定这对于线程消息的效果如何。由于我是MongoDB/NoSQL的新手,我不太习惯以这种方式有效地构建数据。我猜想会有嵌套对象以任何一种有效的方式来处理这个问题……但我无法确定一个对于2个用户之间的线程对话既高效又方便的设计。我想用一个由2个用户组成的数组存储数据,并结合一个“消息”对象数组。但接下来是2个用户的

performance - 用于线程消息的 MongoDB/Mongoose 模式(高效)

我对noSQL数据库有些陌生(不过我对关系数据库相当熟悉),我想知道使用线程消息处理收件箱系统的最有效方法是什么。每条“消息”都有一个发件人和收件人。用户之间接收/发送消息的数量会有很大差异。这个系统应该可以很好地扩展到超过1k的用户。我已经阅读了有关写/读时扇出的信息,但我不确定这对于线程消息的效果如何。由于我是MongoDB/NoSQL的新手,我不太习惯以这种方式有效地构建数据。我猜想会有嵌套对象以任何一种有效的方式来处理这个问题……但我无法确定一个对于2个用户之间的线程对话既高效又方便的设计。我想用一个由2个用户组成的数组存储数据,并结合一个“消息”对象数组。但接下来是2个用户的

c++ - 将天数转换为年数(包括闰年)的高效算法

问题我正在写一个用c++保存日期的类,我发现了以下问题:自引用日期(在我的例子中是公元0001年1月1日)以来,我有N天数,包括自引用日期以来经过的闰日。如何有效地将这个数字转换为年Y、月M和日D?我希望尽可能高效地执行此操作,因此最好的实现显然具有O(1)复杂度。接下来的部分将解释我已经学到的一些东西。闰年要确定一年是否是闰年,有一些规则:能被4整除的年份是闰年规则1的异常(exception):能被100整除的年份不是闰年规则2的异常(exception):能被400整除的年份是闰年这将转化为如下代码:boolIsLeapYear(intyear){//Correctedafter

c++ - 使用元编程的高效索引计算

给定一个形状为[A][B][C][D]的多维数组,但存储为长度为[A*B*C*的一维数组D]。我想使用模板元编程来简化索引计算。索引(a,b,c,d)应该在位置a*B*C*D+b*C*D+c*D+d我现在用#include#include#includetemplatestructprod_func{constexprinlinesize_toperator()(conststd::arrayarr)const{returnarr[start]*prod_func()(arr);}};templatestructprod_func{constexprinlinesize_toperat

c++ - 简单/高效的文本压缩

什么是最简单但有效的压缩算法?Deflate、lzma等不是有效选项。我需要编译非常小的东西,例如:RLE、LZX、Huffman等。注意:数据为95%ASCII文本编辑:目前数据约为20kb,但我预计它会增长到1mb编辑2:其他有趣的选择小号https://github.com/antirez/smaz快LZhttp://fastlz.org/ 最佳答案 听起来像LZO旨在满足您的要求:Decompressionissimpleandveryfast.Requiresnomemoryfordecompression.Compres

c++ - 最高效的高性能服务器套接字/线程设计

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭9年前。Improvethisquestion我正在构建一个性能极高的企业软件,它将每秒接收、处理和响应超过50,000个TCP请求。这将分布在许多AmazonEC2服务器上,但我希望单个服务器能够每秒处理尽可能多的请求(以5k/秒的速度拍摄)。我很可能会使用运行AmazonLinux的m1.xlarge实例。我正在使用BoostASIO用C++构建这个软件,并且我正在尝试找出构建套接字处理的最有效方法。在示例(http://www.boost.o

c++ - 高效布局和减少虚拟2D数据(抽象)

我使用C++和CUDA/C,想为特定问题编写代码,但遇到了一个非常棘手的简化问题。我在并行编程方面的经验不容忽视,但相当有限,我无法完全预见到此问题的特殊性。我怀疑是否有一种方便甚至“轻松”的方式来处理我面临的问题,但也许我错了。如果有任何涵盖此问题或类似问题的资源(例如文章,书籍,网络链接等)或关键字,请告知我。我试图将整个案例尽可能地概括,并使其抽象化,而不是发布过多的代码。布局...我有一个由N个初始元素和N个结果元素组成的系统。(例如,我将使用N=8,但N可以是大于3的任何整数值。)staticsize_tconstN=8;doubleinit_values[N],result

c++ - 如何使用 SSE/AVX 高效地执行 double/int64 转换?

SSE2有在单精度float和32位整数之间转换vector的指令。_mm_cvtps_epi32()_mm_cvtepi32_ps()但是没有double和64位整数的等价物。换句话说,它们不见了:_mm_cvtpd_epi64()_mm_cvtepi64_pd()AVX好像也没有。模拟这些内在函数的最有效方法是什么? 最佳答案 在AVX512之前没有单一指令,它添加了与64位整数(有符号或无符号)的转换。(还支持与32位无符号的转换)。查看像_mm512_cvtpd_epi64这样的内在函数和更窄的AVX512VL版本,如_mm

javascript - 高效查找和替换文档中的字符串

我有以下查询,在名称字段中查找 标记并将它们替换为空白-以摆脱它们。名称字符串可以有1到多个 标签,例如AA aaAA  aaAA   aaAA    aaAA AA aaaaaaaa……就这样。db.tests.find({'name':/.* .*/}).forEach(function(test){test.name=test.name.replace(" ","");db.tests.save(test);});db.tests.find(