zoukankan      html  css  js  c++  java
  • 算法06

    哈希函数的特性:

    • 哈希函数的输入是无穷的
    • 哈希函数的输出是有限的
    • 哈希函数对于同一个数据,返回的结果是一样的,不是随机的
    • 由于输入是无穷的,输出是有限的,则必然多个输入会对应同一个输出
    • 哈希函数的返回具有离散型,对于很多个不同的输入,一定会出现相同的输出,相同的输出具有均匀分布的特点 (加入输入是(0,99),输出是(0,1),那么输出的 0 1 会均匀分布) 
    • 补充:哈希函数有很多种,内部的结构很复杂,假如我们需要一千种不同的哈希,我们是不是要找一千种哈希函数,其实不需要,我么可以根据一个哈希函数得到我们想要的一千种结果。假如哈希函数返回一个16位的16进制的数,我们可以分为 H1 = 高八位,H2 = 低八位  H(新) = H1 + bH2 ,b的值可以所以改变,现在得到的新的哈希值和原来的哈希值不具备正向相关。

    实力不够,以后接着写

    。。。。。。。。。。。。。。。。。。。。。。。。。

    求最大连续子串的和:一个循环,如果求到某个值是个负数,则舍弃前面的数。

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int a, b[100];  //a代表输入数字的长度  b用来接收数字
        cin >> a;
        for (int i = 0; i < a; i++)
        {
            cin >> b[i];
        }
        int item = -99999, thissum = 0;
        for (int i = 0; i < a; i++)
        {
            thissum += b[i];
            if (thissum < 0)
            {
                thissum = 0;
            }
            if (thissum > item)
            {
                item = thissum;
            }
        }
        cout << "最长子序列:" << item<<endl;
        return 0;
    
    }
    View Code

     最小和问题:一个数字数组,下标为0的数如果比下标为1的数小,则下标为0的数是最小和,下标为最后一个数的数比下标为最后一个数的前一个数的数小,则下标为最后一个数的数是最小和,其次下标不是最后和最前的数必须比他两端的数还要小才是最小和,给出一个这样的数组,求出任意一个最小和,我们可以使用二分来做这个题

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int a, b[100]; //a表示这个数字数组的的长度,b用来存贮这组数字,这些数字不会重复
        cin >> a;
        for (int i = 0; i < a; i++)
        {
            cin >> b[i];
        }
        int lef = 0;
        int rit = a - 1;
        int min,mid;
        if (b[lef] < b[lef + 1])
        {
            min = b[lef];
        }
        else if (b[rit] < b[rit - 1])
        {
            min = b[rit];
        }
        else
        {
            while (lef < rit)
            {
                mid = lef + ((rit - lef) >> 1);
                if (b[mid] < b[mid + 1] && b[mid] < b[mid - 1])
                {
                    min = b[mid];
                    break;
                }
                else if (b[mid] > b[mid + 1])
                {
                    lef = mid;
                }
                else
                {
                    rit = mid;
                }
            }
        }
        cout << "最小和:" << min << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    【题解】Codeforces Round #600(Div.2)
    【题解】CF 1073 G. Another LCP
    【题解】CF 1129C. Morse Code
    【题解】CF 1200E. Compress Words
    Cpp Chapter 8: Adventures in Functions Part4
    Cpp Chapter 8: Adventures in Functions Part3
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Exercise
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Part 4
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Part 3
    Python Chapter 9: 使用Tkinter进行GUI程序设计 Part 2
  • 原文地址:https://www.cnblogs.com/luojianyi/p/9642738.html
Copyright © 2011-2022 走看看