由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 构建一个快速查询字典(数据结构题)?
相关主题
reading STL list implementation请推荐本 STL 的好书
c++ stl里面有hash table吗?如何把文件内容读到2D的vector里?
good C++ open source project?定义 单链表 数组,会不会很奇怪
don't understand this list (C++ STL)并行程序能做到不用专门写么?
大家学习STL都是看SGI的文档么?NodeJS厉害
程序速读指南关于coding用IDE和vi或者emacs的效率或者优劣,请牛人为大家做(转载)
STL里面#include的问题tr1,问题
auto_ptr_array.h 疑问写一个C语言的编译器大概要多少时间?
相关话题的讨论汇总
话题: tree话题: hash话题: 查询话题: 数据结构话题: c++
进入Programming版参与讨论
1 (共1页)
c*********3
发帖数: 197
1
其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
了。
插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
词。
第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
谢谢
g*****g
发帖数: 34805
2
要我说做个数据库,建个索引就行了。50万不是太多。

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

c*********3
发帖数: 197
3
考虑过这种可能。种种情况限制,不太可能用数据库。要不也不问了。数据库就简单多
了。谢谢
c*****t
发帖数: 1879
4
Both B trees and B+ trees are for databases, not for generic in-memory
access. They are also quite complex, so forget them.
BST should be faster (for in-memory data access) and simpler and there
are a lot of libraries supporting it.
50k isn't a lot of data, so you could even try simple array, or simple
sorted array with binary search.
You could also consider hash and trie, which could be even faster.
In most cases, pre-emptive optimization is a bad idea. You should just
pick a easy to implemen

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

r*********r
发帖数: 3195
5
use patricia trie
B+ tree is not the best choice
s***e
发帖数: 122
6
C++的话用STL的map,Java的话用HashMap应该就够用了。

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

f*****Q
发帖数: 1912
7
SQLite?
r*********r
发帖数: 3195
8
using SQLite is same as using a B tree. hehe
f*****Q
发帖数: 1912
9
SQLite现在性能如何?
c***c
发帖数: 21374
10
binary search tree就可以啦

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

相关主题
程序速读指南请推荐本 STL 的好书
STL里面#include的问题如何把文件内容读到2D的vector里?
auto_ptr_array.h 疑问定义 单链表 数组,会不会很奇怪
进入Programming版参与讨论
c*********3
发帖数: 197
11
是用C++。最初实现是用STL map. 速度达不到要求。因为原来的代码不是我写的,刚刚
接手。看来我还是先看看原来的代码先。先谢谢了
t*******m
发帖数: 36
12
B+ tree主要用于database的index实现,主要是支持基于page I/O的树索引,这里不合
适。
你需要的是内存结构,但取决于你的需求。如果是普通查询,i.e., 输入一个词,返回
它的解释,用hash table: key 是词的string, value是解释,也是string. 50万个词
,每个词平均远低于10 byte (不考虑unicode), 共 5MB, 假定每个词的解释 1KB, 则
共 500MB, 全部load进内存没问题。
不要用C++ STL 的map, 那个不是hash table, 是 tree 结构,一般实现是 red-black
tree, 有很多 C++ STL extension, 如 SGI C++ STL 的 hash_map, 是hash table,
Linux GNU C++ 中也有。
如果你需要支持其他查询,如范围查询, 模糊查询,等, 你可以考虑其他结构,一般
是各种 tree

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

g*****e
发帖数: 87
13
Trie is your best bet!
http://en.wikipedia.org/wiki/Trie
o****u
发帖数: 714
14
trie 确实是个好办法,自己写一个也不复杂。这是一种单词查找树,每个节点存一个
字母,从根节点下来到叶子,就是这个字符串。 在 bst 中, log2(500000)=19, 而在
trie中,每个单词的查询时间就是单词的长度,大部分单词少于19个字母。
hash table 更快,但是最好根据需要自己设计hash function, 这样控制得比较好。速度取决于 hash 的 collision.

【在 g*****e 的大作中提到】
: Trie is your best bet!
: http://en.wikipedia.org/wiki/Trie

d****h
发帖数: 58
15
如果是load in memory, Suffix tree 也是个不错的选择:
1.build time O(n) -> on-line structured
2.space O(n)
3. searching time O(m) -> m is the search query size
s***e
发帖数: 122
16
以前还真不知道stl的map不是用的hash table,多谢提醒啊。

black

【在 t*******m 的大作中提到】
: B+ tree主要用于database的index实现,主要是支持基于page I/O的树索引,这里不合
: 适。
: 你需要的是内存结构,但取决于你的需求。如果是普通查询,i.e., 输入一个词,返回
: 它的解释,用hash table: key 是词的string, value是解释,也是string. 50万个词
: ,每个词平均远低于10 byte (不考虑unicode), 共 5MB, 假定每个词的解释 1KB, 则
: 共 500MB, 全部load进内存没问题。
: 不要用C++ STL 的map, 那个不是hash table, 是 tree 结构,一般实现是 red-black
: tree, 有很多 C++ STL extension, 如 SGI C++ STL 的 hash_map, 是hash table,
: Linux GNU C++ 中也有。
: 如果你需要支持其他查询,如范围查询, 模糊查询,等, 你可以考虑其他结构,一般

w***g
发帖数: 5958
17
如果程序运行中不需要增加单词,那么应该用perfect hash。

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

N**********d
发帖数: 9292
18
suffix tree?

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

x****u
发帖数: 44466
19
除了面试以外,你要是上来就想到设计个算法做,那是不专业的表现。
牛人会告诉你,用数据库或者用微型数据库。凡事都自己用个数据结构裸搞是软件品质
下降的万恶之源。

【在 c*********3 的大作中提到】
: 其实是个数据问题。想构建一个可快速查询的字典。很n久没有用比较复杂的数据结构
: 了。
: 插入和删除估计不多,所以性能要求不高。对查询要求比较高。字典估计有50万左右的
: 词。
: 第一想法是用B+树。不知道合适不?有别的更好的数据结构和算法没有?
: 谢谢

c*********3
发帖数: 197
20
貌似有理。
请教一下什么是专业的表现?是CS专业吗?我都不是学这个。问个问题,那里有这么多
道理。知道就指点一下。
用数据结构和软件品质好像没有什么直接联系吧!
c*********3
发帖数: 197
21
貌似有理。
请教一下什么是专业的表现?是CS专业吗?我都不是学这个。问个问题,那里有这么多
道理。知道就指点一下。
用数据结构和软件品质好像没有什么直接联系吧!
1 (共1页)
进入Programming版参与讨论
相关主题
写一个C语言的编译器大概要多少时间?大家学习STL都是看SGI的文档么?
从SGI和Nokia的失败俯瞰本版几位名ID的心路历程程序速读指南
STL doesn't have hash Table?STL里面#include的问题
Collection return type and web serviceauto_ptr_array.h 疑问
reading STL list implementation请推荐本 STL 的好书
c++ stl里面有hash table吗?如何把文件内容读到2D的vector里?
good C++ open source project?定义 单链表 数组,会不会很奇怪
don't understand this list (C++ STL)并行程序能做到不用专门写么?
相关话题的讨论汇总
话题: tree话题: hash话题: 查询话题: 数据结构话题: c++