数据结构与算法复习(一) 散列查找

常用的查询方法与时间复杂度

顺序查找 O(N)

二分查找 O(log2N)

二叉搜索树 O(h)

平衡二叉树 O(log2N)

以上无论哪种方法面临大的数据库时,都会出现问题,得想法找到时间复杂度为O(1)的查询方法,散列查找就是这种算法

散列查找的两项基本工作与基本思想:

1 计算位置:构造散列函数。以关键字key为自变量,通过散列函数h,计算出对应的函数值h(key),作为数据对象的存储地址

2 解决冲突:解决多个关键词位置相同的问题。

 

散列函数的构造方法:

1 直接定址法 取关键词的某个线性函数值为散列地址

2 除留取余法

3 数字分析法 分析数字关键字在各位上的变化情况,取比较随机的位作为散列地址

4 折叠法

5 平方取中法

处理冲突的方法

1 换个位置   开放地址法

   

 

2  同一位置的冲突对象组织在一起  链地址法

 

附上自己在leetcode第一题的解法

class Solution {
public:
    vector twoSum(vector& nums, int target)
    {
        vector find_result;
        map TestHashMap;
        for(int i=0;i         {
            int minus_result = target - nums[i];
            
            if(TestHashMap.find(minus_result)!=TestHashMap.end())
            {
                find_result.push_back(TestHashMap[minus_result]);
                find_result.push_back(i);
                return find_result;
            }
            TestHashMap[nums[i]]=i;
        }
        return find_result;
    }
};

 

 

 

你可能感兴趣的:(数据结构)