像treap这样的随机二进制搜索树以高概率提供了良好的性能(按O(log n)的顺序),同时避免了像AVL,red-blackm,AA等确定性平衡树所需的复杂(和昂贵)重新平衡操作. .
我们知道,如果我们将随机密钥添加到简单的BST中,我们可以预期它是合理平衡的.一个简单的原因是n个节点的非均衡树的数量远远低于"几乎平衡的"树的数量,因此,插入密钥的随机顺序很可能以可接受的树结束.
在这种情况下,在"计算机程序设计的艺术"中,Knuth给出了一点点多于1.3*lg2(n)作为相当好的路径的平均长度.他还说,从随机树中删除一个随机密钥可以保持其随机性(因此它具有良好的平均平衡).
那么,似乎二进制搜索树以随机顺序插入和删除密钥,很可能为所有三个操作提供O(log n)顺序的性能:搜索,插入和删除.
也就是说,我想知道以下方法是否会提供相同的良好属性:
举例来说,按顺序插入的密钥{4,3,5,1,2}的BST将是:
4
/ \
3 5
/\
1 2
Run Code Online (Sandbox Code Playgroud)
假设哈希函数将它们映射到(分别){221,142,12,380,18),我们就会得到.
221(4)
/ \
142(3) 380(1)
/ \
12(5) 18(2)
Run Code Online (Sandbox Code Playgroud)
关键点是"常规"BST可能会退化,因为键是按照用于将它们存储在树中的相同排序关系插入的(它们的"自然"排序,例如字符串的字母顺序)但是哈希函数在键上引入与"自然"完全无关的排序,因此,应该给出与按随机顺序插入键相同的结果.
一个强有力的假设是哈希函数是"好的",但我认为它不是一个不合理的.
我没有在文献中找到任何类似方法的参考,所以它可能是完全错误的,但我不明白为什么!
你觉得我的推理有什么缺点吗?有人已经尝试过吗?
我正在编写一个抓取一组网页的应用程序.我不想获取页面的整个源代码,而是将所有内容存储起来并存储,并能够将页面作为纯文本存储在数据库中.内容将在其他应用程序中使用,而不是由用户阅读,因此不需要它完全是人类可读的.
起初,我正在考虑使用正则表达式,但我无法控制网页的有效性,并且很有可能没有正则表达式会给我内容.
如果我在字符串中有源代码,我怎样才能将该源代码串转换为C#中的内容?
有没有办法搜索(存储过程,函数,视图)的集合来使用常量?
我有一个问题,我有一个SQL服务器数据库.它声明了很多存储过程和函数.我正在寻找"115"的用法,这恰好是付费代码.我原本没有编写所有代码,因此我正在寻找声明常量的任何地方,或字面意思使用字符串"115".
我正在构建一个涉及创建几个独特的UI"小部件"的应用程序,我很难找到一个很好的做法,用jQuery封装这些UI组件背后的逻辑.这些主要是一次性组件,不会在应用程序的多个位置重复使用.
我一直在尝试使用lowpro插件,虽然它确实允许我想要的更多或更少,但我觉得我正在使用它来反对"jQuery方式".
为了提供一些上下文,这里是我使用lowpro编写的缩写的缩写.这是一个可排序的列表,其他元素可以成为药物.当它初始化为空时,它会显示一个占位符.
FieldList = $.klass({
initialize: function() {
this.placeholder = $('#get-started-placeholder');
if (this.items().length == 0) {
this.deactivateList();
} else {
this.activateList();
}
},
items: function() {
return this.element.children('li:visible');
},
deactivateList: function() {
this.element.hide();
this.element.sortable('destroy');
this.placeholder.show();
var instance = this;
this.placeholder.droppable({
hoverClass: 'hovered',
drop: function(e, ui) { instance.receiveFirstField(ui.helper); }
});
},
activateList: function() {
this.placeholder.hide();
this.placeholder.droppable('destroy');
this.element.show();
var instance = this;
this.element.sortable({
placeholder: 'placeholder',
forcePlaceholderSize: false,
tolerance: 'pointer',
handle: 'h4',
opacity: 0.9,
zIndex: 90,
stop: function(e, …Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的应用程序.它汇编很好.不幸的是,当我构建和运行时,它甚至在第一行代码之前就失败了,因此我甚至无法调试它.
我从哪里开始?我确实有堆栈轨道.
不同的数据库服务器使用不同的方式引用和转义标识符
例如,"foo bar"vs"foo bar"vs [foo bar],或"10"""vs"10 \"",或者某些数据库需要引用FooBar或数组等标识符,而其他数据库则不需要引用.
是否有任何API方法可以为给定的数据库连接正确执行引用/转义?或任何替代解决方案?
我正在批处理文件中运行PowerShell脚本.该脚本获取一个网页并检查该页面的内容是否为字符串"OK".
PowerShell脚本向批处理脚本返回错误级别.
批处理脚本由ScriptFTP执行,ScriptFTP是一个FTP自动化程序.如果发生错误,我可以让ScriptFTP通过电子邮件将完整的控制台输出发送给管理员.
在PowerShell脚本中,如果它不是"OK",我想从网站输出返回值,因此错误消息包含在控制台输出中,因此也包含在状态邮件中.
我是PowerShell的新手,不知道要使用哪个输出函数.我可以看到三个:
用什么来写Windows等价的东西是正确的stdout?
取自http://www.ocf.berkeley.edu/~wwu/riddles/cs.shtml
它看起来非常适合我的编译器.不知道在哪找?
我有以下代码(它是"示例"代码,所以没什么特别的):
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
char buffer[9];
int fp = open("test.txt", O_RDONLY);
if (fp != -1) // If file opened successfully
{
off_t offset = lseek(fp, 2, SEEK_SET); // Seek from start of file
ssize_t count = read(fp, buffer, strlen(buffer));
if (count > 0) // No errors (-1) and at least one byte (not 0) was read
{
printf("Read test.txt %d characters from start: %s\n", offset, buffer);
}
close(fp);
}
int …Run Code Online (Sandbox Code Playgroud)