海量資料查詢唯一資料問題

2021-09-06 11:41:12 字數 1971 閱讀 9560

常見的問題有以下幾類:

問題一:有101個數,為[1,100]之間的數,其中乙個數是重複的,如何尋找這個重複的數,其時間複雜度和空間複雜度是多少?

方法:利用和

sum1=1+2+3+.....99;

sum2=a[0]+a[1]+.....a[99];

sum2-sum1=重複的那個值

int onlyonerepeate(int *iarray,int

length)

return summax -sum;

}

另外的方法:我們可以建立乙個長度為length大小的陣列,並且初始化為0:

int *ncount = new

int[length];

ncount[ ] = ;

for(int i = 0;i < length; i++)

此演算法就是申請了乙個大小為:length*4位元組的空間,在一定程度上空間複雜度提高了;但是,在時間複雜度上有所降低。

問題二:有大量的資料,其中只有乙個數字出現了一次,其他的數字至少出現了兩次,如何找出這個只出現一次的數字,要求用最小時間複雜度和空間複雜度。

方法:利用a^b^b=a的原理

直接 a[0]^a[1]^.....a[99] = 只出現一次的那個值.

問題三:陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。

陣列中有個數字出現的次數超過了陣列長度的一半。也就是說,有個數字出現的次數比其他所有數字出現次數的和還要多。因此我們可以考慮在遍歷陣列的時候儲存兩個值:乙個是陣列中的乙個數字,乙個是次數。當我們遍歷到下乙個數字的時候,如果下乙個數字和我們之前儲存的數字相同,則次數加1。如果下乙個數字和我們之前儲存的數字不同,則次數減1。如果次數為零,我們需要儲存下乙個數字,並把次數設為1。由於我們要找的數字出現的次數比其他所有數字出現的次數之和還要多,那麼要找的數字肯定是最後一次把次數設為1時對應的數字。

基於這個思路,我們不難寫出如下**:

bool g_binputinvalid = false;//

//input: an array with "length" numbers. a number in the array

////

//"length / 2 + 1" times. otherwise, return 0 and set flag g_binputinvalid

//to be true.

//int morethanhalfnum(int* numbers, unsigned int

length)

g_binputinvalid = false

;

int result = numbers[0

];

int times = 1

;

for(int i = 1; i < length; ++i)

else

if(numbers[i] ==result)

times++;

else

times--;

}//verify whether the input is valid

times = 0

;

for(int i = 0; i < length; ++i)

if(times * 2

<=length)

return

result;

}

在上述**中,有兩點值得討論:

(1)我們需要考慮當輸入的陣列或者長度無效時,如何告訴函式的呼叫者輸入無效。關於處理無效輸入的幾種常用方法;

(2)本演算法的前提是輸入的陣列中的確包含乙個出現次數超過陣列長度一半的數字。如果陣列中並不包含這麼乙個數字,那麼輸入也是無效的。因此在函式結束前我還加了一段**來驗證輸入是不是有效的。

跟我學SQL 一 資料查詢

且不說你是否正在從事程式設計方面的工作或者不打算學習 sql,可事實上幾乎每一位開發者最終都會遭遇它。你多半還用不著負責建立和維持某個資料庫,但你怎麼著也該知道以下的一些有關的 sql知識。我為那些感興趣的開發者或者能從資料庫操作中得益的讀者撰寫了這篇關於基本 sql語法的概述性文章。本文主要討論基...

多執行緒生成海量資料和多執行緒海量資料查詢

using system using system.collections.generic using system.linq using system.text using system.threading using system.diagnostics namespace multithrea...

從海量資料查詢有或者沒有出現的資料

現在有1千萬個隨機數,隨機數的範圍在1到1億之間。現在要求寫出一種演算法,將1到1億之間沒有在隨機數中的數求出來。解決辦法 一 用乙個32位的整數32位表示32個數,1億 32 3125000,使用3.125 4m byte空間即可儲存1億個數,即index 3125000 二 對於數n,n 1 3...