我有一个简单的要求(也许是假设的):
我想存储英文单词字典(n个单词)并给出一个单词(字符长度为m),字典能够判断字词是否存在于字典中.什么是适合的数据结构?
一个平衡的二叉搜索树?在C++ STL关联数据结构中完成,如set,map
要么
字符串上的特里
一些复杂性分析: 在平衡的bst中,时间将是(log n)*m(比较2个字符串需要O(m)个时间字符)
在trie中,如果在每个节点,我们可以在O(1)时间内分支,我们可以找到使用O(m),但假设在每个节点,我们可以在O(1)时间内分支是无效的.在每个节点,最大可能分支将是26.如果我们在节点处想要O(1),我们将在每个节点上的字符上保持一个短数组索引.这将炸毁空间.在trie中的几个级别之后,分支将减少,因此最好保留下一个节点字符和指针的链接列表.
什么看起来更实用?任何其他权衡?
谢谢,
我正在阅读操作系统中的同步章节,并正在阅读"监视器"主题.我知道监视器是高级语言结构.这让我想知道C是否提供像监视器这样的东西?也许包含posix线程实现的库也应该提供监视器构造.另外,C中的线程不是stl的一部分,对吧?
如果是,哪个头文件/库包含它,最基本的测试程序使用监视器以及库如何实现监视器.
该书说监视器类型是ADT - 抽象数据类型.我想知道,C结构是否模拟了监视器数据类型?
谢谢,
我在这个网站上的第一篇文章抱有很大的希望::我试图通过gcc了解静态链接,动态链接,共享库,静态库等.每当我尝试深入研究这个话题时,我都会有一些我不太了解的东西.
一些实践工作:
bash$ cat main.c
#include "printhello.h"
#include "printbye.h"
void main()
{
PrintHello();
PrintBye();
}
bash$ cat printhello.h
void PrintHello();
bash$ cat printbye.h
void PrintBye();
bash$ cat printbye.c
#include <stdio.h>
void PrintBye()
{
printf("Bye bye\n");
}
bash$ cat printhello.c
#include <stdio.h>
void PrintHello()
{
printf("Hello World\n");
}
gcc -Wall -fPIC -c *.c -I.
gcc -shared -Wl,-soname,libcgreet.so.1 -o libcgreet.so.1.0 *.o
ln -sf libcgreet.so.1.0 libcgreet.so
ln -sf libcgreet.so.1.0 libcgreet.so.1
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个共享库.现在我想将此共享库与我的主程序链接以创建可执行文件.
gcc -Wall -L. main.c -lcgreet -o greet
它非常好用,如果我在运行greet之前设置LD_LIBRARY_PATH(或用rpath选项链接它),我可以使它工作.
然而我的问题是不同的:因为我无论如何都使用共享库,是不是可以在运行时强制符号解析(不确定术语,但可能根据书"链接器和加载器"称为动态链接).我知道我们可能不想这样做,因为这会使程序运行缓慢并且每次我们想要运行程序时都有开销,但我试图理解这一点以清除我的概念.
gcc链接器是否提供了在运行时延迟符号解析的任何选项?(用我们实际上要运行程序的库来实现)(因为在编译时可用的库可能与运行时可用的库不同,如果库中有任何更改)我希望能够做到:
bash $ …
我有时会在信息检索,搜索引擎,爬虫等环境中听到esp,我们可以通过散列页面内容来检测重复页面.什么样的散列函数能够散列整个网页(至少2个寻呼机),这样2个副本具有相同的散列输出值?典型哈希输出值的大小是多少?
这样的哈希函数是否能够在同一个桶中放置两个类似的网页,其中有轻微的错别字等?
谢谢,
我正在阅读张开树的基础知识.n次操作的摊余成本为O(log n).一些粗略的基本思想是当你访问一个节点时,你展开它,即你把它带到root,这样下次快速访问它时,如果节点很深,它会增强树的平衡性.
我不明白树如何为此示例输入执行摊销O(log n):
假设已经构建了n个节点的树.接下来的n个操作是n次读取.我在深度n处访问深度节点.这需要O(n).确实,在访问之后,树将变得平衡.但是每次我访问最新的深度节点时说.这永远不会小于O(log n).那么我们如何能够弥补第一次昂贵的O(n)操作,并将每次读取的摊销成本计算为O(log n)?
谢谢.
我想知道在使用我们的笔记本电脑/台式机时,我们每天遇到的实际例子或进程间通信(IPC)的实例(发生在引擎盖下或其他情况下).我总是从教科书中理论上读到这些.
例如:
在父进程和子进程之间:Linux中的一个例子我知道shell启动其他进程时我们可以使用进程ID杀死这些进程.
在两个不相关(在层次结构中)但合作的过程之间?
维基百科中的文章得到编辑。它们可以增长/缩小/更新等。下面使用什么文件系统/数据库存储布局等来支持它。在数据库课程中,我已经阅读了一些有关可变长度记录的信息,但是对于小字符串而不是整个文档来说,这似乎更多。就像在文件系统中一样,文件可以增长/缩小等,我认为可以通过将块链接在一起来完成。每次,我们更新一个文件,而不是整个文件都被重写。也许这里会做类似的事情。
我正在寻找特定的名称,术语,甚至可能是如何定义mysql中的架构。(我认为维基百科使用mysql)。
以下是有关Wikipedia体系结构的一些文章的链接,但我无法从这些问题中回答我的问题:
http://dom.as/uc/workbook2007.pdf
谢谢,
我的一般理解是典型的数据库管理系统绕过文件系统是否正确?我知道他们在磁盘上管理自己的空间,他们将实际数据和索引系统(如B树)直接写入磁盘块,绕过文件系统的任何中间帮助.
这假设root将为数据库用户提供直接从磁盘块读取和写入的权限.在Linux中,由于可以将磁盘视为文件,因此这仍然更容易.
任何指向真实案例研究的指针都将不胜感激.
我开始学习Java并在java中编写我的第一个实用程序类,它们应该在生产中.当它处理异常时我有些迷茫.关于给定代码行中有多少个try语句,是否有一些大概的数字?
应该有多少代码处理异常.. Eclipse的任何插件?
最佳做法是在try块中包含3-4个语句并捕获异常或在try块中包含10-12行,然后包含2-3个catch语句,捕获不同类型的异常,例如由File相关或由我自己抛出课程或其他一些第三方课程..?前者对眼睛有点不悦,而且代码太膨胀了......
这种常见的做法是只围绕try块中的那个代码,它可以抛出异常,或者可以很好地标记周围的代码以及内部尝试说明如何使用文件句柄等.
任何指针..?
我想sed在Perl中做类似的事情,即能够删除与特定模式匹配的行.
鉴于此输入:
abcd
edfd
abcd
derder
abcd
erre
Run Code Online (Sandbox Code Playgroud)
我想删除包含的行bc.我怎样才能做到这一点?
algorithm ×3
database ×2
dictionary ×2
mysql ×2
storage ×2
tree ×2
c ×1
c++ ×1
compilation ×1
concurrency ×1
exception ×1
filesystems ×1
gcc ×1
hash ×1
indexing ×1
java ×1
linker ×1
linux ×1
perl ×1
process ×1
splay-tree ×1
wikipedia ×1
windows ×1