小编lau*_*ids的帖子

有效地建立具有给定汉明距离的单词图

我想从汉明距离为(例如)1 的单词列表中构建一个图形,或者换句话说,如果它们只与一个字母(lo l - > lo t)不同,则连接两个单词.

所以给定

words = [ lol, lot, bot ]

图表将是

{
  'lol' : [ 'lot' ],
  'lot' : [ 'lol', 'bot' ],
  'bot' : [ 'lot' ]
}
Run Code Online (Sandbox Code Playgroud)

简单的方法是将列表中的每个单词与其他单词进行比较并计算不同的字符; 遗憾的是,这是一种O(N^2)算法.

我可以使用哪种algo/ds /策略来获得更好的性能?

另外,我们假设只有拉丁字符,并且所有单词都具有相同的长度.

python algorithm hamming-distance graph-algorithm

19
推荐指数
3
解决办法
1970
查看次数

如何在内存中分配C字符串?

假设我有一个以这种方式返回C字符串的简单函数:

const char * getString()
{
  const char * ptr = "blah blah";
  return ptr; 
}
Run Code Online (Sandbox Code Playgroud)

我以这种方式从main()调用getString():

  const char * s = getString();
Run Code Online (Sandbox Code Playgroud)

1)根据gdb,变量ptr存储在堆栈中,但ptr指向的字符串不是:

(gdb) p &ptr
$1 = (const char **) 0x7fffffffe688

(gdb) p ptr
$2 = 0x4009fc "blah blah"
Run Code Online (Sandbox Code Playgroud)

这是否意味着"blah blah"不是getString()中的局部变量?

我想如果它是一个局部变量,我将无法将它传递给我的main()函数......但如果它不存在,它存储在哪里?在堆上?这是OS每次点击字符串时实现的"一种"动态内存分配,还是什么?

2)如果我使用数组而不是指针,这样:

const char *getString2()
{
  const char a[] = "blah blah blah";
  return a;
}
Run Code Online (Sandbox Code Playgroud)

编译器警告我:

warning: address of local variable ‘a’ returned

(当然程序编译,但它不起作用).

实际上,如果我问gdb,我会的

(gdb) p &a
$2 = (const char …
Run Code Online (Sandbox Code Playgroud)

c

12
推荐指数
2
解决办法
802
查看次数

返回具有给定属性的表中出现的各种实例的行

例如,给定模式:

account(id, type, cname)
Run Code Online (Sandbox Code Playgroud)

我想cnametype出现的每个帐户返回客户的数量account.

以下查询将执行:

SELECT cname, type
FROM account AS cust_account 
WHERE NOT EXISTS ( 
    SELECT type 
    FROM account 
    EXCEPT
    SELECT type 
    FROM account 
    WHERE account.cname = cust_account.cname
);
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解它背后的逻辑.特别是,我不知道该EXCEPT声明发生了什么.任何人都可以澄清一下吗?谢谢.

sql

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

如何正确地对 Web 应用程序进行单元测试?

我正在自学后端和前端 Web 开发(如果重要的话,我正在使用 Flaks)并且在对我的应用程序进行单元测试时我需要一些指示。

我最关心的是这些不同的情况:

  1. 数据的内部一致性:这很简单 - 我的目标是 100% 的覆盖率,当涉及到登录过程等问题时,最常见的是检查每次请求后 Python 代码和数据库之间发生的所有事情是否仍然存在持续的。

  2. JSON 响应:我正在做的 atm 是get/post对我的应用程序上的每个调用执行测试请求,然后断言json 响应必须是this-and-that,但老实说,我不太欣赏这样做的价值- 也许是因为我的应用程序仍处于早期阶段?

    • 我应该继续测试每个请求的每个 json 响应吗?
    • 如果是,长期利益是什么?
  3. 外部 API:我在这里读到了相互矛盾的意见。假设我正在使用外部 API 来翻译一些文本:

    • 我应该只测试非常高级的 API,即查看我是否获得访问令牌,仅此而已?
    • 我应该测试返回的 json 是否符合我的预期?
    • 我应该不测试任何东西来加速我的测试套件并且不让它依赖于第三方 API?
  4. 输出的 HTML:我也迷失了这一点。假设我正在测试函数add_post()

    • 我是否应该在请求的页面上测试所需的帖子实际上是否存在?
    • 我开始检查行中是否存在字符串/html 标签 response.data,但后来我有点放弃了,因为 1)它需要很多时间和 2)我必须不断地重写测试,因为我正在更改应用程序所以经常。
    • 在这种情况下推荐的方法是什么?

谢谢你,抱歉我的冗长。我希望我说清楚了!

python integration-testing unit-testing flask

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

使用生成器在BST上执行inorder树遍历

所以给出以下内容:

def inorder(t):
    if t:
        inorder(t.left)
        yield t.key
        inorder(t.right)

x = [ n for n in inorder(r) ]
Run Code Online (Sandbox Code Playgroud)

x 只包含根节点,为什么?

这是完整的代码; 请注意,BST实现是正确的,它是inorder()生成器的实现,不知何故是错误的.

class STree(object):
    def __init__(self, value):
        self.key = value
        self.left = None
        self.right = None

def insert(r, node):
    if node.key < r.key:
        if r.left is None:
            r.left = node
        else:
            insert(r.left, node)
    else:
        if r.right is None:
            r.right = node
        else:
            insert(r.right, node)

def inorder(t):
    if t:
        inorder(t.left)
        yield t.key
        inorder(t.right)


r = STree(10)
insert(r, STree(12))
insert(r, …
Run Code Online (Sandbox Code Playgroud)

python recursion generator binary-search-tree

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

从队列中消耗好Scala模式,直到没有更多消息?

我有一个N由Actor调度的消息队列,我想全部消耗它们.如果队列为空,则actor将返回Message类型或NoMessages类型.

我想出了这个,但不觉得惯用,而且我不确定每次打电话时我都会旋转多少个线程consume()

这样做的更好方法是什么?

def main(): Unit = {

  val queue = system.actorOf(...)

  def consume(): Unit = {
    ask(queue, Read) foreach {
      case Message(m) => {
        // handle message
        consume()
      }
      case NoMessages =>  {
        system.shutdown()
      }
    }
  }
  consume()
}
Run Code Online (Sandbox Code Playgroud)

queue design-patterns scala akka

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