博客作业05--查找

1.学习总结

1.1查找的思维导图

各种查找的时间复杂度,ASL成功,不成功。都要体现。

 

1.2 查找学习体会

首先我认为学习查找是十分必要的,在这个大数据时代,如果不能利用搜索引擎很快地查找到自己想要的技术资料的话,那么会很悲剧!特别是面对新技术的时候,由于资料特别少,就算有,大部分也是英文资料。如果这时候,你查找资料的能力比不上别人的话,很有可能就会在新一轮的技术竞赛中被甩在后面。我们要跟上时代,就要学习数据的处理和资料的查找技能。这一章的学习,逻辑性很强,让我受益匪浅。从繁琐到简单,到时间复杂度一直降低,我觉得技术是不断完善的过程,我也应该不断进步。

2.PTA实验作业(4分)


2.1

1.题目1:6-2 是否二叉搜索树

2. 设计思路(伪代码或流程图)

bool IsBST(BinTree T)

{      若T是空树则是二叉树;

        中序遍历该树得到的新节点的值一定要大于前一个值,否则返回false;

        返回true;

}

3 代码截图

 

4. PTA提交列表说明。

部分正确:用了比较简单的思路,导致有两个试点不能过,用了老师教的中序遍历和递归一起使用,代码量也少了,各方面的特殊情况都可以通过。

2.2

1.题目2:6-3 二叉搜索树中的最近公共祖先

2. 设计思路

 int search(Tree T,int u);

int LCA(Tree T,int u,int v)

{

       若树为空或者u或v不在该树中,error;,

      若u或者v就是根节的值,return T->Key;

      若u或者v在同一棵子树上,return T->key;

      若u小于T->key 最近共同祖先在左子树上;

      若u大于T->key 最近共同祖先在右子树上;

}

int search (Tree T,int u)

(

    若树为空:则不在;

    查找该树:

                若找到等值的Key,则u在该树中;

                否则不在;

}

3.代码截图

 

2.4 PTA提交列表说明

 

有些情况没有考虑到,导致了部分正确

2.3

1.题目3:7-1 QQ帐户的申请与登陆

2. 设计思路

 这个超出了我的能力,属于百度了解的题

3. 代码截图

 

3.截图本周题目集的PTA最后排名

 

4. 阅读代码

hash_map,顾名思义,就是利用hash_set存储结构的写map映照容器,普通的map用的是红黑树存储结构写的。元素的检索时间对比,hash_set近似为O(1),红黑树为O(logn)。Hash_map的空间开销要比map 的空间开销大,尤其是我用数组模拟指针写的hash_map。

所以,如果有必要采取映射结构的时候,能用hash_map就别用map。

需要注意的是,hash_map遍历出来的元素不是有序的。

Hash_map和普通hash_set相比的话,hash_map比hash_set多了一张value表,也就是映射表。

下面是hash_map的模板,和hash_set的模板差不多。

template<class KeyType,int MaxHash>
struct HashFunction
{
    int operator()(const KeyType& key)
    {
        int h=key%MaxHash;
        if (h<0) h+=MaxHash;
        return h;
    }
};

template<class KeyType,class ValueType,int KeyContain,int MaxHash,class HashFun=HashFunction<KeyType,MaxHash> >
class HashMap
{
public:
    HashMap():hashfun(){Clear();}
    ValueType& operator[](const KeyType& key)
    {
        int h=hashfun(key);
        int pos=head[h];
        for(;pos!=0;pos=next[pos])
        {
            if(keys[pos]==key)
                return values[pos];
        }
        next[++top]=head[h];
        head[h]=top;
        keys[top]=key;
        values[top]=ValueType();//初始化
        ++sz;
        return values[top];
    }
    void Clear()
    {
        memset(head,0,sizeof(head));
        memset(next,0,(top+1)*sizeof(int));
        top=0;
        sz=0;
    }
    unsigned int size() const {return sz;}

private:
    unsigned int sz;
    HashFun hashfun;
    int head[MaxHash];
    int next[KeyContain];
    KeyType keys[KeyContain];
    ValueType values[KeyContain];
    int top;
};

 

posted on 2018-05-27 19:57  信管1712林萍  阅读(112)  评论(1编辑  收藏  举报