Questions tagged «in-place»

在有关修改数据而不是复制数据的算法的问题上使用此标记。例如,就地[tag:sorting],就地[tag:merge]等。



10
如何使用合并排序算法进行就地排序?
我知道这个问题不太具体。 我想要的是有人告诉我如何将普通合并排序转换为就地合并排序(或具有恒定额外空间开销的合并排序)。 我只能在网上找到说“它太复杂”或“超出本文范围”的页面。 唯一已知的就地合并(没有任何额外空间)的方法太复杂,无法简化为实际程序。(从这里拍摄) 即使太复杂,如何进行合并排序的基本概念是什么?

14
就地基数排序
这是一个很长的文字。请多多包涵。归根结底,问题是:是否存在可行的就地基数排序算法? 初步 我有很多小的固定长度字符串,它们只使用我要排序的字母“ A”,“ C”,“ G”和“ T”(是的,您猜对了:DNA)。 目前,我在STL的所有常见实现中都std::sort使用了introsort。这很好。但是,我相信,基数排序适合我的问题集完美,应该工作多在实践中更好。 细节 我已经用一个非常幼稚的实现测试了这个假设,对于相对较小的输入(大约10,000个),这是正确的(至少要快两倍以上)。但是,当问题规模变大(N > 5,000,000)时,运行时间将大大降低。 原因很明显:基数排序需要复制整个数据(实际上,在我的幼稚实现中不止一次)。这意味着我已经在主内存中放入了大约4 GiB,这显然会降低性能。即使没有,我也负担不起这么大的内存,因为问题的大小实际上变得更大了。 用例 理想情况下,该算法应适用于2到100之间的任何字符串长度,适用于DNA以及DNA5(允许附加通配符“ N”),甚至适用于带有IUPAC 模糊代码的 DNA (导致16个不同的值)。但是,我意识到所有这些情况都无法解决,因此我对速度的提高感到满意。该代码可以动态决定要调度到哪个算法。 研究 不幸的是,维基百科上关于基数排序的文章是没有用的。关于就地变体的部分是完整的垃圾。在上基数NIST-DADS部分排序旁边不存在的。有一篇听起来很有希望的论文,叫做“ 高效自适应就地基数排序”,它描述了算法“ MSL”。不幸的是,这篇论文也令人失望。 特别是,有以下几点。 首先,该算法包含一些错误,并且有很多无法解释的地方。特别是,它没有详细介绍递归调用(我只是假设它增加或减少了一些指针来计算当前的shift和mask值)。同样,它使用这些函数dest_group并且dest_address没有给出定义。我看不到如何有效地实现这些功能(也就是说,在O(1)中;至少dest_address是不平凡的)。 最后但并非最不重要的一点是,该算法通过将数组索引与输入数组内的元素交换来实现就位。显然,这仅适用于数值数组。我需要在字符串上使用它。当然,我可以拧紧强类型,并假设内存可以容忍我存储不属于它的索引。但这仅在我可以将字符串压缩到32位内存(假设32位整数)的情况下有效。那只是16个字符(在16> log(5,000,000)的那一刻,让我们忽略它)。 一位作者的另一篇论文没有给出任何准确的描述,但它给出了MSL的运行时间为亚线性的情况,这是完全错误的。 回顾一下:是否有希望找到一个可行的参考实现,或者至少一个对DNA字符串起作用的就地基数排序的良好伪代码/描述?


6
在OS X上使用sed进行就地编辑
我想在OS X上使用sed编辑文件。我使用以下命令: sed 's/oldword/newword/' file.txt 输出发送到终端。 file.txt未被修改。使用以下命令将更改保存到file2.txt: sed 's/oldword/newword/' file1.txt > file2.txt 但是我不要另一个文件。我只想编辑file1.txt。我怎样才能做到这一点? 我已经尝试过-i标志。这将导致以下错误: sed: 1: "file1.txt": invalid command code f
142 macos  file-io  sed  in-place 

11
了解inplace = True
在pandas库中多次出现改变就地等物体的方式与下面的语句一个选项... df.dropna(axis='index', how='all', inplace=True) 我很好奇返回的内容以及inplace=True传递时与传递对象时如何处理该对象inplace=False。 所有操作self何时都在修改inplace=True?何时inplace=False立即创建一个新对象,例如new_df = self然后new_df返回?
109 python  pandas  in-place 

3
Python中a-= b和a = a-b之间的区别
我最近将这种解决方案应用于平均每N行矩阵。尽管该解决方案总体上可行,但将其应用于7x1阵列时遇到了问题。我注意到问题出在使用-=运算符时。举一个小例子: import numpy as np a = np.array([1,2,3]) b = np.copy(a) a[1:] -= a[:-1] b[1:] = b[1:] - b[:-1] print a print b 输出: [1 1 2] [1 1 1] 因此,在数组的情况下a -= b产生的结果与有所不同a = a - b。我认为到目前为止,这两种方式是完全相同的。有什么区别? 我提到的用于对矩阵中的每N行求和的方法如何工作(例如,对于7x4矩阵而不是7x1数组)?

3
更新Java映射条目
我面临着一个似乎无法解决的问题。 我正在使用java.util.Map,并且想要更新键值对中的值。 现在,我正在这样做: private Map<String,int> table = new HashMap<String,int>(); public void update(String key, int val) { if( !table.containsKey(key) ) return; Entry<String,int> entry; for( entry : table.entrySet() ) { if( entry.getKey().equals(key) ) { entry.setValue(val); break; } } } 那么有没有什么方法可以使我获得所需的Entry对象而不必遍历整个对象Map呢?还是有某种方法可以更新条目的值?在一些方法Map一样setValue(String key, int val)? r
74 java  map  in-place 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.