我想从汉明距离为(例如)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 /策略来获得更好的性能?
另外,我们假设只有拉丁字符,并且所有单词都具有相同的长度.
假设我有一个以这种方式返回C字符串的简单函数:
const char * getString()
{
const char * ptr = "blah blah";
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式从main()调用getString():
Run Code Online (Sandbox Code Playgroud)const char * s = getString();
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) 例如,给定模式:
account(id, type, cname)
Run Code Online (Sandbox Code Playgroud)
我想cname用type出现的每个帐户返回客户的数量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声明发生了什么.任何人都可以澄清一下吗?谢谢.
我正在自学后端和前端 Web 开发(如果重要的话,我正在使用 Flaks)并且在对我的应用程序进行单元测试时我需要一些指示。
我最关心的是这些不同的情况:
数据的内部一致性:这很简单 - 我的目标是 100% 的覆盖率,当涉及到登录过程等问题时,最常见的是检查每次请求后 Python 代码和数据库之间发生的所有事情是否仍然存在持续的。
JSON 响应:我正在做的 atm 是get/post对我的应用程序上的每个调用执行测试请求,然后断言json 响应必须是this-and-that,但老实说,我不太欣赏这样做的价值- 也许是因为我的应用程序仍处于早期阶段?
外部 API:我在这里读到了相互矛盾的意见。假设我正在使用外部 API 来翻译一些文本:
输出的 HTML:我也迷失了这一点。假设我正在测试函数add_post():
response.data,但后来我有点放弃了,因为 1)它需要很多时间和 2)我必须不断地重写测试,因为我正在更改应用程序所以经常。谢谢你,抱歉我的冗长。我希望我说清楚了!
所以给出以下内容:
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) 我有一个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)