如何在其侧面打印二叉树,以便输出如下所示?
__/a
__/ \b
\ _/c
\_/ \d
\e
Run Code Online (Sandbox Code Playgroud)
(更漂亮的ascii-art欢迎)
这里有一些代码不太合适:
def print_tree(tree):
def emit(node,prefix):
if "sequence" in node:
print "%s%s"%(prefix[:-1],node["name"])
else:
emit(node["left"],"%s_/ "%prefix.replace("/ "," /")[:-1].replace("_"," "))
emit(node["right"],"%s \\ "%prefix.replace("\\ "," \\")[:-1])
emit(tree,"")
Run Code Online (Sandbox Code Playgroud)
哪个输出:
_/hg19
_/ \rheMac2
_/ \mm9
/\_/bosTau4
/ \_/canFam2
_/ \pteVam1
\_/loxAfr3
\dasNov2
Run Code Online (Sandbox Code Playgroud)
范围蔓延:如果您可以传入一个函数来返回字符串以打印任何节点,那将是非常好的; 通过这种方式,我有时也可以打印有关非离开节点的信息.因此,节点是否有任何要打印的内容由作为参数传入的函数控制.
这是JSON中的一些测试数据:
{
"left": {
"left": {
"left": {
"left": {
"name": "hg19",
"sequence": 0
},
"right": {
"name": "rheMac2",
"sequence": 1
}
},
"right": {
"name": "mm9",
"sequence": 2
}
}, …
Run Code Online (Sandbox Code Playgroud) BOUNTY UPDATE
在Denis的链接之后,这是如何使用threeblindmiceandamonkey代码:
// the destination rect is our 'in' quad
int dw = 300, dh = 250;
double in[4][4] = {{0,0},{dw,0},{dw,dh},{0,dh}};
// the quad in the source image is our 'out'
double out[4][5] = {{171,72},{331,93},{333,188},{177,210}};
double homo[3][6];
const int ret = mapQuadToQuad(in,out,homo);
// homo can be used for calculating the x,y of any destination point
// in the source, e.g.
for(int i=0; i<4; i++) {
double p1[3] = {out[i][0],out[i][7],1};
double p2[3];
transformMatrix(p1,p2,homo);
p2[0] /= p2[2]; …
Run Code Online (Sandbox Code Playgroud) 解决了:粘贴这里的字节让我意识到我错过了大块之间的空行......
HTTP/1.1请求是否需要指定Connection: keep-alive
标头,或者默认情况下是否始终保持活动状态?
这个指南让我觉得它会; 当我的http服务器获得1.1请求时,除非明确接收Connection: close
标头,否则它是保持活动状态.
我问,因为我不同的客户行为,ab
并且httperf
让我疯狂到足以让我对这个问题表示理解......
这是httperf --hog --port 42042 --print-reply body
发送的内容:
GET / HTTP/1.1
User-Agent: httperf/0.9.0
Host: localhost
Run Code Online (Sandbox Code Playgroud)
这是我服务器的回复:
HTTP/1.1 200 OK
Connection: keep-alive
Transfer-Encoding: chunked
Content-Length: 18
12
Hello World 1
0
Run Code Online (Sandbox Code Playgroud)
httpref
及时打印出响应,但随后只是坐在那里,双方都没有关闭连接而httpref
没有退出.
哪里是我的错误?
如果在Python 字符串.split()
上使用字符串,则返回字符串列表.这些已拆分的子字符串是其父字符串部分的副本.
是否有可能获得一些更便宜的切片对象,只保留参考,偏移和长度分割出的位?
是否有可能有一些"字符串视图"来提取和处理这些子字符串,就像它们是字符串而没有复制它们的字节一样?
(我问,因为我有很大的字符串,我想要切片,偶尔会耗尽内存;删除副本将是一个廉价的配置文件引导的胜利.)
在我的代码中,它通常在服务器上运行,我不控制配置,我有用户集合,每个用户都有一个byte[]
数组.
有时这些byte[]
数组对用户来说是唯一的.但是,通常会有大量用户使用完全相同的byte[]
数组.
我试图减少我的服务器的RAM消耗.
我已经尝试将我的byte[]
数组转换成字符串并实习它们,但后来我经常遇到PERM-GEN内存不足错误.当我想byte[]
为用户访问数组时,我也发现编码/解码会导致显着的性能下降,而且我看到更糟糕的内存使用情况 - 预备字符串比数组大得多.
Set<SoftReference<byte[]>>
当Java数组不可清除时,我如何进行查找?SoftReferences不会将对象的哈希值包装在其中.A Map<byte[],SoftReference<byte[]>>
显然也在打败自己,因为关键本身并阻止收集; 并且无论如何Set
都是内部实施的Map
.
那我怎么能实习 byte[]
数组呢?
我试图将asm.js注释添加到perlin单工噪声函数:
"use strict";
// Ported from Stefan Gustavson's java implementation
// http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
// Read Stefan's excellent paper for details on how this code works.
//
// Sean McCullough banksean@gmail.com
function SimplexNoise(stdlib,foreign,heap) {
"use asm";
// heap should be at least 1024*4+12*3*4 bytes long
var floor = stdlib.Math.floor,
sqrt = stdlib.Math.sqrt,
random = new stdlib.Float32Array(heap),
buf = new stdlib.Int32Array(heap),
F2 = 0.0, F3 = 0.0,
G2 = 0.0, G3 = 0.0;
F2 = (sqrt(3.0)-1.0)*0.5; F3 = 1.0/3.0;
G2 = (3.0-sqrt(3.0))/6.0; G3 …
Run Code Online (Sandbox Code Playgroud) 在*nix上分析C/C++应用程序的最佳工具是什么?
(我希望能够分析一个混合了(阻塞)文件IO,epoll for network和fork()/ execv()的服务器来解决一些繁重的问题;但是一般的帮助和更一般的工具都很受欢迎.)
您是否可以在一个概述中获得RAM,CPU,网络和磁盘的大系统图片,并深入研究它?
在内核列表上有很多关于类似事情的讨论perf timechart
,但我还没有发现Ubuntu中出现过任何问题.
Python函数有一个代码对象__code__
.
甲sys.settrace
迹frame
具有一个f_code
代码对象.
对于那些作为函数的跟踪器的调用,我如何获得函数对象(及其__annotation__
成员)?
到目前为止,通过反复试验,我有:
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
Run Code Online (Sandbox Code Playgroud)
这似乎适用于函数,但不适用于类成员函数; 更糟糕的是,它将类成员函数与同名的顶级函数混淆.
(我在Python 3.2.3(Xubuntu)上.我看到Python 3.3 inspect
模块有一个signature
函数;它会返回代码对象的注释还是它还需要一个函数对象?)
我天真地想象我可以构建一个后缀trie,其中我保持每个节点的访问计数,然后计数大于1的最深节点是我正在寻找的结果集.
我有一个非常长的字符串(数百兆字节).我有大约1 GB的RAM.
这就是为什么用计数数据构建后缀trie在空间方面效率太低而无法为我工作.引用维基百科的后缀树:
存储字符串的后缀树通常比存储字符串本身需要更多的空间.
每个边缘和节点中的大量信息使得后缀树非常昂贵,在良好实现中消耗源文本的存储器大小的大约十到二十倍.后缀阵列将此要求降低到四倍,研究人员继续寻找更小的索引结构.
那是维基百科对树的评论,而不是特里.
如何在如此大量的数据中以及在合理的时间内(例如在现代台式机上不到一小时)找到长重复序列?
(一些维基百科链接,以避免人们将它们作为'答案'发布:字符串算法,特别是最长的重复子字符串问题 ;-))
如果该值尚未设置,那么在a中设置值的最pythonic方法dict
是什么?
目前我的代码使用if语句:
if "timeout" not in connection_settings:
connection_settings["timeout"] = compute_default_timeout(connection_settings)
Run Code Online (Sandbox Code Playgroud)
dict.get(key,default)
适用于使用dict的代码,而不适用于准备将dict传递给另一个函数的代码.你可以用它来设置一些东西,但它不是更漂亮的imo:
connection_settings["timeout"] = connection_settings.get("timeout", \
compute_default_timeout(connection_settings))
Run Code Online (Sandbox Code Playgroud)
即使dict包含密钥,也会评估计算功能; 错误.
Defaultdict是默认值相同的时候.
当然,有很多时候你设置了不需要计算作为默认值的主要值,它们当然可以使用dict.setdefault
.但是更复杂的情况呢?
python ×4
performance ×2
algorithm ×1
asm.js ×1
c ×1
c++ ×1
dictionary ×1
formatting ×1
graphics ×1
http ×1
java ×1
javascript ×1
linux ×1
pixel ×1
python-3.x ×1
search ×1
string ×1
tree ×1
unix ×1