四十个亿个整数,快速判断是否存在

Posted zquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四十个亿个整数,快速判断是否存在相关的知识,希望对你有一定的参考价值。

 class Program
    {
        static void Main(string[] args)
        {
            //10
            //524156
            //5465
            //4546
            //1234567891
            //999999999
            //4
            //8
            //82
            //54654
            //564465456
            uint number;
            number = Convert.ToUInt32(Console.ReadLine());
            for (uint i = 0; i < number; i++)
            {
                string temp = Console.ReadLine();
                Control.buildByte(temp);
            }

            while (true)
            {
                uint temp = Convert.ToUInt32(Console.ReadLine());
                if (Control.judgeExist(temp))
                {
                    Console.WriteLine("存在");
                }
                else
                {
                    Console.WriteLine("不存在");
                }
            }
        }
 class Control
    {
        public static byte[] data = new byte[FileContorl.LIMIT_MAX / 8 + 1];
        public static bool judgeExist(uint number)
        {
            uint index_data = number / 8;
            uint pos_wei = number % 8;
            byte positioning = data[index_data];
            string tempPositioning = Convert.ToString(positioning, 2);
            int len = tempPositioning.Length;
            if (tempPositioning.Length < 8)
            {
                for (int i = len; i < 8; i++)
                {
                    tempPositioning = 0 + tempPositioning;
                }
            }
            char[] positioningChar = tempPositioning.ToCharArray();
            if (positioningChar[pos_wei] == 1)
                return true;
            else
                return false;      
        }

        public static void buildByte(string dataString)
        {        
            uint temp = Convert.ToUInt32(dataString);
            uint index_data = temp / 8;
            uint pos_wei = temp % 8;
            byte positioning = data[index_data];
            char[] positioiningChar = byteToChar(positioning);
            positioiningChar[pos_wei] = 1;
            data[index_data] = CharToByte(positioiningChar);
        }

        public static char[] byteToChar(byte positioning)
        {
            string tempPositioning = Convert.ToString(positioning, 2);
            int len = tempPositioning.Length;
            if (len < 8)
            {
                for (int i = len; i < 8; i++)
                {
                    tempPositioning = 0 + tempPositioning;
                }
            }
            char[] positioningChar = tempPositioning.ToCharArray();
            return positioningChar;
        }

        public static byte CharToByte(char[] positioningChar)
        {
            byte temp;
            string result = "";
            for (int i = 0; i < positioningChar.Length; i++)
            {
                result += positioningChar[i];
            }
            temp = Convert.ToByte(result,2);
            return temp;
        }
    }

 

判读一个整数是否存在,其实就是0跟1的区别,用了位图法,用byte存储,一个byte一个字节,有八位,可以存储8个数字是否存在。

以上是关于四十个亿个整数,快速判断是否存在的主要内容,如果未能解决你的问题,请参考以下文章

面试官:如何在十亿个单词字典中,判断某个单词是否存在?(布隆过滤器)

如何判断一个数是否在40亿个整数中?

漫画:如何判断一个数是否在40亿个整数中?

漫画:如何判断一个数是否在40亿个整数中?

位图与布隆及大数据处理题型分析

比特博文|位图布隆过滤器