V2EX 首页   注册   登录
 begeekmyfriend 最近的时间轴更新

begeekmyfriend

Be geek, my friend!
  •   音视频工程师
  •   V2EX 第 170352 号会员,加入于 2016-04-23 22:34:34 +08:00,今日活跃度排名 11245
    B+树实现磁盘存储
    程序员  •  begeekmyfriend  •  4 天前  •  最后回复来自 wangjie
    18
    kNN 算法的 kd 树实现( C 源码)
    程序员  •  begeekmyfriend  •  5 天前  •  最后回复来自 wujunze
    5
    树形结构的调试打印
  •  6   
    程序员  •  begeekmyfriend  •  52 天前  •  最后回复来自 shijingshijing
    6
    三星手机这是要作死!
    水深火热  •  begeekmyfriend  •  93 天前  •  最后回复来自 TMily
    70
    Yasea v2.1 发布,美颜滤镜的安卓直播推流客户端
  •  2   
    Android  •  begeekmyfriend  •  127 天前  •  最后回复来自 begeekmyfriend
    7
    begeekmyfriend 最近回复了
    4 天前
    回复了 begeekmyfriend 创建的主题 程序员 B+树实现磁盘存储
    4 天前
    回复了 begeekmyfriend 创建的主题 程序员 B+树实现磁盘存储
    @AngelCriss 请给出证据,我使用 valgrind 跑过的
    4 天前
    回复了 begeekmyfriend 创建的主题 程序员 B+树实现磁盘存储
    抱歉,上楼链接放错了, V2EX 不支持删除啊: http://coolshell.cn/articles/17225.html
    4 天前
    回复了 begeekmyfriend 创建的主题 程序员 B+树实现磁盘存储
    我在一篇博文 http://www.yinwang.org/blog-cn/2017/04/17/management-tricks 写到:“索引的存储又分为有序和无序,前者使用关联式容器,比如 B 树,后者使用哈希算法。这两类算法各有优劣:比如,关联式容器时间复杂度稳定 O(logN),且支持范围查询;又比如哈希算法的查询、增删都比较快 O(1),但这是在理想状态下的情形,遇到碰撞严重的情况,哈希算法的时间复杂度会退化到 O(n)。”

    显然 nosql 一般使用的都是哈希一类数据结构,也可以用关联式容器,但从性价比上看,哈希表是最高的。
    4 天前
    回复了 begeekmyfriend 创建的主题 程序员 B+树实现磁盘存储
    @lbp0200 nosql 原本不需要 B+树,你看 redis 实现过吗? B+树本来就是为 SQL 实现的,它比 B 树的优势在于范围查询更快,因为数据都在叶子节点上,所有的叶子节点又在同一底层上
    4 天前
    回复了 begeekmyfriend 创建的主题 程序员 B+树实现磁盘存储
    @micyng 主要还是节点分裂点的选择不一样,比如我一向是(len + 1) / 2 ,而他则有时这样,有时又是 len / 2 ,导致结构不一样,但不影响效果和效率。另外我仍然保留了内存版,你可以观察效果,并且随意设置节点大小,比如把叶子设置得比非叶子更大一点: https://github.com/begeekmyfriend/bplustree/tree/in-memory
    网易云信是网易自家的狗粮,质量焉有不好之理?但缺点恰恰就在于客户生态与网易重合了,反而使得很多人不愿意用云信。
    40 天前
    回复了 wpby 创建的主题 Android 求推荐安卓看视频软件
    48 天前
    回复了 xufeng 创建的主题 Java 毕业设计 (校园直播)
    53 天前
    回复了 uuweZhou 创建的主题 程序员 二叉树中的递归有点难以理解,求解答?
    建议你先看一下我写的《树形结构的调试打印》: https://www.v2ex.com/t/338653

    不过里面是非递归用法。你可以随便写一棵二叉树,用递归插入和删除

    ```c
    void insert(struct node **n) {
    if (*n == NULL) {
    *n = malloc();
    printf(n-->value);
    }
    insert(n->left);
    insert(n->right);
    }

    void delete(struct node *n) {
    if (n != NULL) {
    delete(n->left);
    delete(n->right);
    printf(n->value);
    free(n);
    }
    }

    // demo
    insert(tree->root);
    dump(tree);
    delete(tree->root);
    ```

    无需我讲解了,该打印的打印,你就知道为何采用这种顺序。

    顺便说一下,删除可以优化
    ```c
    void delete(struct node *n) {
    if (n->left != NULL) {
    delete(n->left);
    }
    if (n->right != NULL) {
    delete(n->right);
    }
    printf(n->value);
    free(n);
    }
    ```
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   378 人在线   最高记录 2466   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 53ms · UTC 20:15 · PVG 04:15 · LAX 13:15 · JFK 16:15
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1