【问题标题】:Best algorithm for finding this data in an associative array?在关联数组中查找此数据的最佳算法?
【发布时间】:2014-06-21 00:58:25
【问题描述】:

我现在正在执行一项实验室任务来制作一个 Hangman 游戏,并且我正在尝试开发一个特定的功能。我有一个关联数组,它只是一个二叉树,其中每个节点都是一个键/值对,键是一个字符串,值是一个字符串向量。这些功能对我的问题并不重要。我需要知道的是……

我需要返回一个指向包含树中最多元素的向量的指针。我试图通过深度优先搜索找到一种方法来做到这一点,但我无法确定要比较什么以及如何跟踪所有内容。

谁能给我伪代码或如何做到这一点的想法?

编辑:这是我目前的算法。

GENERIC_VECTOR* find_greatest(Node* root, MYSTRING* pattern) {
    if(root != NULL) {
        GENERIC_VECTOR* left = find_greatest(root->left, pattern);
        GENERIC_VECTOR* right = find_greatest(root->right, pattern);
        int sizeL = generic_vector_size(*left);
        int sizeR = generic_vector_size(*right);
        int sizeT = generic_vector_size(root->data->value);
        if(sizeL > sizeR) {
            if(sizeL > sizeT) {
                mystring_destroy(pattern);
                *pattern = mystring_copy(root->left->data->key);
                return left;
            } else {
                mystring_destroy(pattern);
                *pattern = mystring_copy(root->data->key);
                return &(root->data->value);
            }
        } else {
            if(right != NULL) {
                if(sizeR > sizeT) {
                    mystring_destroy(pattern);
                    *pattern = mystring_copy(root->right->data->key);
                    return right;
                } else {
                    mystring_destroy(pattern);
                    *pattern = mystring_copy(root->data->key);
                    return &(root->data->value);
                }
            } else {
                mystring_destroy(pattern);
                *pattern = mystring_copy(root->data->key);
                return &(root->data->value);
            }
        }
    } else return NULL;
}

【问题讨论】:

  • 你的努力在哪里???
  • 我花在这上面的 8 个小时还不够吗?如果我没有尝试过我能想到的一切,我就不会在这里,所以也许你可以给我一些实际的帮助?
  • @Darin... 在我检查您的努力之前,我该如何帮助您。请张贴您 8 小时的努力。
  • 更新了我当前的算法。

标签: c algorithm binary-tree associative-array depth-first-search


【解决方案1】:

由于您的 DS 是一棵树,因此您必须使用其中一种树遍历算法(即中序、全序或后序):

伪代码:

global int maxval = -1;
global NODE *max = NULL; // this pointer will contain the result!

getMaxVal(NODE *n){
    if(n!==NULL){
        if( n->val[key].length > maxval ){
            maxval = n->val[key].length;
            max = n; 
        }
            getMaxVal(n->left);
            getMaxVal(n->right); 
    }
}

【讨论】:

  • 但问题是我不能只获得最大尺寸...我不是在寻找尺寸。我正在尝试返回一个指向具有最多元素的向量(在节点的数据中)的指针。
  • @DarinBeaudreau: NODE *max 是你要找的指针!
  • @DarinBeaudreau:我的意思是,*max 将拥有具有最大元素的节点。一旦你有了这个,只需返回一个指向这个节点的向量数组的指针。
  • 另一个问题是全局变量。如果我无能为力,我从不使用全局变量。就我而言,调用全局变量的唯一时间是常量和静态值。
  • @DarinBeaudreau:在这种情况下,使用 C++ 类并将 2 个全局变量设为成员变量,并将 getMaxVal 设为成员函数。
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2012-11-03
  • 1970-01-01
相关资源
最近更新 更多