小编Wil*_*ill的帖子

打印一边的二叉树

如何在其侧面打印二叉树,以便输出如下所示?

   __/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)

python formatting tree

16
推荐指数
1
解决办法
2549
查看次数

将四边形图像提取为矩形

A photo

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)

graphics interpolation pixel

15
推荐指数
2
解决办法
8747
查看次数

是默认情况下隐式保持活动的HTTP/1.1请求?

解决了:粘贴这里的字节让我意识到我错过了大块之间的空行......


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没有退出.

哪里是我的错误?

http

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

通过引用切片到不可变的字符串而不是复制

如果在Python 字符串.split()上使用字符串,则返回字符串列表.这些已拆分的子字符串是其父字符串部分的副本.

是否有可能获得一些更便宜的切片对象,只保留参考,偏移和长度分割出的位?

是否有可能有一些"字符串视图"来提取和处理这些子字符串,就像它们是字符串而没有复制它们的字节一样?

(我问,因为我有很大的字符串,我想要切片,偶尔会耗尽内存;删除副本将是一个廉价的配置文件引导的胜利.)

python

15
推荐指数
2
解决办法
2793
查看次数

创建字节数组的缓存

在我的代码中,它通常在服务器上运行,我不控制配置,我有用户集合,每个用户都有一个byte[]数组.

有时这些byte[]数组对用户来说是唯一的.但是,通常会有大量用户使用完全相同的byte[]数组.

我试图减少我的服务器的RAM消耗.

我已经尝试将我的byte[]数组转换成字符串并实习它们,但后来我经常遇到PERM-GEN内存不足错误.当我想byte[]为用户访问数组时,我也发现编码/解码会导致显着的性能下降,而且我看到更糟糕的内存使用情况 - 预备字符串比数组大得多.

Set<SoftReference<byte[]>>当Java数组不可清除时,我如何进行查找?SoftReferences不会将对象的哈希值包装在其中.A Map<byte[],SoftReference<byte[]>>显然也在打败自己,因为关键本身并阻止收集; 并且无论如何Set都是内部实施的Map.

那我怎么能实习 byte[]数组呢?

java garbage-collection

14
推荐指数
1
解决办法
4212
查看次数

手工编写asm.js

我试图将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)

javascript asm.js

13
推荐指数
1
解决办法
3306
查看次数

Linux上的性能分析

在*nix上分析C/C++应用程序的最佳工具是什么?

(我希望能够分析一个混合了(阻塞)文件IO,epoll for network和fork()/ execv()的服务器来解决一些繁重的问题;但是一般的帮助和更一般的工具都很受欢迎.)

您是否可以在一个概述中获得RAM,CPU,网络和磁盘的大系统图片,并深入研究它?

内核列表上有很多关于类似事情的讨论perf timechart,但我还没有发现Ubuntu中出现过任何问题.

c c++ unix linux performance

12
推荐指数
1
解决办法
7483
查看次数

获取代码对象的Python函数

Python函数有一个代码对象__code__.

sys.settraceframe具有一个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函数;它会返回代码对象的注释还是它还需要一个函数对象?)

python python-3.x

12
推荐指数
1
解决办法
2402
查看次数

在一个巨大的字符串中找到长重复的子串

我天真地想象我可以构建一个后缀trie,其中我保持每个节点的访问计数,然后计数大于1的最深节点是我正在寻找的结果集.

我有一个非常长的字符串(数百兆字节).我有大约1 GB的RAM.

这就是为什么用计数数据构建后缀trie在空间方面效率太低而无法为我工作.引用维基百科的后缀树:

存储字符串的后缀树通常比存储字符串本身需要更多的空间.

每个边缘和节点中的大量信息使得后缀树非常昂贵,在良好实现中消耗源文本的存储器大小的大约十到二十倍.后缀阵列将此要求降低到四倍,研究人员继续寻找更小的索引结构.

那是维基百科对树的评论,而不是特里.

如何在如此大量的数据中以及在合理的时间内(例如在现代台式机上不到一小时)找到长重复序列?

(一些维基百科链接,以避免人们将它们作为'答案'发布:字符串算法,特别是最长的重复子字符串问题 ;-))

string algorithm performance search

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

仅在尚未设置值的情况下在dict中设置值

如果该值尚未设置,那么在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 dictionary lazy-evaluation

11
推荐指数
4
解决办法
6151
查看次数