小编lin*_*lof的帖子

XML解析器/验证器的算法复杂性

我需要知道不同XML工具(解析器,验证器,XPath表达式求值器等)的性能如何受输入文档的大小和复杂性的影响.那里有资源记录了CPU时间和内存使用情况如何受到影响......好吧,什么?文件大小以字节为单位 节点数?关系是线性的,多项式的还是更糟的?

更新

在2008年9月41日的IEEE计算机杂志的一篇文章中,作者调查了四种流行的XML解析模型(DOM,SAX,StAX和VTD).他们运行一些非常基本的性能测试,这些测试表明,当输入文件的大小从1-15 KB增加到1-15 MB或大约1000倍时,DOM解析器的吞吐量会减半.其他型号的吞吐量不会受到显着影响.

不幸的是,他们没有进行更详细的研究,例如吞吐量/内存使用量作为节点/大小数量的函数.

这篇文章就在这里.

更新

我无法找到任何正式的治疗方法.为了它的价值,我做了一些实验,测量XML文档中节点的数量,作为文档大小的函数.我正在研究仓库管理系统,XML文档是典型的仓库文件,例如高级发货通知等.

下图显示了以字节为单位的大小与节点数(在DOM模型下应与文档的内存占用量成比例)之间的关系.不同的颜色对应于不同类型的文档.比例是log/log.黑线最适合蓝点.值得注意的是,对于各种文档,字节大小和节点大小之间的关系是线性的,但比例系数可能非常不同.

基准-bytes_vs_nodes

xml algorithm performance

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

哪个浮点比较更准确,为什么?

我正在尝试使用牛顿方法的不同实现来计算平方根.一个重要的决定是什么时候终止算法.

显然,它不会做使用之差的绝对值y*yx,其中y是的平方根的当前估计x,因为对于大的值x也可能无法代表具有足够精度的平方根.

所以我应该使用相对标准.天真的我会用这样的东西:

static int sqrt_good_enough(float x, float y) {
  return fabsf(y*y - x) / x < EPS;
}
Run Code Online (Sandbox Code Playgroud)

这看起来效果很好.但是最近我开始阅读Kernighan和Plauger的编程风格元素,他们在第1章中给出了相同算法的Fortran程序,其终止标准(用C翻译)将是:

static int sqrt_good_enough(float x, float y) {
  return fabsf(x/y - y) < EPS * y;
}
Run Code Online (Sandbox Code Playgroud)

两者在数学上是等价的,但是有理由选择一种形式而不是另一种吗?

algorithm floating-point numerical-analysis

14
推荐指数
2
解决办法
265
查看次数

测试计划/文档/管理工具

我正在寻找一个好的,最好是免费的测试计划和文档工具.理想情况下,可以跟踪哪些软件版本具有报告功能的测试.这里列出一大堆工具,但还有其他工具,哪些工具有最好的经验?(你确实运行测试,对吧?)

更新2008-01-29

到目前为止,已经提到过TestLinkFitness.一个相关的问题也产生了ReadySet项目的链接,ReadySet项目是一个开放的软件规划文档模板集合.

我使用过TestLink并发现它很好,但我不能说我很喜欢使用它.有没有人有Fitnesse的经验?或者你有没有其他免费工具,你用过,发现满意吗?

testing test-plan

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

如何更改Trac wiki中的默认登录页面?

默认的Trac安装将显示WikiStart页面作为其主页.我希望它能显示另一页.我怎么做?我无法在Google上找到任何内容,因为任何带有"Trac"的请求都会返回每个使用Trac的开源项目的链接.

bug-tracking trac

12
推荐指数
4
解决办法
5094
查看次数

我在哪里可以找到有关"现代"C编程的资源?

尽管已经阅读了K&R,甚至还教过C课程,但我发现自己难以完全理解人们可能称之为"现代"的C课程.

在现代编程中似乎有许多不成文的约定,据我所知,在任何地方都没有记录.

以,例如,SQLite源代码.在其中我找到了例如:

 SQLITE_API int sqlite3_close(sqlite3 *);
Run Code Online (Sandbox Code Playgroud)

什么SQLITE_API代表什么?这在句法上是如何正确的?

或这个:

#ifndef _SQLITE3_H_
#define _SQLITE3_H_
Run Code Online (Sandbox Code Playgroud)

是否有一个接受的约定何时使用下划线为宏添加前缀?有时我会看到前缀为两个下划线的宏.

或者使用固定大小的类型,例如uint32等等.什么时候应该使用这种做法,何时不使用?新的bool类型怎么样,什么时候应该优先于简单的整数?

当我阅读其他人的源代码时,这些是我自己提出的一些问题.有什么参考可以帮助我回答这些问题吗?

c

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

反编译汇编代码有多难(真的)?

我正在努力寻找有助于我的管理层理解对编译的C代码进行逆向工程的难易程度的事实.

之前在这个网站上已经提出了类似的问题(参见例如,是否可以"反编译"Windows .exe?或者至少查看程序集?或者可能反编译用C编写的DLL?),但这些问题的要点是反编译编译的C代码"很难,但并非完全不可能".

为了促进基于事实的答案,我包含了一个神秘函数的编译代码,我建议这个问题的答案通过它们是否可以确定这个函数的作用来衡量所提出技术的成败.这可能是不寻常的,但我认为这是获得这个工程问题的"良好主观"或事实答案的最佳方式.因此,你最好猜测这个功能在做什么,以及如何做?

这是使用gcc在Mac OSX上编译的已编译代码:

_mystery:
Leh_func_begin1:
    pushq   %rbp
Ltmp0:
    movq    %rsp, %rbp
Ltmp1:
    movsd   LCPI1_0(%rip), %xmm1
    subsd   %xmm0, %xmm1
    pxor    %xmm2, %xmm2
    ucomisd %xmm1, %xmm2
    jbe     LBB1_2
    xorpd   LCPI1_1(%rip), %xmm1
LBB1_2:
    ucomisd LCPI1_2(%rip), %xmm1
    jb      LBB1_8
    movsd   LCPI1_0(%rip), %xmm1
    movsd   LCPI1_3(%rip), %xmm2
    pxor    %xmm3, %xmm3
    movsd   LCPI1_1(%rip), %xmm4
    jmp     LBB1_4
    .align  4, 0x90
LBB1_5:
    ucomisd LCPI1_2(%rip), %xmm1
    jb      LBB1_9
    movapd  %xmm5, %xmm1
LBB1_4:
    movapd  %xmm0, %xmm5
    divsd   %xmm1, %xmm5
    addsd   %xmm1, %xmm5
    mulsd …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly decompiling reverse-engineering

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

Apache Commons for C在哪里?

可能重复:
C的类似STL的库
是否有任何具有公共数据结构的开源C库?

Apache Commons项目总是让我感到震惊,因为它是Java语言中遗忘的所有东西的库.现在我几乎总是将它默认包含在所有新项目中.

是否有相当于C编程语言的必备,必备,全包库?(我的意思是C ---而不是C++).

c data-structures

10
推荐指数
1
解决办法
1251
查看次数

如何使OSX的rand()无法进行光谱测试?

出于编程类的目的,我试图说明通常随标准C库一起出现的随机数生成器的弱点,特别rand()是OSX附带的"坏随机生成器" (请参阅联机帮助页).

我写了一个简单的程序来测试我对光谱测试的理解:

#include <stdio.h>
#include <stdlib.h>

int main() {
  int i;
  int prev = rand();
  int new;

  for (i=0; i<100000; i++) {
    new = rand();
    printf("%d %d\n", prev, new);
    prev = new;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我绘制得到的散点图时,我得到的是:

OSX兰特()的光谱测试

我会期望某些东西显示更多结构,就像在维基百科上找到的那样.我在这里做错了吗?我应该绘制更多尺寸吗?

UPDATE

按照pjs的建议,我放大了数字小于1e7的情节部分,这是我发现的:

OSX的rand()的光谱测试仅限于小于1e7的数字

我发现pjs显示完全相同的线条.它们似乎是垂直的,但这是不可能的,因为它意味着某些值被"遗漏"了rand().当我sort -n的数据是(我的样本)我看到的:

571 9596797
572 9613604
575 9664025
578 9714446
580 9748060
581 9764867
584 9815288
586 9848902
587 9865709
590 9916130
592 9949744
127774 13971
127775 30778
127780 114813
127781 …
Run Code Online (Sandbox Code Playgroud)

c random prng

10
推荐指数
1
解决办法
390
查看次数

在Scala中,为什么`println(1,2)`有效?

在Scala(2.7.7final)中,该Predef.println方法被定义为具有以下签名:

def println (x : Any) : Unit
Run Code Online (Sandbox Code Playgroud)

怎么来,那么以下工作:

scala> println(1,2)  
(1,2)
Run Code Online (Sandbox Code Playgroud)

编译器是否自动将以逗号分隔的参数列表转换为元组?通过什么魔术?这里是否存在隐式转换,如果是,那么哪一个?

scala tuples implicit-conversion

9
推荐指数
1
解决办法
428
查看次数

如何在C中存根套接字?

我编写了客户端代码,它应该通过套接字发送一些数据并从远程服务器读回答案.

我想对该代码进行单元测试.函数的签名是这样的:

double call_remote(double[] args, int fd);
Run Code Online (Sandbox Code Playgroud)

其中fd是远程服务器的套接字的文件描述符.

现在,该call_remote函数将在发送数据后阻止从服务器读取答案.如何对这样的远程服务器进行存根以对代码进行单元测试?

理想情况下,我想要像:

int main() {
  int stub = /* initialize stub */
  double expected = 42.0;

  assert(expected == call_remote(/* args */, stub);

  return 0;
}

double stub_behavior(double[] args) {
  return 42.0;
}
Run Code Online (Sandbox Code Playgroud)

我希望stub_behavior被调用并将42.0值发送到存根文件描述符.

我能做到的任何简单方法吗?

c c++ sockets unit-testing stub

9
推荐指数
1
解决办法
2443
查看次数