标签: in-place

对字符串进行排序以查明是否存在非唯一字符

最近我遇到了一个问题,要求在没有任何额外缓冲区的情况下找出字符串中的非唯一字符.我将此问题解释为字符串中的字符的就地排序,然后迭代它以便跟踪非唯一字符.

另一个可以具有O(1)空间和O(n ^ 2)运行时间的解决方案是在字符串上有两个"for"循环来跟踪常见的任何字符对.

我需要的是用O(1)空格在至少O(nlogn)时间对字符串进行排序.

是否有一种简单/优雅的方法在O(nlgn)中使用O(1)空间进行就地排序的字符?

language-agnostic sorting algorithm in-place

0
推荐指数
1
解决办法
1336
查看次数

什么是就地算法?

假设我想从字符串中删除重复项.我决定使用长度为256的布尔数组来存储特定字符是否已经出现.我可以遍历字符串,并可以借助此辅助布尔数组删除所有重复项.

我的问题是"这个算法是否就位?"

我认为它使用的是恒定的空间量,它不会随着它应该就地输入的大小而改变.如果我错了,请纠正.

string algorithm traversal duplicates in-place

0
推荐指数
1
解决办法
167
查看次数

在python中实现自定义类的add和iadd?

我正在编写一个Queue包含大多数操作列表的类.但是我不会从中升级list,因为我不想提供所有的list API's.我的代码粘贴在下面.该add方法似乎工作正常,但iadd似乎出错,它打印没有.这是代码:

import copy
from iterator import Iterator
class Abstractstruc(object):
    def __init__(self):
        assert False
    def __str__(self):
        return "<%s: %s>" %(self.__class__.__name__,self.container)

class Queue(Abstractstruc,Iterator):

    def __init__(self,value=[]):
        self.container=[]
        self.size=0
        self.concat(value)

    def add(self, data):
            self.container.append(data)
    def __add__(self,other):
        return Queue(self.container + other.container)


    def __iadd__(self,other):
        for i in other.container:
            self.add(i)

    def  remove(self):
        self.container.pop(0)


    def peek(self):
        return self.container[0]


    def __getitem__(self,index):
        return self.container[index]


    def __iter__(self):
        return Iterator(self.container)

    def concat(self,value):
        for i in value:
            self.add(i)

    def __bool__(self):
        return len(self.container)>0 …
Run Code Online (Sandbox Code Playgroud)

python class add object in-place

0
推荐指数
1
解决办法
1132
查看次数

Python就地运算符(如"+ ="),numpy数组和身份函数不能正常工作?

数组yn并且zn等于数字,但有一个奇怪的区别:yn += 7正如预期的那样,行不会改变tn数组,但第二行最后一行会zn += 7改变tn数组!

这是代码:

import numpy as np
def f(x): return (1*x)
def g(x): return (x)
nn = 5
tn = np.zeros(nn)
yn = np.zeros(nn)
zn = np.zeros(nn)

tn = np.linspace(0,1,nn)
yn = f(tn)
zn = g(tn)

print('tn at step1 =',tn)
yn += 7  #as expected, this line does not change tn.
print('tn at step2 =',tn)
zn += 7  #why this line adds 7 to tn …
Run Code Online (Sandbox Code Playgroud)

python numpy in-place operator-keyword

0
推荐指数
1
解决办法
146
查看次数

"无长"快速排序算法

我一直在研究排序算法.到目前为止,我发现的所有排序算法要么依赖于已知长度(几乎所有排序算法.我不能使用它们,因为"正确"长度是O(n)),或者比快速排序慢(例如插入分类).

在Lua中,有两个长度概念:

  • 适当的序列长度
    • 是O(n)
    • 由ipairs等使用
  • 序列长度
    • 是O(log n)
    • 有洞(零值)
    • 由table.insert等使用

我已经研究过heapsort,但是heapsort需要构建一个堆,然后排序.它不能同时作为单个操作,这意味着它仍然存在O(n)长度问题.

使用插入排序,您只需运行插入排序算法,直到您点击第一个nil.这只排序表的"正确序列"部分(即,从1到n的键没有任何nil值),但插入排序比quicksort慢.

是否有任何就地排序算法,如插入排序,不依赖于长度,但性能可与快速排序相媲美?

示例插入排序代码(在维基百科的帮助下):

function isort(t)
  -- In-place insertion sort that never uses the length operator.
  -- Stops at the first nil, as expected. Breaks if you use "for i = 1, #t do"
  for i in ipairs(t) do
      local j = i
      while j > 1 and t[j-1] > t[j] do
          t[j], t[j-1] = t[j-1], t[j]
          j = j - 1
      end
  end
end

local …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm lua in-place time-complexity

-2
推荐指数
1
解决办法
157
查看次数