标签: in-place

删除包含特定字符串的文本文件中的行

我如何使用sed删除包含特定字符串的文本文件中的所有行?

shell sed in-place text-parsing

1670
推荐指数
13
解决办法
168万
查看次数

如何将选项卡转换为目录的每个文件中的空格?

如何将制表符转换为目录的每个文件中的空格(可能是递归的)?

另外,有没有办法设置每个标签的空格数?

unix bash shell spaces in-place

232
推荐指数
10
解决办法
14万
查看次数

如何使用合并排序算法进行就地排序?

我知道问题不是太具体.

我想要的只是告诉我如何将普通合并排序转换为就地合并排序(或具有恒定额外空间开销的合并排序).

我所能找到的(网上)是"太复杂"或"超出本文范围"的网页.

唯一已知的就地合并方式(没有任何额外空间)太复杂,无法简化为实际程序.(取自这里)

即使它太复杂,如何使合并排序到位的基本概念是什么?

arrays sorting algorithm mergesort in-place

229
推荐指数
7
解决办法
14万
查看次数

就地基数排序

这是一篇很长的文字.请多多包涵.简而言之,问题是:是否有可行的就地基数排序算法


初步

我有很多小的固定长度字符串,只使用字母"A","C","G"和"T"(是的,你猜对了:DNA)我想要排序.

目前,我使用的是在STL的所有常见实现中std::sort使用introsort.这非常有效.但是,我相信,基数排序适合我的问题完全设置,并应工作在实践中更好.

细节

我已经用非常天真的实现来测试这个假设,并且对于相对较小的输入(大约10,000),这是真的(好吧,至少快两倍以上).但是,当问题规模变大(N > 5,000,000)时,运行时会出现严重下降.

原因很明显:基数排序需要复制整个数据(实际上我的天真实现不止一次).这意味着我已经将~4 GiB放入我的主内存中,这显然会影响性能.即使它没有,我也承担不起使用这么多内存,因为问题规模实际上变得更大.

用例

理想情况下,对于DNA和DNA5(允许额外的通配符"N"),甚至DNA与IUPAC 模糊代码(导致16个不同的值),此算法应该适用于2到100之间的任何字符串长度.但是,我意识到所有这些情况都无法涵盖,所以我对任何提速都感到满意.代码可以动态决定要分派的算法.

研究

不幸的是,关于基数排序维基百科文章是没用的.关于就地变体的部分是完全垃圾.关于基数排序NIST-DADS部分几乎不存在.有一篇名为Efficient Adaptive In-Place Radix Sorting的有前途的论文描述了算法"MSL".不幸的是,这篇论文也令人失望.

特别是,有以下几点.

首先,该算法包含几个错误,并留下了许多无法解释的问题.特别是,它没有详细说明递归调用(我只是假设它递增或减少一些指针来计算当前的移位和掩码值).同时,它采用了功能dest_groupdest_address没有给出定义.我没有看到如何有效地实现这些(即在O(1)中;至少dest_address不是微不足道的).

最后但并非最不重要的是,该算法通过使用输入数组内的元素交换数组索引来实现就地.这显然只适用于数值数组.我需要在字符串上使用它.当然,我可以只是强调打字并继续进行,假设内存可以容忍我存储一个不属于它的索引.但这只有在我将字符串压缩到32位存储器(假设32位整数)时才有效.这只有16个字符(暂时忽略16> log(5,000,000)).

其中一位作者的另一篇论文根本没有给出准确的描述,但它给出了MSL的运行时为次线性,这是错误的.

回顾一下:是否有希望找到一个工作的参考实现或至少一个良好的伪代码/描述工作就地基数排序,适用于DNA字符串?

language-agnostic sorting algorithm in-place radix-sort

197
推荐指数
6
解决办法
3万
查看次数

`sorted(list)`vs`list.sort()`有什么区别?

list.sort()对列表进行排序并保存已排序的列表,同时sorted(list)返回列表的已排序副本,而不更改原始列表.

  • 但什么时候使用哪个?
  • 哪个更快?又快多少?
  • 可以在之后检索列表的原始位置list.sort()吗?

python sorting copy list in-place

165
推荐指数
5
解决办法
9万
查看次数

在OS X上使用sed进行就地编辑

我想在OS X上使用sed编辑文件.我正在使用以下命令:

sed 's/oldword/newword/' file.txt
Run Code Online (Sandbox Code Playgroud)

输出发送到终端. file.txt未被修改.使用以下命令将更改保存到file2.txt:

sed 's/oldword/newword/' file1.txt > file2.txt
Run Code Online (Sandbox Code Playgroud)

但是我不想要另一个文件.我只想编辑file1.txt.我怎样才能做到这一点?

我试过-i标志.这会导致以下错误:

sed: 1: "file1.txt": invalid command code f
Run Code Online (Sandbox Code Playgroud)

macos file-io sed in-place

130
推荐指数
5
解决办法
8万
查看次数

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
Run Code Online (Sandbox Code Playgroud)

哪个输出:

[1 1 2]
[1 1 1]
Run Code Online (Sandbox Code Playgroud)

因此,在数组的情况下a -= b产生不同的结果a = a - b.直到现在我才想到这两种方式完全相同.有什么不同?

为什么我提到的用于求和矩阵中每N行的方法是如何工作的,例如7x4矩阵而不是7x1阵列?

python arrays numpy in-place variable-assignment

88
推荐指数
3
解决办法
6841
查看次数

更新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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么有没有任何方法,以便我可以获得所需的Entry对象,而不必遍历整个Map?或者有没有办法更新条目的价值?在一些方法Map一样setValue(String key, int val)

JRH

java map in-place

69
推荐指数
3
解决办法
12万
查看次数

如何删除多个文件的尾部空格?

是否有任何工具/ UNIX单线程可以就地删除多个文件的尾部空格.

例如,可以与find结合使用.

shell whitespace find in-place removing-whitespace

59
推荐指数
2
解决办法
3万
查看次数

Python Pandas - 了解inplace = True

pandas库中很多次都有一个选项来更改对象,例如使用以下语句...

df.dropna(axis='index', how='all', inplace=True)
Run Code Online (Sandbox Code Playgroud)

我很好奇返回的内容以及inplace=True传递对象时的处理方式inplace=False.

正在修改的所有操作selfinplace=True?什么时候inplace=False立即创建一个新对象new_df = self,然后new_df返回?

python in-place pandas

53
推荐指数
4
解决办法
8万
查看次数