免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1426 | 回复: 3
打印 上一主题 下一主题

关于GLIB中GTree的几个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-12 14:48 |只看该作者 |倒序浏览
GLIB的在线文档很简单.
但基本信息还是有.
GTree就是一棵按照g_tree_new 时给定的比较函数构造
的平衡二叉树.

GLIB对此提供了几个用于查找的函数
其中一个是

  1. gpointer    g_tree_lookup    (GTree *tree,gconstpointer key);

  2. Gets the value corresponding to the given key. Since a GTree is automatically balanced as key/value pairs are added, key lookup is very fast.
复制代码

这个很明白,他用构造这棵树时使用的比较函数作为默认的比较函数来进行查找.

但是另一个就让我有点困惑了.

  1. gpointer    g_tree_search                   (GTree *tree,
  2.                                              GCompareFunc search_func,
  3.                                              gconstpointer user_data);

  4. The search_func is called with a pointer to the key of a key/value pair in the tree, and the passed in user_data. If search_func returns 0 for a key/value pair, then g_tree_search_func() will return the value of that pair. If search_func returns -1, searching will proceed among the key/value pairs that have a smaller key; if search_func returns 1, searching will proceed among the key/value pairs that have a larger key.
复制代码

这个函数允许使用者提供一个比较函数来进行查找.
这个比较函数显然可以不同于构造该树时使用的那个,否则就没有这个必要了.
在线文档里说的也有点含混,所谓"smaller"和"larger"是针对原来的构造比较函数而言还是对使用者提供的新的比较函数而言.

如果指的是原来构造树用的比较函数,那显然说不太通.
所以我还是倾向于认为他指的是使用者提供的新的比较函数.

这样就有个问题,调用这个函数的查找效率能得到保证吗?
这种怀疑的依据是
显然调用该函数不会针对新的比较函数构造一棵新的平衡二叉树.因为这样做会产生巨大的开销;
那要实现查找功能只能遍历整棵树?想想也不可能,如果要遍历整棵树查找某个KEY值的话只需要给出KEY值就行了,又何必多出一个比较函数.

难道调用该函数会对树针对新的比较函数做某些优化还是别的什么.

真的想不通了.

论坛徽章:
0
2 [报告]
发表于 2004-10-12 14:57 |只看该作者

关于GLIB中GTree的几个问题

上面写的认识有点错误.
遍历整棵树来查找某个KEY值也需要比较函数.
比较函数用来定义两个KEY相等的条件.

但我还是想g_tree_search这函数不会真的去遍历整棵树吧.
但除此之外还有什么办法在一棵按照其他比较函数建立的平衡二叉树上实现查找功能呢?

在讲到g_tree_lookup    函数时,用了"very fast".
在讲g_tree_search时没用.
可想效率肯定存在很大区别.但会不会慢到O(n)那样呢.

论坛徽章:
0
3 [报告]
发表于 2004-10-12 16:04 |只看该作者

关于GLIB中GTree的几个问题

临走前顶一下.
没有哪位用过这东西吗
谈谈实际效率如何.

论坛徽章:
0
4 [报告]
发表于 2004-10-13 09:43 |只看该作者

关于GLIB中GTree的几个问题

UP
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP