日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

抛硬币仿真实验java_探索HyperLogLog算法(含Java实现)

發布時間:2023/12/29 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抛硬币仿真实验java_探索HyperLogLog算法(含Java实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

HyperLogLog算法經常在數據庫中被用來統計某一字段的Distinct Value(下文簡稱DV),比如Redis的HyperLogLog結構,出于好奇探索了一下這個算法的原理,無奈中文資料很少,只能直接去閱讀論文以及一些英文資料,總結成此文。

介紹

HyperLogLog算法來源于論文《HyperLogLog the analysis of a near-optimal cardinality estimation algorithm》(下載地址見文末的參考文獻),可以使用固定大小的字節計算任意大小的DV,本文先介紹該算法的原理,然后通過剖析stream-lib(一個Java實現的實時計算庫)對此算法的實現來進一步理解該算法。本文追求直觀理解,所以不會太過于糾結一些數學細節,如果關心數學細節的話可以直接去看論文,論文里會有具體的證明。

基數

基數就是指一個集合中不同值的數目,比如[a,b,c,d]的基數就是4,[a,b,c,d,a]的基數還是4,因為a重復了一個,不算。基數也可以稱之為Distinct Value,簡稱DV。下文中可能有時候稱呼為基數,有時候稱之為DV,但都是同一個意思。HyperLogLog算法就是用來計算基數的。

生活中的啟發-以拋硬幣為例

拋硬幣

HyperLogLog本質上來源于生活中一個小的發現,假設你拋了很多次硬幣,你告訴在這次拋硬幣的過程中最多只有兩次扔出連續的反面,讓我猜你總共拋了多少次硬幣,我敢打賭你拋硬幣的總次數不會太多,相反,如果你和我說最多出現了100次連續的反面,那么我敢肯定扔硬盤的總次數非常的多,甚至我還可以給出一個估計,這個估計要怎么給呢?其實是一個很簡單的概率問題,假設1代表拋出正面,0代表反面:

以序列1110100110為例

上圖中以拋硬幣序列"1110100110"為例,其中最長的反面序列是"00",我們順手把后面那個1也給帶上,也就是"001",因為它包括了序列中最長的一串0,所以在序列中肯定只出現過一次,而它在任意序列出現出現且僅出現一次的概率顯然是上圖所示的三個二分之一相乘,也就是八分之一,所以我可以給出一個估計值,你大概總共拋了8次硬幣。

很顯然,上面這種做法雖然能夠估計拋硬幣的總數,但是顯然誤差是比較大的,很容易受到突發事件(比如突然連續拋出好多0)的影響,HyperLogLog算法研究的就是如何減小這個誤差。

之前說過,HyperLogLog算法是用來計算基數的,這個拋硬幣的序列和基數有什么關系呢?比如在數據庫中,我只要在每次插入一條新的記錄時,計算這條記錄的hash,并且轉換成二進制,就可以將其看成一個硬幣序列了,如下(0b前綴表示二進制數):

計算hash

最簡單的想法

根據上面拋硬幣的啟發我可以想到如下的估計基數的算法(這里先給出偽代碼,后面會有Java實現):

輸入:一個集合

輸出:集合的基數

算法:

max = 0

對于集合中的每個元素:

hashCode = hash(元素)

num = hashCode二進制表示中最前面連續的0的數量

if num > max:

max = num

最后的結果是2的(max + 1)次冪

舉個例子,對于集合{ele1, ele2},先求hash(ele1)=0b00110111,它最前面的連續的0的數量為2(又稱為前導0),然后求hash(ele2)=0b10010000111,它的前導0數量為0,我們始終只保存前導零數量的最大值,所以最后max是2,我們估計的基數就是2的(2+1)次冪,即8。

為什么最后的max要加1呢?這是一個數學細節,具體要看論文,簡單的理解的話,可以像之前拋硬幣的例子那樣理解,把最長的一串零的后面的一個1或者前面的一個1"順手"帶上進行概率估計。

顯然這個算法是非常不準確的,但是這個想法還是很有啟發性的,從這個簡單的想法跟隨下文一步一步優化即可得到最終的比較高精度的HyperLogLog算法。

分桶

最簡單的一種優化方法顯然就是把數據分成m個均等的部分,分別估計其總數求平均后再乘以m,稱之為分桶。對應到前面拋硬幣的例子,其實就是把硬幣序列分成m個均等的部分,分別用之前提到的那個方法估計總數求平均后再乘以m,這樣就能一定程度上避免單一突發事件造成的誤差。

具體要怎么分桶呢?我們可以將每個元素的hash值的二進制表示的前幾位用來指示數據屬于哪個桶,然后把剩下的部分再按照之前最簡單的想法處理。

還是以剛剛的那個集合{ele1,ele2}為例,假設我要分2個桶,那么我只要去ele1的hash值的第一位來確定其分桶即可,之后用剩下的部分進行前導零的計算,如下圖:

假設ele1和ele2的hash值二進制表示如下:

hash(ele1) = 00110111

hash(ele2) = 10010001

分桶算法

到這里,你大概已經理解了LogLog算法的基本思想,LogLog算法是在HyperLogLog算法之前提出的一個基數估計算法,HyperLogLog算法其實就是LogLog算法的一個改進版。

LogLog算法完整的基數計算公式如下:

LogLog算法

其中m代表分桶數,R頭上一道橫杠的記號就代表每個桶的結果(其實就是桶中數據的最長前導零+1)的均值,相比我之前舉的簡單的例子,LogLog算法還乘了一個常數constant進行修正,這個constant具體是多少等我講到Java實現的時候再說。

調和平均數

前面的LogLog算法中我們是使用的是平均數來將每個桶的結果匯總起來,但是平均數有一個廣為人知的缺點,就是容易受到大的數值的影響,一個常見的例子是,假如我的工資是1000元一個月,我老板的工資是100000元一個月,那么我和老板的平均工資就是(100000 + 1000)/2,即50500元,顯然這離我的工資相差甚遠,我肯定不服這個平均工資。

用調和平均數就可以解決這一問題,調和平均數的結果會傾向于集合中比較小的數,x1到xn的調和平均數的公式如下:

調和平均數

再用這個公式算一下我和老板的平均工資:

使用調和平均數計算平均工資

最后的結果是1980元,這和我的工資水平還比較接近,這樣的平均工資水平我才比較信服。

再回到前面的LogLog算法,從前面的舉的例子可以看出,

影響LogLog算法精度的一個重要因素就是,hash值的前導零的數量顯然是有很大的偶然性的,經常會出現一兩數據前導零的數目比較多的情況,所以HyperLogLog算法相比LogLog算法一個重要的改進就是使用調和平均數而不是平均數來聚合每個桶中的結果,HyperLogLog算法的公式如下:

HyperLogLog算法

其中constant常數和m的含義和之前的LogLog算法公式中的含義一致,Rj代表(第j個桶中的數據的最大前導零數目+1),為了方便理解,我將公式再拆解一下:

HyperLogLog公式的理解

其實從算術平均數改成調和平均數這個優化是很容易想到的,但是為什么LogLog算法沒有直接使用調和平均數嗎?網上看到一篇英文文章里說大概是因為使用算術平均數的話證明比較容易一些,畢竟科學家們出論文每一步都是要證明的,不像我們這里簡單理解一下,猜一猜就可以了。

細節微調

關于HyperLogLog算法的大體思想到這里你就已經全部理解了。

不過算法中還有一些細微的校正,在數據總量比較小的時候,很容易就預測偏大,所以我們做如下校正:

(DV代表估計的基數值,m代表桶的數量,V代表結果為0的桶的數目,log表示自然對數)

if DV < (5 / 2) * m:

DV = m * log(m/V)

我再詳細解釋一下V的含義,假設我分配了64個桶(即m=64),當數據量很小時(比方說只有兩三個),那肯定有大量桶中沒有數據,也就說他們的估計值是0,V就代表這樣的桶的數目。

事實證明,這個校正的效果是非常好,在數據量小的時,估計得非常準確,有興趣可以去玩一下外國大佬制作的一個HyperLogLog算法的仿真:

http://content.research.neustar.biz/blog/hll.html

constant常數的選擇

constant常數的選擇與分桶的數目有關,具體的數學證明請看論文,這里就直接給出結論:

假設:m為分桶數,p是m的以2為底的對數

p

則按如下的規則計算constant

switch (p) {

case 4:

constant = 0.673 * m * m;

case 5:

constant = 0.697 * m * m;

case 6:

constant = 0.709 * m * m;

default:

constant = (0.7213 / (1 + 1.079 / m)) * m * m;

}

分桶數m的選擇

如果理解了之前的分桶算法,那么很顯然分桶數只能是2的整數次冪。

如果分桶越多,那么估計的精度就會越高,統計學上用來衡量估計精度的一個指標是“相對標準誤差”(relative standard deviation,簡稱RSD),RSD的計算公式這里就不給出了,百科上一搜就可以知道,從直觀上理解,RSD的值其實就是((每次估計的值)在(估計均值)上下的波動)占(估計均值)的比例(這句話加那么多括號是為了方便大家斷句)。RSD的值與分桶數m存在如下的計算關系:

RSD

有了這個公式,你可以先確定你想要達到的RSD的值,然后再推出分桶的數目m。

合并

假設有兩個數據流,分別構建了兩個HyperLogLog結構,稱為a和b,他們的桶數是一樣的,為n,現在要計算兩個數據流總體的基數。

數據流a:"a" "b" "c" "d" 基數:4

數據流b:"b" "c" "d" "e" 基數:4

兩個數據流的總體基數:5

從前文我們可以知道,HyperLogLog算法在內存中的結構其實就是一個桶數組,需要先用下面的算法從a和我b的桶數組中構建出新的桶數組c,其實就是從a,b的對應位置取最大的:

輸入:桶數組a,b。它們的長度都是n

輸出:新的桶數組c

算法:

c = c[n];

for (i=0; i

c[i]=max(a[i], b[i]);

}

return c;

之后用桶數組c代入前面的算法即可得到合并的總體基數。

Redis中的實現

Redis中和HyperLogLog相關的命令有三個:

PFADD hll ele:將ele添加進hll的基數計算中。流程:

先對ele求hash(使用的是一種叫做MurMurHash的算法)

將hash的低14位(因為總共有2的14次方個桶)作為桶的編號,選桶,記桶中當前的值為count

從的hash的第15位開始數0,假設從第15位開始有n個連續的0(即前導0)

如果n大于count,則把選中的桶的值置為n,否則不變

PFCOUNT hll:計算hll的基數。就是使用上面給出的DV公式根據桶中的數值,計算基數

PFMERGE hll3 hll1 hll2:將hll1和hll2合并成hll3。用的就是上面說的合并算法。

Redis的所有HyperLogLog結構都是固定的16384個桶(2的14次方),并且有兩種存儲格式:

稀疏格式:HyperLogLog算法在剛開始的時候,大多數桶其實都是0,稀疏格式通過存儲連續的0的數目,而不是每個0存一遍,大大減小了HyperLogLog剛開始時需要占用的內存

緊湊格式:用6個bit表示一個桶,需要占用12KB內存

如果還想更詳細地了解Redis中的實現細節的話,可以閱讀我的另一篇博客Redis源碼走馬觀花(5)HyperLogLog

HyperLogLog索引

之前在螞蟻實習的時候,用的一個自研數據庫號稱支持HyperLogLog索引.(目前還不知道有什么開源的數據庫支持這玩意,如果你知道,歡迎在評論里告訴我)。

所謂HyperLogLog索引,比如你在user列上建立了一個hyperLogLog索引,那么當你使用如下的查詢時:

SELECT COUNT(DISTINCT user) FROM users WHERE age >= 10 and city = "shanghai";

在計算COUNT(DISTINCT)時,會自動使用之前構建好的HyperLogLog索引來加速,據說能夠獲得數量級上的查詢速度提升。

如果仔細看了之前的算法,到這里可能會產生困惑,通過HyperLogLog似乎只能得到user的基數是多少,那又怎么能知道含有一定含有一定篩選條件(WHERE age > 10 and city = "shanghai")的user基數是多少呢?

其實再仔細想想,也很簡單,通過前面介紹過的“合并”就可以完成,對每個不同的city都構建了一個關于user的HyperLogLog結構,因為age的基數相對大一些,數據庫可以根據范圍在每個范圍構建了一個HyperLogLog結構,比如分別是0~10,10~20,20~30,這樣只需要將上面查詢涉及到的三個HyperLogLog結構合并即可(三個分別是指city為"guangzhou",age為10~20和age為20~30)。

這個只是我的個人猜測,也可能不是這樣。

Java實現分析

這個實現類中還包含很多與算法無關的序列化之類的代碼,所以不建議你直接去看,我把它的算法主干抽取了出來,變成了如下的三個類,你把這三個類的代碼復制下來放到項目的同一個包下即可,HyperLogLog類中還包含一個main函數,你可以運行一下看看代碼是否正確,代碼如下:

HyperLogLog.java

public class HyperLogLog {

private final RegisterSet registerSet;

private final int log2m; //log(m)

private final double alphaMM;

/**

*

* rsd = 1.04/sqrt(m)

* @param rsd 相對標準偏差

*/

public HyperLogLog(double rsd) {

this(log2m(rsd));

}

/**

* rsd = 1.04/sqrt(m)

* m = (1.04 / rsd)^2

* @param rsd 相對標準偏差

* @return

*/

private static int log2m(double rsd) {

return (int) (Math.log((1.106 / rsd) * (1.106 / rsd)) / Math.log(2));

}

private static double rsd(int log2m) {

return 1.106 / Math.sqrt(Math.exp(log2m * Math.log(2)));

}

/**

* accuracy = 1.04/sqrt(2^log2m)

*

* @param log2m

*/

public HyperLogLog(int log2m) {

this(log2m, new RegisterSet(1 << log2m));

}

/**

*

* @param registerSet

*/

public HyperLogLog(int log2m, RegisterSet registerSet) {

this.registerSet = registerSet;

this.log2m = log2m;

int m = 1 << this.log2m; //從log2m中算出m

alphaMM = getAlphaMM(log2m, m);

}

public boolean offerHashed(int hashedValue) {

// j 代表第幾個桶,取hashedValue的前log2m位即可

// j 介于 0 到 m

final int j = hashedValue >>> (Integer.SIZE - log2m);

// r代表 除去前log2m位剩下部分的前導零 + 1

final int r = Integer.numberOfLeadingZeros((hashedValue << this.log2m) | (1 << (this.log2m - 1)) + 1) + 1;

return registerSet.updateIfGreater(j, r);

}

/**

* 添加元素

* @param o 要被添加的元素

* @return

*/

public boolean offer(Object o) {

final int x = MurmurHash.hash(o);

return offerHashed(x);

}

public long cardinality() {

double registerSum = 0;

int count = registerSet.count;

double zeros = 0.0;

//count是桶的數量

for (int j = 0; j < registerSet.count; j++) {

int val = registerSet.get(j);

registerSum += 1.0 / (1 << val);

if (val == 0) {

zeros++;

}

}

double estimate = alphaMM * (1 / registerSum);

if (estimate <= (5.0 / 2.0) * count) { //小數據量修正

return Math.round(linearCounting(count, zeros));

} else {

return Math.round(estimate);

}

}

/**

* 計算constant常數的取值

* @param p log2m

* @param m m

* @return

*/

protected static double getAlphaMM(final int p, final int m) {

// See the paper.

switch (p) {

case 4:

return 0.673 * m * m;

case 5:

return 0.697 * m * m;

case 6:

return 0.709 * m * m;

default:

return (0.7213 / (1 + 1.079 / m)) * m * m;

}

}

/**

*

* @param m 桶的數目

* @param V 桶中0的數目

* @return

*/

protected static double linearCounting(int m, double V) {

return m * Math.log(m / V);

}

public static void main(String[] args) {

HyperLogLog hyperLogLog = new HyperLogLog(0.1325);//64個桶

//集合中只有下面這些元素

hyperLogLog.offer("hhh");

hyperLogLog.offer("mmm");

hyperLogLog.offer("ccc");

//估算基數

System.out.println(hyperLogLog.cardinality());

}

}

MurmurHash.java

/**

* 一種快速的非加密hash

* 適用于對保密性要求不高以及不在意hash碰撞攻擊的場合

*/

public class MurmurHash {

public static int hash(Object o) {

if (o == null) {

return 0;

}

if (o instanceof Long) {

return hashLong((Long) o);

}

if (o instanceof Integer) {

return hashLong((Integer) o);

}

if (o instanceof Double) {

return hashLong(Double.doubleToRawLongBits((Double) o));

}

if (o instanceof Float) {

return hashLong(Float.floatToRawIntBits((Float) o));

}

if (o instanceof String) {

return hash(((String) o).getBytes());

}

if (o instanceof byte[]) {

return hash((byte[]) o);

}

return hash(o.toString());

}

public static int hash(byte[] data) {

return hash(data, data.length, -1);

}

public static int hash(byte[] data, int seed) {

return hash(data, data.length, seed);

}

public static int hash(byte[] data, int length, int seed) {

int m = 0x5bd1e995;

int r = 24;

int h = seed ^ length;

int len_4 = length >> 2;

for (int i = 0; i < len_4; i++) {

int i_4 = i << 2;

int k = data[i_4 + 3];

k = k << 8;

k = k | (data[i_4 + 2] & 0xff);

k = k << 8;

k = k | (data[i_4 + 1] & 0xff);

k = k << 8;

k = k | (data[i_4 + 0] & 0xff);

k *= m;

k ^= k >>> r;

k *= m;

h *= m;

h ^= k;

}

// avoid calculating modulo

int len_m = len_4 << 2;

int left = length - len_m;

if (left != 0) {

if (left >= 3) {

h ^= (int) data[length - 3] << 16;

}

if (left >= 2) {

h ^= (int) data[length - 2] << 8;

}

if (left >= 1) {

h ^= (int) data[length - 1];

}

h *= m;

}

h ^= h >>> 13;

h *= m;

h ^= h >>> 15;

return h;

}

public static int hashLong(long data) {

int m = 0x5bd1e995;

int r = 24;

int h = 0;

int k = (int) data * m;

k ^= k >>> r;

h ^= k * m;

k = (int) (data >> 32) * m;

k ^= k >>> r;

h *= m;

h ^= k * m;

h ^= h >>> 13;

h *= m;

h ^= h >>> 15;

return h;

}

public static long hash64(Object o) {

if (o == null) {

return 0l;

} else if (o instanceof String) {

final byte[] bytes = ((String) o).getBytes();

return hash64(bytes, bytes.length);

} else if (o instanceof byte[]) {

final byte[] bytes = (byte[]) o;

return hash64(bytes, bytes.length);

}

return hash64(o.toString());

}

// 64 bit implementation copied from here: https://github.com/tnm/murmurhash-java

/**

* Generates 64 bit hash from byte array with default seed value.

*

* @param data byte array to hash

* @param length length of the array to hash

* @return 64 bit hash of the given string

*/

public static long hash64(final byte[] data, int length) {

return hash64(data, length, 0xe17a1465);

}

/**

* Generates 64 bit hash from byte array of the given length and seed.

*

* @param data byte array to hash

* @param length length of the array to hash

* @param seed initial seed value

* @return 64 bit hash of the given array

*/

public static long hash64(final byte[] data, int length, int seed) {

final long m = 0xc6a4a7935bd1e995L;

final int r = 47;

long h = (seed & 0xffffffffl) ^ (length * m);

int length8 = length / 8;

for (int i = 0; i < length8; i++) {

final int i8 = i * 8;

long k = ((long) data[i8 + 0] & 0xff) + (((long) data[i8 + 1] & 0xff) << 8)

+ (((long) data[i8 + 2] & 0xff) << 16) + (((long) data[i8 + 3] & 0xff) << 24)

+ (((long) data[i8 + 4] & 0xff) << 32) + (((long) data[i8 + 5] & 0xff) << 40)

+ (((long) data[i8 + 6] & 0xff) << 48) + (((long) data[i8 + 7] & 0xff) << 56);

k *= m;

k ^= k >>> r;

k *= m;

h ^= k;

h *= m;

}

switch (length % 8) {

case 7:

h ^= (long) (data[(length & ~7) + 6] & 0xff) << 48;

case 6:

h ^= (long) (data[(length & ~7) + 5] & 0xff) << 40;

case 5:

h ^= (long) (data[(length & ~7) + 4] & 0xff) << 32;

case 4:

h ^= (long) (data[(length & ~7) + 3] & 0xff) << 24;

case 3:

h ^= (long) (data[(length & ~7) + 2] & 0xff) << 16;

case 2:

h ^= (long) (data[(length & ~7) + 1] & 0xff) << 8;

case 1:

h ^= (long) (data[length & ~7] & 0xff);

h *= m;

}

;

h ^= h >>> r;

h *= m;

h ^= h >>> r;

return h;

}

}

RegisterSet.java

public class RegisterSet {

public final static int LOG2_BITS_PER_WORD = 6; //2的6次方是64

public final static int REGISTER_SIZE = 5; //每個register占5位,代碼里有一些細節涉及到這個5位,所以僅僅改這個參數是會報錯的

public final int count;

public final int size;

private final int[] M;

//傳入m

public RegisterSet(int count) {

this(count, null);

}

public RegisterSet(int count, int[] initialValues) {

this.count = count;

if (initialValues == null) {

/**

* 分配(m / 6)個int給M

*

* 因為一個register占五位,所以每個int(32位)有6個register

*/

this.M = new int[getSizeForCount(count)];

} else {

this.M = initialValues;

}

//size代表RegisterSet所占字的大小

this.size = this.M.length;

}

public static int getBits(int count) {

return count / LOG2_BITS_PER_WORD;

}

public static int getSizeForCount(int count) {

int bits = getBits(count);

if (bits == 0) {

return 1;

} else if (bits % Integer.SIZE == 0) {

return bits;

} else {

return bits + 1;

}

}

public void set(int position, int value) {

int bucketPos = position / LOG2_BITS_PER_WORD;

int shift = REGISTER_SIZE * (position - (bucketPos * LOG2_BITS_PER_WORD));

this.M[bucketPos] = (this.M[bucketPos] & ~(0x1f << shift)) | (value << shift);

}

public int get(int position) {

int bucketPos = position / LOG2_BITS_PER_WORD;

int shift = REGISTER_SIZE * (position - (bucketPos * LOG2_BITS_PER_WORD));

return (this.M[bucketPos] & (0x1f << shift)) >>> shift;

}

public boolean updateIfGreater(int position, int value) {

int bucket = position / LOG2_BITS_PER_WORD; //M下標

int shift = REGISTER_SIZE * (position - (bucket * LOG2_BITS_PER_WORD)); //M偏移

int mask = 0x1f << shift; //register大小為5位

// 這里使用long是為了避免int的符號位的干擾

long curVal = this.M[bucket] & mask;

long newVal = value << shift;

if (curVal < newVal) {

//將M的相應位置為新的值

this.M[bucket] = (int) ((this.M[bucket] & ~mask) | newVal);

return true;

} else {

return false;

}

}

public void merge(RegisterSet that) {

for (int bucket = 0; bucket < M.length; bucket++) {

int word = 0;

for (int j = 0; j < LOG2_BITS_PER_WORD; j++) {

int mask = 0x1f << (REGISTER_SIZE * j);

int thisVal = (this.M[bucket] & mask);

int thatVal = (that.M[bucket] & mask);

word |= (thisVal < thatVal) ? thatVal : thisVal;

}

this.M[bucket] = word;

}

}

int[] readOnlyBits() {

return M;

}

public int[] bits() {

int[] copy = new int[size];

System.arraycopy(M, 0, copy, 0, M.length);

return copy;

}

}

這里hash算法使用的是MurmurHash算法,可能很多人沒聽說過,其實在開源項目中使用的非常廣泛,這個算法在只追求速度和hash的隨機性,而不在意安全性和保密性的時候非常有效,我們不去深究這個算法的原理了,這個類的代碼也不必仔細看,就把它看成一個hash函數就好了。

還有需要稍微注意一下這里的RegisterSet類,我們把存放一個桶的結果的地方叫做一個register,類中M數組就是存放這些register內容的地方,在這里我們設置一個register占5位,所以每個int(32位)總共可以存放6個register。

重點去閱讀HyperLogLog類,我添加了相關注釋方便你閱讀,希望能夠幫助你了解更多細節。

參考資料

1.論文《HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm》

http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf

如果有興趣去了解算法的數學證明的大佬可以去看一下

總結

以上是生活随笔為你收集整理的抛硬币仿真实验java_探索HyperLogLog算法(含Java实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产午夜三级一区二区三桃花影视 | 免费在线观看成人 | 精品国产99国产精品 | japanesexxx乱女另类 | 九九热在线视频 | av线上免费观看 | 伊人天堂久久 | 亚洲狠狠干| 久久精品免费 | 国产综合香蕉五月婷在线 | 黄污网站在线 | 美女搞黄国产视频网站 | 亚洲一级片免费观看 | 久久最新网址 | av大片免费看 | 中文字幕成人在线 | 日韩中文在线视频 | 欧美精品一区二区免费 | 狠狠狠色丁香婷婷综合久久五月 | 亚洲视频在线免费观看 | 精品久久一二三区 | 久久新 | 三上悠亚一区二区在线观看 | 四虎在线免费视频 | 97视频在线播放 | 精品99在线观看 | 精品一区电影国产 | 九九久久久久久久久激情 | 特黄色大片 | 久草在线这里只有精品 | 欧美成年黄网站色视频 | 久久久精华网 | 97理论片| 国产精品每日更新 | 九九热在线观看 | www.人人草| 色婷婷激情四射 | 91探花国产综合在线精品 | 免费久久精品视频 | 日韩精品aaa | 国产黄色特级片 | 免费视频 三区 | 日韩成人av在线 | 久久久久久久久久国产精品 | 国产青青青 | 日韩另类在线 | 免费高清在线视频一区· | 成人午夜免费福利 | 日韩av电影中文字幕在线观看 | 在线激情电影 | 中文字幕在线播放一区二区 | 婷婷成人亚洲综合国产xv88 | 啪啪凸凸 | 97偷拍在线视频 | 国产精品青草综合久久久久99 | 香蕉在线观看视频 | 黄色在线免费观看网址 | 久久免费视频观看 | 国产在线高清视频 | 欧美精品久 | 日韩欧美网址 | 精品国产_亚洲人成在线 | 久草在线资源免费 | 国产特级毛片aaaaaa毛片 | 欧美一级片免费观看 | 日韩精品一区二区在线观看 | 美女精品 | 国产在线观看,日本 | 曰本三级在线 | 四虎成人免费观看 | 深夜福利视频在线观看 | 97在线观看视频免费 | 久草精品视频在线观看 | 亚洲免费一级 | 欧美韩日视频 | 天天弄天天干 | 五月天婷亚洲天综合网鲁鲁鲁 | 免费在线观看黄色网 | 伊人在线视频 | 91精品在线免费观看 | 亚洲欧美视频网站 | 久久久久久久久久久免费 | 中文字幕在线免费 | 91av免费在线观看 | 日韩精品中文字幕一区二区 | 精品伊人久久久 | 亚洲电影免费 | 亚洲综合色丁香婷婷六月图片 | 国产精品久久久久久久久久直播 | 人人玩人人添人人澡97 | 九九九九精品九九九九 | 久久这里只有精品23 | 久久高清免费视频 | 亚洲综合狠狠干 | 日本久久99| 久久精品福利视频 | 97免费在线视频 | 欧美激情第一页xxx 午夜性福利 | www.久久久久 | 国产精品中文字幕av | 国产成人av在线影院 | 成年人视频免费在线播放 | 毛片网在线播放 | 国产精品video爽爽爽爽 | 综合天堂av久久久久久久 | 久保带人 | 人人网人人爽 | 91高清不卡 | 黄色三级在线 | 成人丁香花 | 久久国产手机看片 | 国产福利一区在线观看 | 麻豆视频在线 | 国产成人精品日本亚洲999 | 国产不卡精品 | 开心激情五月婷婷 | 99久久精品午夜一区二区小说 | 88av视频 | 国产精品亚 | 国产区免费 | 久久久福利影院 | 欧美天堂久久 | 婷婷狠狠操 | 亚洲国产精品99久久久久久久久 | 国产在线最新 | 香蕉视频在线观看免费 | 日韩电影中文,亚洲精品乱码 | 欧美三人交 | 日韩欧美xxxx | 久久午夜精品 | 在线免费视频a | 精品不卡av | 日韩一级网站 | 五月色婷 | 国产又黄又爽无遮挡 | 国产一区高清在线 | 国产精品四虎 | 五月开心色 | 免费观看成人av | 欧美乱码精品一区二区 | 在线直播av | 亚洲欧美国产日韩在线观看 | 日韩精品在线视频免费观看 | 中文区中文字幕免费看 | 91免费视频网站在线观看 | 97国产大学生情侣酒店的特点 | 久久久亚洲网站 | 91chinesexxx| 99精品免费久久久久久久久 | 91九色视频观看 | 开心激情久久 | 国内精品久久久久久久97牛牛 | 免费网站看v片在线a | www.国产在线观看 | 日韩精品三区四区 | 日本中文字幕电影在线免费观看 | 91视频在线免费下载 | 2019天天干夜夜操 | 国产精品视频久久久 | 欧美成人91 | 日日日网 | 草久久精品 | 精品视频成人 | 丁香婷婷激情 | 亚洲成人av一区 | 91精品毛片 | 天堂av在线免费观看 | 成年人免费在线播放 | 久久精品国产精品 | av中文字幕在线免费观看 | 8x成人免费视频 | 日韩网站视频 | 久久久久一区二区三区四区 | 国产高清久久 | 成片视频免费观看 | 91麻豆国产 | 亚州av网站大全 | 99视屏| 福利视频第一页 | 免费观看全黄做爰大片国产 | 免费看黄色大全 | 久久久久久视频 | 亚洲精品视频免费在线观看 | 久久精品网站视频 | 日韩啪啪小视频 | 日韩免费 | 亚洲天天在线 | 色视频网站在线观看一=区 a视频免费在线观看 | 二区三区在线视频 | 国内精品久久久久久久影视麻豆 | 国产精品 国内视频 | av电影免费在线看 | 亚洲精品美女免费 | 精品99久久久久久 | 97国产在线 | 中文字幕一区在线 | 亚洲最快最全在线视频 | 中文字幕第一页在线播放 | 1区2区3区在线观看 三级动图 | av片一区 | 国产九九九精品视频 | 日韩精品视频免费看 | 又色又爽又黄 | 中文字幕制服丝袜av久久 | 在线免费高清视频 | 99视| 91精品视屏 | 久久成人精品 | 久久成人国产精品免费软件 | 在线看片成人 | 久久精品在线免费观看 | 亚洲国产精品成人综合 | av在线成人 | 成人cosplay福利网站 | 丁香婷婷激情网 | 在线观看国产一区 | 中文字幕在线影视资源 | 免费看黄在线看 | 亚洲综合网 | 天天摸夜夜添 | 在线观看亚洲精品 | 日韩乱码中文字幕 | 去干成人网 | 久久色网站 | 久久久不卡影院 | 国产精品区免费视频 | 精品视频在线看 | 成人久久18免费网站麻豆 | 久在线观看视频 | 91精品中文字幕 | 九九热视频在线 | 免费日韩 精品中文字幕视频在线 | 黄色高清视频在线观看 | 在线免费观看视频 | 99精品久久久久久久 | 福利一区二区三区四区 | 免费福利在线播放 | ,午夜性刺激免费看视频 | 欧美日韩大片在线观看 | 日本成人中文字幕在线观看 | 波多野结衣在线中文字幕 | 精品久久国产 | 欧美va电影| 欧美日韩p片 | 激情丁香5月 | 一区二区视频播放 | 99精品国产99久久久久久福利 | 日韩在线电影一区 | 久久99久久精品 | 四虎国产免费 | 337p日本大胆噜噜噜噜 | 国产视频在线观看免费 | 日韩精品免费一区二区 | 美女网站视频免费黄 | 婷婷五综合 | 少妇bbr搡bbb搡bbb | 91天天视频| 国产福利中文字幕 | 男女日麻批 | 九色porny真实丨国产18 | 久久成人欧美 | 中文字幕在线观看视频免费 | 欧美 亚洲 另类 激情 另类 | 欧美大香线蕉线伊人久久 | 国产高清av免费在线观看 | 中文字幕av一区二区三区四区 | 色综合久久66 | 九九九免费视频 | 夜夜操天天操 | 久久 亚洲视频 | 亚洲成av人片在线观看无 | 国产精品v欧美精品 | 国产精品成人一区二区三区 | 日本黄色免费播放 | 亚洲精品久久久久中文字幕m男 | 欧美激情视频一区 | 欧亚日韩精品一区二区在线 | 欧美激情第八页 | 日日夜夜天天 | 五月天激情在线 | 久久久av免费 | 久久久黄色av | www在线免费观看 | 国产资源在线免费观看 | 国内免费久久久久久久久久久 | 97精品在线 | 一本色道久久综合亚洲二区三区 | 精品国产乱码久久久久久浪潮 | 99久热在线精品视频观看 | 免费亚洲片| 国产1区在线观看 | 一级黄色在线免费观看 | 久久精品人人做人人综合老师 | 在线免费观看涩涩 | 偷拍久久久 | 蜜臀一区二区三区精品免费视频 | 婷婷播播网 | avav99| 亚洲成人国产精品 | 午夜精品一区二区三区四区 | 一区二区影视 | 亚洲精品久久久蜜臀下载官网 | 国产精品视频久久 | 成年人网站免费观看 | 国产午夜亚洲精品 | 精品国产免费看 | 国产三级在线播放 | 激情视频在线高清看 | 日本在线观看一区二区三区 | 免费看成人 | 人人澡人人爽欧一区 | 日韩免费成人 | 91亚洲成人 | 天堂av观看 | www.久久com| 久久国产亚洲 | 国产麻豆电影在线观看 | 国产精品久久久久毛片大屁完整版 | 999视频在线播放 | 国产高清视频在线免费观看 | 蜜臀av在线一区二区三区 | 中文字幕视频观看 | 成人久久18免费网站 | 99久久久久国产精品免费 | 男女啪啪视屏 | 美女视频黄频 | 日韩欧美在线综合网 | 黄色成人av | 在线播放 日韩专区 | 在线观看免费 | 国产精选在线观看 | 一区二区三区精品在线视频 | 色综合国产 | 香蕉在线视频观看 | 麻豆精品视频在线 | 国产成人久久精品一区二区三区 | 九九视频在线播放 | av免费看在线 | 最近中文字幕免费av | 日韩中文字幕免费在线播放 | av在线免费播放 | 婷婷在线免费视频 | 国产精品成久久久久 | 永久免费的av电影 | 日本99热| 日韩丝袜在线观看 | 久草视频在线资源站 | 在线观看免费观看在线91 | 国产精品自在欧美一区 | 日日弄天天弄美女bbbb | 一本—道久久a久久精品蜜桃 | 成人黄色大片网站 | 四虎永久免费在线观看 | 91久久精品日日躁夜夜躁国产 | 久久免费视频国产 | 韩国av电影网 | 中文字幕一区二 | 麻豆视传媒官网免费观看 | 久久久久久久久久影视 | 激情丁香综合 | 亚洲精品视频播放 | 天天干,天天射,天天操,天天摸 | 国产黄色在线看 | 久草久草在线 | 久草青青在线观看 | 精品播放| 高清精品在线 | 欧美日韩一区二区久久 | 91精品伦理 | 国产精品久久久久久a | 九九av| 免费亚洲精品视频 | 99久久精品免费视频 | 在线色视频小说 | 一二三区高清 | 国产视频一区二区在线 | 人人玩人人添人人澡97 | 国产成人av一区二区三区在线观看 | 1000部国产精品成人观看 | 伊人伊成久久人综合网站 | 麻豆影视在线播放 | 97在线观视频免费观看 | 黄色小网站在线 | 欧美亚洲成人xxx | 99精品久久久久 | 狠狠干夜夜爱 | 亚洲最大激情中文字幕 | 国产成人精品久久久久 | 色婷婷综合久久久中文字幕 | 91亚洲精品国偷拍自产在线观看 | 天天操狠狠干 | 99久久婷婷国产综合精品 | 福利视频一二区 | 日韩在线短视频 | 精品国产一区二区三区日日嗨 | 成年人免费看av | 国产精品视频你懂的 | 在线亚洲成人 | 一级片色播影院 | 亚洲成人精品影院 | 亚洲欧美激情精品一区二区 | 最近免费中文字幕 | 色中文字幕在线观看 | 麻豆精品传媒视频 | 国内外激情视频 | 亚洲一级片在线看 | 久久久久久国产一区二区三区 | 日韩av一区二区三区在线观看 | 一级黄色片在线免费观看 | 中文字幕av影院 | 麻豆影视在线播放 | 亚洲一区二区黄色 | 国产欧美在线一区 | 亚洲精品国精品久久99热 | 午夜影院一级片 | 又大又硬又黄又爽视频在线观看 | 免费久久片| 国产精品久久久久久一二三四五 | 一区二区三区久久精品 | 久久天天躁 | 欧美与欧洲交xxxx免费观看 | 亚洲成a人片77777潘金莲 | av丝袜在线 | 18岁免费看片 | 欧美日本啪啪无遮挡网站 | 日av免费 | 精品美女在线观看 | 日韩激情视频在线观看 | 天天干人人 | 天天做天天爽 | 成人性生交大片免费观看网站 | 在线观看电影av | 亚洲国产精品传媒在线观看 | 超碰人人射 | 欧美一区二区三区在线看 | 99在线热播| 日韩高清毛片 | 亚洲精品久久久蜜桃 | 亚洲国产精品成人精品 | 西西www4444大胆视频 | 777久久久| 国产在线观看二区 | 国产一区二区三精品久久久无广告 | 日韩二区三区在线观看 | 久久最新视频 | 国产精品久久精品国产 | 丁香国产视频 | 国产精品免费不卡 | 欧美性色黄 | 国产在线高清 | 婷婷色九月 | 男女靠逼app | 久久香蕉一区 | 在线视频18在线视频4k | 亚洲人天堂 | 夜夜躁狠狠燥 | 中文字幕2021| 国产福利一区二区在线 | 黄色软件在线观看 | 天天色天天色天天色 | 在线观看黄网 | 国产精品美女久久久久久久 | 久久久国产电影 | 国产一区二区久久 | 国内亚洲精品 | 久久久久黄 | 久久九九网站 | 亚洲成人第一区 | 在线免费视频 你懂得 | 中文字幕精品一区久久久久 | 91精品国产自产在线观看 | 国产96在线 | 久草精品视频在线播放 | 麻豆视频国产在线观看 | 久久蜜臀一区二区三区av | 午夜精品久久久久久久99无限制 | 国产日韩精品久久 | 国产精品久久久久久高潮 | 亚洲视频综合在线 | 免费看一及片 | 在线观看视频亚洲 | 天天玩夜夜操 | 中文字幕频道 | 国产精品一区二区三区99 | 久久国产免费视频 | 天天干天天天 | 久久99国产精品久久99 | 中文字幕4 | 亚洲自拍偷拍色图 | 国产91av视频在线观看 | 国产高清av | 精品亚洲男同gayvideo网站 | 在线观看免费av片 | 国产成人精品福利 | 在线亚洲激情 | 久久免费视频8 | av在线电影免费观看 | 中文字幕字幕中文 | 欧美一级性生活视频 | 99婷婷| 精品久久久久久久久久久久久 | 黄色毛片视频免费观看中文 | 亚洲精品视频在线免费播放 | 成人av高清 | 久久都是精品 | 欧美日韩中文字幕视频 | 91.精品高清在线观看 | 中文字幕视频一区二区 | 五月综合在线观看 | 久久久久久久久久久综合 | www国产亚洲 | 麻豆影视网站 | 欧美精品免费在线 | 久久久久99999| www.超碰| 91看片在线免费观看 | 日本精品在线视频 | 99久久99久久免费精品蜜臀 | 日韩一区二区免费视频 | 午夜在线看 | 少妇高潮流白浆在线观看 | 在线观看视频亚洲 | av成人免费在线看 | 99国产在线视频 | 国产精品久久99精品毛片三a | 午夜美女福利直播 | japanese黑人亚洲人4k | 国产成人av在线影院 | 亚洲综合情 | 日韩av一区在线观看 | 视频在线99 | 亚洲一区二区三区四区精品 | 97视频久久久 | 综合久久久久久久久 | 成人久久 | 97超碰国产精品女人人人爽 | 久久久国产精品一区二区三区 | 欧美日韩精品在线一区二区 | 99热这里是精品 | 久久精品久久99精品久久 | 国产福利精品一区二区 | 精品国产自 | 全久久久久久久久久久电影 | h久久| 看黄色.com| www.午夜视频 | 97精产国品一二三产区在线 | 99视频在线观看免费 | 日韩乱码中文字幕 | 日韩一区二区三区高清在线观看 | 黄色福利网站 | 久久av在线 | 久久激情五月丁香伊人 | 天天视频亚洲 | 亚洲一级片| 中文字幕一二三区 | 日韩99热| 日韩免费在线播放 | 色夜影院 | 中文字幕 国产视频 | 婷婷去俺也去六月色 | 欧美激情h | 午夜视频久久久 | 国产专区欧美专区 | 久久久免费精品 | 在线视频专区 | 正在播放一区二区 | 国内精品亚洲 | 最新av电影网址 | 色婷五月 | 国产美女网站视频 | 亚洲精品国产欧美在线观看 | 久久视精品 | av黄色在线 | 成人天堂网 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日韩欧美在线播放 | 国产特级毛片aaaaaa毛片 | 激情偷乱人伦小说视频在线观看 | 天天操天天摸天天射 | 久久久网址| 亚洲国产成人精品在线观看 | 97国产| 狠狠操在线 | 日韩视频免费在线观看 | 豆豆色资源网xfplay | 亚洲国产欧美一区二区三区丁香婷 | 精品久久久久国产免费第一页 | 欧美久久久久久久久中文字幕 | 色婷婷88av视频一二三区 | 一区三区在线欧 | 久久精品国产久精国产 | 四虎免费在线观看视频 | 国产中文字幕在线免费观看 | 国产美女精品人人做人人爽 | 精品国产精品久久一区免费式 | 久久久久久久福利 | 麻豆传媒视频在线播放 | 日本中文字幕免费观看 | 黄色软件在线观看免费 | 六月色婷婷 | 啪嗒啪嗒免费观看完整版 | 久久免费福利 | 成人不用播放器 | 亚洲国产精品成人女人久久 | 久要激情网 | 中文字幕123区 | 久久在线观看视频 | 胖bbbb搡bbbb擦bbbb | 五月天久久婷 | 在线涩涩| 五月婷婷黄色网 | 黄色动态图xx | 国产一区视频在线 | 亚洲精品在线视频 | 96在线 | 黄色视屏免费在线观看 | 黄色三级在线观看 | 久久综合在线 | av一级久久| 超碰97人人射妻 | 免费在线一区二区 | 日韩在线免费电影 | 日韩影视在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 狠狠色伊人亚洲综合成人 | 香蕉视频网站在线观看 | 91片网| 免费观看第二部31集 | 在线视频欧美日韩 | 日本中文字幕在线免费观看 | 麻豆视频免费在线观看 | 日韩一区二区三区在线看 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 国产69精品久久久久久 | 成人小视频在线观看免费 | 亚洲 欧洲 国产 精品 | 91 在线视频播放 | 特级毛片在线免费观看 | 成人免费视频网址 | 国产欧美中文字幕 | 在线天堂中文www视软件 | 精品国产一区二区三区久久久 | 一本—道久久a久久精品蜜桃 | 日日摸日日添日日躁av | 99热最新地址 | 99久久99久久精品国产片果冰 | 最近中文字幕高清字幕免费mv | 免费视频99| 欧美激情视频久久 | 99精品福利 | 亚洲精品视频在线观看免费 | 日韩女同一区二区三区在线观看 | 国产福利在线不卡 | 久久免费播放视频 | 亚洲国产视频直播 | 国内免费的中文字幕 | 久久99最新地址 | 一级性视频 | 午夜精品电影一区二区在线 | 精品在线观看视频 | 亚洲 成人 欧美 | 欧美日韩国产xxx | 99精品久久久久 | 亚洲高清色综合 | 中文乱码视频在线观看 | 人人插人人做 | 91chinese在线 | 日韩中文字幕网站 | 国产视频色 | 久久在线精品 | 在线看国产视频 | 毛片视频网址 | 五月的婷婷 | 久久99精品热在线观看 | 国产一区二区不卡在线 | 婷婷色网址 | 99热精品视 | 婷婷丁香av| 欧美性受极品xxxx喷水 | 亚洲精品午夜一区人人爽 | 国产剧情在线一区 | 久久久精品国产一区二区电影四季 | 国产精品18久久久久久不卡孕妇 | 日韩免费三级 | 91久久久国产精品 | 亚洲精品美女久久17c | 欧亚久久 | 麻豆 free xxxx movies hd | 综合久久久久久 | 五月婷在线 | 日韩午夜av电影 | www.婷婷com| 天天色播 | 韩国在线一区 | 久久99精品久久久久久久久久久久 | 日韩最新理论电影 | 亚洲一区二区视频 | 欧美片网站yy | 国产精品毛片久久蜜 | 精品久久久久国产免费第一页 | 婷婷五综合 | 激情五月婷婷 | 中文字幕欲求不满 | 国产精品一区二区在线看 | 在线电影91 | 国产精品色婷婷视频 | 日韩黄色一区 | 亚洲国产精品免费 | 国产专区一 | 国产在线视频一区 | 欧美精品一区二区在线播放 | 伊在线视频 | 日日夜夜精品视频天天综合网 | 国产h在线观看 | 国产精国产精品 | 欧美日韩一区二区三区不卡 | 国产剧情一区二区 | 色婷婷一区 | 成人av一区二区三区 | 亚洲国产一二三 | 天天色天天爱天天射综合 | 久久 国产一区 | 天天做天天干 | 国产a网站| 国产在线理论片 | 日韩在线高清视频 | 亚洲精品777| 在线直播av | 国产精品日韩在线观看 | 首页中文字幕 | 欧美坐爱视频 | 亚洲综合射 | 日韩中文字幕在线观看 | 97超级碰 | 一区二区三区精品在线视频 | 欧美最新另类人妖 | 久久久久电影 | 夜色资源网 | 精品久久久久久亚洲综合网 | 免费视频a | 九九久久视频 | 国产二区视频在线观看 | 五月视频 | 久久久久亚洲精品成人网小说 | 天天干天天拍天天操天天拍 | 国产精品午夜av | 亚洲视频在线免费看 | 国产精品久久久久三级 | 国产一区视频免费在线观看 | 国产专区视频 | 日本最新高清不卡中文字幕 | 国产午夜视频在线观看 | 亚洲国产精品电影在线观看 | 国产不卡av在线 | 欧美乱码精品一区二区 | 永久免费毛片在线观看 | 日日夜夜天天射 | 久久综合中文色婷婷 | 日韩欧美高清一区二区三区 | www.黄色片.com| 欧美人zozo| 96久久精品| 欧美一级在线看 | 国内精品视频在线 | 天天操天天射天天添 | 久久国产欧美日韩 | 国产精品人成电影在线观看 | 美女福利视频一区二区 | 三上悠亚一区二区在线观看 | 婷婷久久婷婷 | 欧美一级艳片视频免费观看 | 91免费观看网站 | 国产电影黄色av | 91精品久久久久久久99蜜桃 | 久视频在线 | 蜜臀av在线一区二区三区 | 乱子伦av | 97精品国产97久久久久久粉红 | 亚洲一区精品人人爽人人躁 | 黄色在线免费观看网站 | 国产一区二区在线观看视频 | 色欧美综合 | 亚洲视频分类 | 狠狠色狠狠综合久久 | 黄色一及电影 | a在线免费观看视频 | 国产99久久精品一区二区永久免费 | 免费看黄在线网站 | 久久99国产综合精品 | 国产精品午夜在线观看 | 国产一区二区在线免费播放 | av在线不卡观看 | 91chinesexxx| 中文字幕之中文字幕 | 96亚洲精品久久久蜜桃 | 一区二区日韩av | 午夜国产福利在线观看 | 亚洲精品高清视频在线观看 | 免费久久久久久久 | 日本公乱妇视频 | 国产91精品在线观看 | 91污视频在线| 精品久久九九 | 99免费在线观看视频 | 人人爽人人做 | 伊人伊成久久人综合网小说 | 黄色精品久久 | 精品久久久免费 | 最新国产在线视频 | 69精品视频在线观看 | 国产精品久久久久久久毛片 | av亚洲产国偷v产偷v自拍小说 | 日韩欧美在线高清 | 欧美精品v国产精品v日韩精品 | 日韩三级视频 | 亚洲免费在线视频 | 国产爽妇网 | 免费h视频 | 97中文字幕| 日本精品视频免费 | 国产精品96久久久久久吹潮 | 日韩精品一区电影 | 亚洲免费不卡 | 日韩精品欧美专区 | 91女人18片女毛片60分钟 | 日韩在线观看精品 | av观看免费在线 | 精品国产一区二区三区噜噜噜 | 久久五月天婷婷 | 麻豆视频免费看 | 日韩中文三级 | 91免费在线播放 | 91在线观看欧美日韩 | 国产精品久久一区二区三区, | 免费视频在线观看网站 | 一区二区三区免费在线观看视频 | 国产手机在线观看 | 国产视频在线观看一区 | 免费观看xxxx9999片 | 亚洲 中文字幕av | 狠狠久久伊人 | 深夜免费福利 | 色综合天天狠天天透天天伊人 | 久久久精品国产一区二区电影四季 | 91看片一区二区三区 | 超碰夜夜 | 色综合激情久久 | 日韩高清毛片 | 国产精品久久久久久久99 | 中文字幕在线观看资源 | 久久久久电影 | 欧美日韩久久一区 | 国产精品欧美久久久久天天影视 | 91九色国产蝌蚪 | 亚洲伊人av| 国产精品欧美一区二区 | 国产精品大片在线观看 | 欧美成人基地 | 韩国三级一区 | 日韩综合视频在线观看 | av在线播放不卡 | 少妇性色午夜淫片aaaze | 亚欧洲精品视频在线观看 | 在线小视频你懂的 | 午夜在线免费观看 | 99tvdz@gmail.com| 亚洲精品中文字幕视频 | 亚洲黄色在线看 | 99久久这里有精品 | 日韩国产精品久久 | 麻豆成人精品 | 亚洲一区av | 在线免费观看视频一区 | 天天爽综合网 | 黄色av网站在线观看免费 | 欧美在线a视频 | 色综合久久精品 | 成人一级免费视频 | 午夜视频在线观看网站 | 成人av教育 | 在线成人看片 | 中文一区二区三区在线观看 | 欧美在线一二区 | a√天堂中文在线 | 国产精品美女久久久久久久 | 最新av在线网站 | av免费电影在线观看 | 欧美日韩视频在线观看免费 | 在线观看国产一区 | 欧美一区二区视频97 | 久久国产精品网站 | 狠狠色香婷婷久久亚洲精品 | 日本爱爱免费视频 | 日韩激情久久 | 九色精品在线 | 日韩手机在线观看 | 99久久久国产精品 | av高清一区二区三区 | 色黄视频免费观看 | 亚洲综合导航 | 黄色特级毛片 | 狠狠干网| 啪一啪在线 | 99精品欧美一区二区蜜桃免费 | 国产成人综合在线观看 | 亚洲成人精品av | 99久久婷婷国产综合亚洲 | 九九热在线播放 | 黄色日本片 | 免费网站在线观看成人 | 超碰97.com| 亚洲精品国产精品国自产在线 | 亚洲国产成人高清精品 | 在线视频 成人 | 午夜精品一区二区三区视频免费看 | 99热在线国产精品 | 精品96久久久久久中文字幕无 | 中文字幕中文字幕在线中文字幕三区 | 免费福利片2019潦草影视午夜 | 黄色av影视 | 国产不卡一二三区 | 成人免费在线看片 | 亚洲黄色免费网站 | 婷婷四房综合激情五月 | 日韩欧美电影 | 青青久视频 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 四虎影视成人永久免费观看视频 | 国产精品久久嫩一区二区免费 | 国产乱对白刺激视频在线观看女王 | 久久久视屏 | 久草视频在线资源站 | 国产成人精品一区在线 | av看片在线 | 一级精品视频在线观看宜春院 | 久久天天拍 | www国产亚洲精品久久网站 | 国产免费不卡 | 国产一卡二卡四卡国 | 永久av免费在线观看 | 欧美在线视频免费 | 日批网站在线观看 | 天天综合网天天综合色 | 在线精品视频免费播放 | 黄色aa久久 | 日韩大片在线免费观看 | 国产精品一区二区久久国产 | 亚洲精品理论片 | 午夜影院先 | 91激情视频在线观看 | 久草在线观看资源 | 91人网站| 国产成人精品免费在线观看 | 久久精品一区二区三区国产主播 | 天天综合日日夜夜 | 激情五月综合网 | 不卡的av在线播放 | 五月天丁香综合 | 天天夜夜操 | 网站免费黄| 日韩av影片在线观看 | 91av视频免费观看 | 国产在线观看二区 | 91高清免费看 | 亚洲视频网站在线观看 | 国产91精品在线观看 | 久久精品国产亚洲 | 亚洲成免费 | 国产一区二区在线免费播放 | 天天操天天色综合 | 韩国精品在线 | 国外成人在线视频网站 | 在线播放日韩av | 国产一级片观看 | 人人澡人人舔 | 四虎影院在线观看av | www在线观看国产 | 国产精品久久婷婷六月丁香 | 久久天天躁夜夜躁狠狠85麻豆 | 91插插插网站 | 高清不卡免费视频 | 成人久久免费 | 久久99久久久久久 | 99久久综合精品五月天 | 精品影院一区二区久久久 | 国产二区视频在线观看 | 国产精品99久久久久久武松影视 | 亚洲欧洲视频 | 区一区二在线 | 草樱av| 人人干人人上 | 日本精品视频免费 | 亚洲精品美女免费 | 久久激情小视频 | 日韩在线观看 | 欧美日韩国产亚洲乱码字幕 |