小编Roh*_*han的帖子

任何算法的时间复杂度都可能随着输入大小的增加而减少,任何一个例子

我刚读过Cormen的算法书,认为big-O和big-omega不遵循三分法属性.这意味着对于两个功能,f(n)并且g(n)可能是既不存在f(n) = O(g(n))也不f(n) = Omega(g(n))成立的情况.在例子中,他们认为如果功能n^(1+sin n)是可能的.

虽然它是正确的,但在现实世界算法中可能有类似的运行时间sin n.因为随着输入大小的增加,它有时会减少.有没有人知道任何这样的算法,或者可以提供一个小代码片段来做到这一点.

谢谢你的答案,所以在这种情况下假设给定一个大小为n的问题P是正确的,如果它不能通过任何已知的算法在O(f(n))时间内求解,那么P的下界是欧米茄(F(N)).

algorithm performance complexity-theory big-o

18
推荐指数
3
解决办法
2956
查看次数

在数组中找到具有模式的最少元素

给出一个数组,使其元素的值从第0个索引增加到某个(k -1)索引.在k处,该值是最小值,并且比通过第n个元素再次开始增加.找到最小元素.

基本上,它的一个排序列表附加到另一个; 例如:(1,2,3,4,0,1,2,3).

我已经尝试了各种算法,如buliding min-heap,快速选择或只是普通的遍历.但不能低于O(n).但是这个数组中有一个模式,建议二进制搜索类型的东西应该是可能的,复杂性应该像O(log n),但是找不到任何东西.思绪??

谢谢

algorithm divide-and-conquer

5
推荐指数
1
解决办法
297
查看次数

求解T(n)= 2T(n/2)+ log n

我试图解决T(n)= 2T(n/2)+ log n

取代n = 2 ^ k

T(2^k) = 2T(2^(k-1)) + k  
T(2^k) = 2^2 T(2^(k-1)) + 2(k-1) + k

after k steps
T(2^k) = 2^k T(1) + 2^(k-1) + 2 * (2^(k-2)) +....+k
Run Code Online (Sandbox Code Playgroud)

所以基本上我需要总结一个i*2 ^ i的项,其中i = 1来记录n - 1.
而且我找不到一个简单的方法来总结这些术语.难道我做错了什么 ?有没有其他方法来解决这种递归?会掌握定理工作吗?如果是的话怎么样?

谢谢.

recurrence divide-and-conquer

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

re2库加载

我使用以下代码来测试谷歌的RE2库

int main()
{
  int r = RE2::FullMatch("hello", "h.*o");
  cout <<" match = " << r << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令进行编译 -

g++ -lre2 -o retest retest.cc
Run Code Online (Sandbox Code Playgroud)

编译正常,但是当我尝试使用./retest运行重新测试时,它会抛出以下错误 -

error while loading shared libraries: libre2.so.0: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我检查过libre2.so.0库确实存在于user/local/lib目录和re2/obj/so目录下.那么为什么会出现这个错误,我忘了添加一些细节?

c++ regex re2

5
推荐指数
1
解决办法
2172
查看次数

需要使用势函数方法找到序列的摊销成本

存在n个操作的序列,如果i是2的精确幂,则第i个操作花费2i,如果i是3的精确幂,则花费3i,并且对于所有其他操作则花费1.

嗨,首先,我想说这是一个家庭作业问题,我不希望你为我解决它.

我用聚合方法解决了它.为此,我总结了2系列的权力和3的一系列权力并得到了10的摊销成本.然后我使用会计方法检查了它,对于很长的序列并且它没有失败.但我的问题是如何证明它永远不会失败,我可以显示我想要的长序列,但它仍然不能保证它不会失败一段时间后.

我也尝试使用潜在的函数方法解决它,这是我真的陷入困境,设置一个潜在的函数,我认为你需要真正的创造性,我找不到一些条件,表明在这一点上这将永远成立,需要也有一些帮助.

关于如何在会计方法中证明它以及如何设置潜在功能的一些想法应该足够了.谢谢

algorithm amortized-analysis

4
推荐指数
1
解决办法
1660
查看次数

DynamoDB 表正在创建但无法插入新项目

我正在使用 boto DynamoDBV2 接口作为脚本在 DynamoDB 中创建和填充表。我的代码看起来像这样 -

my_table = Table.create(table_name, schema=[HashKey('key', data_type=STRING)], connection = self.connection)
my_table.put_item(data={
         'key': 'somekey',
         'value': value
      })
Run Code Online (Sandbox Code Playgroud)

我已经创建了连接,当我运行它时,表被正确创建,我可以在 AWS 控制台中看到它。但是我在尝试将值放入表中时收到错误“未找到请求的资源”。

我也尝试单独读取表格,然后插入这样的值 -

Table.create(table_name, schema=[HashKey('key', data_type=STRING)], connection = self.connection)
my_table = Table(table_name, self.connection)
my_table.put_item(data={
         'key': 'somekey',
         'value': value
      })
Run Code Online (Sandbox Code Playgroud)

但在第二行仍然出现相同的错误。我错过了什么?

boto amazon-dynamodb

3
推荐指数
1
解决办法
1651
查看次数

如何在装饰器中使用上下文管理器以及如何将在decorator中创建的对象传递给装饰函数

我有一个测试类,需要在最后进行一些清理.为了确保用户不会忘记这样做,我想在类中添加一个上下文管理器.我还有一个装饰器,我想在其中使用此上下文管理器来创建测试类的对象并将其传递给装饰函数.它甚至可能吗?

这就是我要做的事情:

class test:
    def __init__(self, name):
        self._name = name
        print "my name is {0}".format(name)

    def exit():
        print "exiting"

    @contextmanager
    def testcm(self):
        print "inside cm"
        try:
            yield self
        finally:
            self.exit()

    def randomtest(self, str):
        print "Inside random test {0}".format(str)


def decorate(name):
    def wrapper(testf):
        def testf_wrapper(test):
            with test(name).testcm() as testobj:
                return testf(testobj)
            return testf_wrapper
        return wrapper
    return decorate

@decorate("whatever")
def testf(testobj):
    testobj.randomtest("randomness")
Run Code Online (Sandbox Code Playgroud)

该函数testf接受测试类对象 - testobj并用它做事.之后,由于上下文管理器,testcm确保调用清理函数.

所以有两个问题:

  1. 我如何在装饰器中使用上下文管理器,从我所知的装饰器必须返回一个函数,但如果我返回该函数(如上面的代码),上下文管理器将如何调用清理?

  2. 如何将装饰器中创建的对象传递给装饰函数,如果我像上面的代码一样传递它,我将如何调用装饰函数?

python contextmanager python-decorators

3
推荐指数
1
解决办法
508
查看次数

在Amazon Redshift中首先实现NULLS

我对行号使用求和窗口函数,类似于此查询-

SELECT field_a,
       SUM(1) OVER (PARTITION BY field_b ORDER BY field_c ASC ROWS UNBOUNDED PRECEDING) AS row_number
FROM test_table
    ORDER BY row_number;
Run Code Online (Sandbox Code Playgroud)

问题在于,如果field_c为空值,它将显示在末尾。我在一开始就想要它,因此将null值视为小于所有其他值。在Oracle中,可以通过提供NULLS FIRST参数来实现,但是Redshift不支持该参数。那么如何在Redshift中实现它呢?

sql postgresql null sql-order-by amazon-redshift

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