小编sha*_*ane的帖子

金字塔动态编程

我在一次采访中遇到了这个问题而无法理解.我相信它有一个动态的编程解决方案,但它让我望而却步.

给定一些砖块,输出可能的2d金字塔总数,其中金字塔被定义为任何结构,其中一排砖块的砖块严重少于其下方的砖块.你不必使用所有砖块.

砖块只是一个正方形,连续砖块的数量是唯一重要的信息.

真的坚持这个,我认为很容易解决每个问题1 ... n迭代和总和.但是提出金字塔的数量可能与我的砖块正在躲避我.

例如,n = 6

X

XX

X
XX   XXX

X
XXX   XXXX

XX      X
XXX   XXXX   XXXXX

X
XX      XX       X
XXX   XXXX   XXXXX   XXXXXX
Run Code Online (Sandbox Code Playgroud)

所以答案是来自6块砖的13个可能的金字塔.

编辑

我很肯定这是一个动态编程问题,因为(一旦你确定了第一行)它只是查看你剩余砖块的记忆数组中的索引,看看有多少金字塔适合于顶部.

这也是情理之中的考虑宽度至少n/2的底部行,因为我们没有更多的砖上面比下面一行EXCEPT,这是我失去它,我的脑海里分崩离析,在某些(少数情况下)你可以N = 10

X
XX
XXX
XXXX
Run Code Online (Sandbox Code Playgroud)

现在底行有4个,但最左边有6个

但是当n = 11时,我们不能有低于n/2砖的底行.还有另外一种奇怪的不一致性,如n = 4,我们不能有一排n/2 = 2砖.

algorithm dynamic-programming

11
推荐指数
1
解决办法
1984
查看次数

C++将参数包扩展为数组的元组

我想实例化一个类

template<typename ...Args>
class X {
private:
    std::tuple<std::array<Arg0, 255>, std::array<Arg1, 255>, ...> m_tuples; // For Arg in Args
}
Run Code Online (Sandbox Code Playgroud)

我知道这不是正确的C++,但是我怎样才能实现将类的参数包模板扩展到元组中保存的数组的效果?

c++ variadic-templates

8
推荐指数
1
解决办法
638
查看次数

将 DAG 拓扑排序为批次

我正在寻找一种算法,将 DAG 排序为一批顶点,使得批次中的顶点之间没有边,并且批次按顺序排序,使得批次中没有顶点与批次有边按排序顺序位于其之后。我似乎无法对通用拓扑排序进行有效的修改,因为要发现将顶点放入哪个批次,您必须在其所属批次之前填充所有批次。有效:

batches = []
while vertices:
    batch = []
    for v in vertices.copy():
        for v' in v.edges:
            if v' in vertices:
                break
        else:
            batch.append(v)
            vertices.remove(v)
    batches.append(batch)
Run Code Online (Sandbox Code Playgroud)

然而,该算法适用于带有用于顶点查找的哈希表O(n^2)的反向排序“线性”图。

抱歉,Pythonic 伪代码。

python sorting algorithm graph

7
推荐指数
0
解决办法
240
查看次数

使所有共享ptrs无效到特定的托管对象

在C++ 11中,是否有可能拥有由几个std::shared_ptrs 管理的对象.我想通过一个删除对象std::shared_ptr并使另一个shared_ptrs无效(设置为空或null),这可能吗?如果没有,通知所有其他"引用"(在自由使用的单词中)该对象不再有效的最佳方法是什么?

c++ shared-ptr c++11

6
推荐指数
1
解决办法
423
查看次数

将来可以安全地传递到分离线程吗?

是否将a传递std::futurestd::thread安全操作的独立实例?我知道在下面,std::futureshared_ptr中的状态与共享std::promise。这是一个例子。

int main()
{
    std::promise<void> p;
    std::thread( [f = p.get_future()]() {
        if ( f.wait_for( std::chrono::seconds( 2 ) ) == std::future_status::ready ) 
        {
            return;
        }

        std::terminate();
    } ).detach();

    // wait for some operation

    p.set_value();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码中有一个潜在的错误情况,即在主线程退出之后执行lambda。主线程退出后,共享状态是否仍保留?

c++ multithreading c++11

6
推荐指数
1
解决办法
83
查看次数

我的minimax算法对tictactoe有什么问题

我正在构建一个tic tac toe游戏,以获得有趣的学习体验.我已经构建了一个minimax算法来返回计算机的最佳移动,但不知怎的,我错了,得到像这样的奇怪输出

TIC TAC TOE V1.0
---
---
---
Enter row, column of your move
1,1
---
-X-
---
...
0, 0: -1038
0, 1: -1470
0, 2: -1038
1, 0: -1470
1, 2: -1470
2, 0: -1038
2, 1: -1470
2, 2: -1038
O--
-X-
---
Enter row, column of your move
1,2
O--
-XX
---
...
0, 1: -15
0, 2: -9
1, 0: -10
2, 0: -1
2, 1: -29
2, 2: -41
O--
-XX
O-- …
Run Code Online (Sandbox Code Playgroud)

c algorithm tic-tac-toe minimax

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

Python 多处理 linux windows 区别

此代码在 linux 上执行但抛出 AttributeError: type object 'T' has no attribute 'val' on windows,为什么?

from multiprocessing import Process
import sys

class T():
    @classmethod
    def init(cls, val):
        cls.val = val

def f():
    print(T.val)

if __name__ == '__main__':
    T.init(5)

    f()

    p = Process(target=f, args=())
    p.start()
Run Code Online (Sandbox Code Playgroud)

python linux windows cross-platform multiprocessing

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

芹菜链从任务映射到另一个

我有芹菜的申请

@task
def step_one(items):
    items.sort()
    for i in range(len(items), 100):
        yield items[i:i + 100]

@task
def step_two(batch):
    for item in batch:
        print(item)

if __name__ == '__main__':
    celery.chain(step_one.s([i for i in range 100000]), step_two.map().s()).delay()
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为step_two期望使用迭代器,但是我希望它获取上一步的结果,正确的方法是什么?如果任务可以从而yield不是在对整个列表进行排序和分块之后开始,那也很好。

我已经看到了这个问题,这是将生成的列表映射到celery中的任务的最佳方法,但是我觉得没有必要创建一个将结果映射到另一个任务的中间步骤。另外,打电话step_two.map.s()给我一个错误function object has no attribute s

python celery

5
推荐指数
0
解决办法
279
查看次数

python asyncio-如何等待取消的屏蔽任务?

如果我有一个协程运行的任务不应被取消,我将把该任务包装在中asyncio.shield()

看来的行为cancelshield不是我所期望的那样。如果我包装了一个任务shield并取消了它,则await-ing协程将await立即从该语句返回,而不是像shield建议的那样等待任务完成。此外,与之shield一起运行的任务将继续运行,但其未来现在被取消await

文档

除了如果包含协程的协程被取消,在something()中运行的任务不会被取消。从something()的角度来看,取消没有发生。尽管其调用方仍被取消,所以“ await”表达式仍会引发CancelledError。

这些文档并不强烈暗示在被叫者完成之前可能会取消呼叫者,这是我问题的核心。

shield从取消到执行任务,然后等待其完成后再返回的正确方法是什么?

如果在-ed任务完成后再asyncio.shield()提出,这会更有意义,但是显然这里还有其他我不理解的想法。asyncio.CancelledErrorawait

这是一个简单的示例:

import asyncio

async def count(n):
  for i in range(n):
    print(i)
    await asyncio.sleep(1)

async def t():
  try:
    await asyncio.shield(count(5))
  except asyncio.CancelledError:
    print('This gets called at 3, not 5')

  return 42

async def c(ft):
  await asyncio.sleep(3)

  ft.cancel()

async def m():
  ft = asyncio.ensure_future(t())
  ct = asyncio.ensure_future(c(ft)) …
Run Code Online (Sandbox Code Playgroud)

python-3.x python-asyncio

5
推荐指数
2
解决办法
1949
查看次数

如何在 gitlab ci 中设置组环境变量

gitlab ci中如何管理组环境变量?看起来通过前端,您只能在项目范围内添加变量。

gitlab-ci

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