韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

一種效率極高的分類算法 

一種效率極高的分類算法 

更新時(shí)間:2022-10-13 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

分類算法要解決的問題
在網(wǎng)站建設(shè)中,分類算法的應(yīng)用非常的普遍。在設(shè)計(jì)一個(gè)電子商店時(shí),要涉及到商品分類;在設(shè)計(jì)發(fā)布系統(tǒng)時(shí),要涉及到欄目或者頻道分類;在設(shè)計(jì)軟件下載這樣的程序時(shí),要涉及到軟件的分類;如此等等?梢哉f,分類是一個(gè)很普遍的問題。

我常常面試一些程序員,而且我?guī)缀鹾翢o例外地要問他們一些關(guān)于分類算法的問題。下面的舉幾個(gè)我常常詢問的問題。你認(rèn)為你可以很輕松地回答么^_^.

1、分類算法常常表現(xiàn)為樹的表示和遍歷問題。那么,請(qǐng)問:如果用數(shù)據(jù)庫中的一個(gè)Table來表達(dá)樹型分類,應(yīng)該有幾個(gè)字段?
2、如何快速地從這個(gè)Table恢復(fù)出一棵樹;
3、如何判斷某個(gè)分類是否是另一個(gè)分類的子類;
4、如何查找某個(gè)分類的所有產(chǎn)品;
5、如何生成分類所在的路徑。
6、如何新增分類;

在不限制分類的級(jí)數(shù)和每級(jí)分類的個(gè)數(shù)時(shí),這些問題并不是可以輕松回答的。本文試圖解決這些問題。

分類的數(shù)據(jù)結(jié)構(gòu)
我們知道:分類的數(shù)據(jù)結(jié)構(gòu)實(shí)際上是一棵樹。在《數(shù)據(jù)結(jié)構(gòu)》課程中,大家可能學(xué)過Tree的算法。由于在網(wǎng)站建設(shè)中我們大量使用數(shù)據(jù)庫,所以我們將從Tree在數(shù)據(jù)庫中的存儲(chǔ)談起。

為簡(jiǎn)化問題,我們假設(shè)每個(gè)節(jié)點(diǎn)只需要保留Name這一個(gè)信息。我們需要為每個(gè)節(jié)點(diǎn)編號(hào)。編號(hào)的方法有很多種。在數(shù)據(jù)庫中常用的就是自動(dòng)編號(hào)。這在Access、SQL Server、Oracle中都是這樣。假設(shè)編號(hào)字段為ID。

為了表示某個(gè)節(jié)點(diǎn)ID1是另外一個(gè)節(jié)點(diǎn)ID2的父節(jié)點(diǎn),我們需要在數(shù)據(jù)庫中再保留一個(gè)字段,說明這個(gè)分類是屬于哪個(gè)節(jié)點(diǎn)的兒子。把這個(gè)字段取名為FatherID。如這里的ID2,其FatherID就是ID1。

這樣,我們就得到了分類Catalog的數(shù)據(jù)表定義:

Create Table [Catalog](

[ID] [int] NOT NULL,

[Name] [nvarchar](50) NOT NULL,

[FatherID] [int] NOT NULL

);

約定:我們約定用-1作為最上面一層分類的父親編碼。編號(hào)為-1的分類。這是一個(gè)虛擬的分類。它在數(shù)據(jù)庫中沒有記錄。

如何恢復(fù)出一棵樹
上面的Catalog定義的最大優(yōu)勢(shì),就在于用它可以輕松地恢復(fù)出一棵樹—分類樹。為了更清楚地展示算法,我們先考慮一個(gè)簡(jiǎn)單的問題:怎樣顯示某個(gè)分類的下一級(jí)分類。我們知道,要查詢某個(gè)分類FID的下一級(jí)分類,SQL語句非常簡(jiǎn)單:

select Name from catalog where FatherID=FID

顯示這些類別時(shí),我們簡(jiǎn)單地用<LI>來做到:


<%

REM oConn---數(shù)據(jù)庫連接,調(diào)用GetChildren時(shí)已經(jīng)打開

REM FID-----當(dāng)前分類的編號(hào)


Function GetChildren(oConn,FID)

strSQL = "select ID,Name from catalog where FatherID="&FID

set rsCatalog = oConn.Execute(strSQL)

%>

<UL>

<%

Do while not rsCatalog.Eof

%>

<LI><%=rsCatalog("Name")%>

<%

Loop

%>

</UL>

<%

rsCatalog.Close

End Function

%>

現(xiàn)在我們來看看如何顯示FID下的所有分類。這需要用到遞歸算法。我們只需要在GetChildren函數(shù)中簡(jiǎn)單地對(duì)所有ID進(jìn)行調(diào)用:GetChildren(oConn,Catalog(“ID”))就可以了。

<%

REM oConn---數(shù)據(jù)庫連接,已經(jīng)打開

REM FID-----當(dāng)前分類的編號(hào)


Function GetChildren(oConn,FID)

strSQL = "select Name from catalog where FatherID="&FID

set rsCatalog = oConn.Execute(strSQL)

%>

<UL>

<%

Do while not rsCatalog.Eof

%>

<LI><%=rsCatalog("Name")%>

<%=GetChildren(oConn,Catalog("ID"))%>


<%

Loop

%>

</UL>

<%

rsCatalog.Close

End Function

%>

修改后的GetChildren就可以完成顯示FID分類的所有子分類的任務(wù)。要顯示所有的分類,只需要如此調(diào)用就可以了:

<%

REM strConn--連接數(shù)據(jù)庫的字符串,請(qǐng)根據(jù)情況修改

set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open strConn

=GetChildren(oConn,-1)

oConn.Close

%>


如何查找某個(gè)分類的所有產(chǎn)品;
現(xiàn)在來解決我們?cè)谇懊嫣岢龅牡谒膫(gè)問題。第三個(gè)問題留作習(xí)題。我們假設(shè)產(chǎn)品的數(shù)據(jù)表如下定義:

Create Table Product(

[ID] [int] NOT NULL,

[Name] [nvchar] NOT NULL,

[FatherID] [int] NOT NULL

);

其中,ID是產(chǎn)品的編號(hào),Name是產(chǎn)品的名稱,而FatherID是產(chǎn)品所屬的分類。

對(duì)第四個(gè)問題,很容易想到的辦法是:先找到這個(gè)分類FID的所有子類,然后查詢所有子類下的所有產(chǎn)品。實(shí)現(xiàn)這個(gè)算法實(shí)際上很復(fù)雜。代碼大致如下:

<%

Function GetAllID(oConn,FID)

Dim strTemp


If FID=-1 then

strTemp = ""

else

strTemp =","

end if


strSQL = "select Name from catalog where FatherID="&FID

set rsCatalog = oConn.Execute(strSQL)

Do while not rsCatalog.Eof

strTemp=strTemp&rsCatalog("ID")&GetAllID(oConn,Catalog("ID")) REM 遞歸調(diào)用

Loop

rsCatalog.Close


GetAllID = strTemp

End Function


REM strConn--連接數(shù)據(jù)庫的字符串,請(qǐng)根據(jù)情況修改

set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open strConn


FID = Request.QueryString("FID")


strSQL = "select top 100 * from Product where FatherID in ("&GetAllID(oConn,FID)&")"

set rsProduct=oConn.Execute(strSQL)

%>

<UL><%

Do while not rsProduct.EOF

%>

<LI><%=rsProduct("Name")%>

<%

Loop

%>

</UL>

<%rsProduct.Close

oConn.Close

%>

這個(gè)算法有很多缺點(diǎn)。試列舉幾個(gè)如下:

1、 由于我們需要查詢FID下的所有分類,當(dāng)分類非常多時(shí),算法將非常地不經(jīng)濟(jì),而且,由于要構(gòu)造一個(gè)很大的strSQL,試想如果有1000個(gè)分類,這個(gè)strSQL將很大,能否執(zhí)行就是一個(gè)問題。

2、 我們知道,在SQL中使用In子句的效率是非常低的。這個(gè)算法不可避免地要使用In子句,效率很低。


我發(fā)現(xiàn)80%以上的程序員鐘愛這樣的算法,并在很多系統(tǒng)中大量地使用。細(xì)心的程序員會(huì)發(fā)現(xiàn)他們寫出了很慢的程序,但苦于找不到原因。他們反復(fù)地檢查SQL的執(zhí)行效率,提高機(jī)器的檔次,但效率的增加很少。

最根本的問題就出在這個(gè)算法本身。算法定了,能夠再優(yōu)化的機(jī)會(huì)就不多了。我們下面來介紹一種算法,效率將是上面算法的10倍以上。

分類編碼算法
問題就出在前面我們采用了順序編碼,這是一種最簡(jiǎn)單的編碼方法。大家知道,簡(jiǎn)單并不意味著效率。實(shí)際上,編碼科學(xué)是程序員必修的課程。下面,我們通過設(shè)計(jì)一種編碼算法,使分類的編號(hào)ID中同時(shí)包含了其父類的信息。一個(gè)五級(jí)分類的例子如下:



此例中,用32(4+7+7+7+7)位整數(shù)來編碼,其中,第一級(jí)分類有4位,可以表達(dá)16種分類。第二級(jí)到第五級(jí)分類分別有7位,可以表達(dá)128個(gè)子分類。

顯然,如果我們得到一個(gè)編碼為 1092787200 的分類,我們就知道:由于其編碼為

0100 0001001 0001010 0111000 0000000

所以它是第四級(jí)分類。其父類的二進(jìn)制編碼是0100 0001001 0001010 0000000 0000000,十進(jìn)制編號(hào)為1092780032。依次我們還可以知道,其父類的父類編碼是0100 0001001 0000000 0000000 0000000,其父類的父類的父類編碼是0100 0000000 0000000 0000000 0000000。(我是不是太羅嗦了J,但這一點(diǎn)很重要。再回頭看看我們前面提到的第五個(gè)問題。哈哈,這不就已經(jīng)得到了分類1092787200所在的分類路徑了嗎?)。

現(xiàn)在我們?cè)谝话愕那闆r下來討論類別編碼問題。設(shè)類別的層次為k,第i層的編碼位數(shù)為Ni, 那么總的編碼位數(shù)為N(N1+N2+..+Nk)。我們就得到任何一個(gè)類別的編碼形式如下:

2^(N-(N1+N2+…+Ni))*j + 父類編碼

其中,i表示第i層,j表示當(dāng)前層的第j個(gè)分類。

這樣我們就把任何分類的編碼分成了兩個(gè)部分,其中一部分是它的層編碼,一部分是它的父類編碼。

由下面公式定一的k個(gè)編碼我們稱為特征碼:(因?yàn)閕可以取k個(gè)值,所以有k個(gè))

2^N-2^(N-(N1+N2+…+Ni))

對(duì)于任何給定的類別ID,如果我們把ID和k個(gè)特征碼“相與”,得到的非0編碼,就是其所有父類的編碼!


位編碼算法
對(duì)任何順序編碼的Catalog表,我們可以設(shè)計(jì)一個(gè)位編碼算法,將所有的類別編碼規(guī)格化為位編碼。在具體實(shí)現(xiàn)時(shí),我們先創(chuàng)建一個(gè)臨時(shí)表:

Create TempCatalog(

[OldID] [int] NOT NULL,

[NewID] [int] NOT NULL,

[OldFatherID] [int] NOT NULL,

[NewFatherID] [int] NOT NULL

);

在這個(gè)表中,我們保留所有原來的類別編號(hào)OldID和其父類編號(hào)OldFatherID,以及重新計(jì)算的滿足位編碼要求的相應(yīng)編號(hào)NewID、NewFatherID。

程序如下:

<%

REM oConn---數(shù)據(jù)庫連接,已經(jīng)打開

REM OldFather---原來的父類編號(hào)

REM NewFather---新的父類編號(hào)

REM N---編碼總位數(shù)

REM Ni--每一級(jí)的編碼位數(shù)數(shù)組

REM Level--當(dāng)前的級(jí)數(shù)


sub FormatAllID(oConn,OldFather,NewFather,N,Nm,Ni byref,Level)

strSQL = "select CatalogID , FatherID from Catalog where FatherID=" & OldFather

set rsCatalog=oConn.Execute( strSQL )


j = 1

do while not rsCatalog.EOF

i = 2 ^(N - Nm) * j

if Level then i= i + NewFather



OldCatalog = rsCatalog("CatalogID")

NewCatalog = i


REM 寫入臨時(shí)表

strSQL = "Insert into TempCatalog (OldCatalogID , NewCatalogID , OldFatherID , NewFatherID)"

strSQL = strSQL & " values(" & OldCatalog & " , " & NewCatalog & " , " & OldFather & " , " & NewFather & ")"


Conn.Execute strSQL


REM 遞歸調(diào)用FormatAllID

Nm = Nm + Ni(Level+1)

FormatAllID oConn,OldCatalog , NewCatalog ,N,Nm,Ni,Level + 1


rsCatalog.MoveNext

j = j+1

loop

rsCatalog.Close

end sub

%>


調(diào)用這個(gè)算法的一個(gè)例子如下:

<%

REM 定義編碼參數(shù),其中N為總位數(shù),Ni為每一級(jí)的位數(shù)。

Dim N,Ni(5)

Ni(1) = 4

N = Ni(1)

for i=2 to 5

Ni(i) = 7

N = N + Ni(i)

next


REM 打開數(shù)據(jù)庫,創(chuàng)建臨時(shí)表

strSQL = "Create TempCatalog( [OldID] [int] NOT NULL, [NewID] [int] NOT NULL, [OldFatherID] [int] NOT NULL, [NewFatherID] [int] NOT NULL);"

Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open Application("strConn")

Conn.Execute strSQL


REM 調(diào)用規(guī)格化例程

FormatAllID Conn,-1,-1,N,Ni(1),Ni,0


REM ------------------------------------------------------------------------

REM 在此處更新所有相關(guān)表的類別編碼為新的編碼即可。

REM ------------------------------------------------------------------------


REM 關(guān)閉數(shù)據(jù)庫
strSQL= "drop table TempCatalog;"
Conn.Execute strSQL
Conn.Close

%>


第四個(gè)問題
現(xiàn)在我們回頭看看第四個(gè)問題:怎樣得到某個(gè)分類下的所有產(chǎn)品。由于采用了位編碼,現(xiàn)在問題變得很簡(jiǎn)單。我們很容易推算:某個(gè)產(chǎn)品屬于某個(gè)類別的條件是Product.FatherID&(Catalog.ID的特征碼)=Catalog.ID。其中“&”代表位與算法。這在SQL Server中是直接支持的。

舉例來說:產(chǎn)品所屬的類別為:1092787200,而當(dāng)前類別為1092780032。當(dāng)前類別對(duì)應(yīng)的特征值為:4294950912,由于1092787200&4294950912=8537400,所以這個(gè)產(chǎn)品屬于分類8537400。

我們前面已經(jīng)給出了計(jì)算特征碼的公式。特征碼并不多,而且很容易計(jì)算,可以考慮在Global.asa中Application_OnStart時(shí)間觸發(fā)時(shí)計(jì)算出來,存放在Application(“Mark”)數(shù)組中。

當(dāng)然,有了特征碼,我們還可以得到更加有效率的算法。我們知道,雖然我們采用了位編碼,實(shí)際上還是一種順序編碼的方法。表現(xiàn)出第I級(jí)的分類編碼肯定比第I+1級(jí)分類的編碼要小。根據(jù)這個(gè)特點(diǎn),我們還可以由FID得到兩個(gè)特征碼,其中一個(gè)是本級(jí)位特征碼FID0,一個(gè)是上級(jí)位特征碼FID1。而產(chǎn)品屬于某個(gè)分類FID的充分必要條件是:

Product.FatherID>FID0 and Product.FatherID<FID1

下面的程序顯示分類FID下的所有產(chǎn)品。由于數(shù)據(jù)表Product已經(jīng)對(duì)FatherID進(jìn)行索引,故查詢速度極快:

<%

REM oConn---數(shù)據(jù)庫連接,已經(jīng)打開

REM FID---當(dāng)前分類

REM FIDMark---特征值數(shù)組,典型的情況下為Application(“Mark”)

REM k---數(shù)組元素個(gè)數(shù),也是分類的級(jí)數(shù)

Sub GetAllProduct(oConn,FID,FIDMark byref,k)

' 根據(jù)FID計(jì)算出特征值FID0,FID1

for i=k to 1

if (FID and FIDMark = FID ) then exit

next

strSQL = "select Name from Product where FatherID>"FIDMark(i)&" and FatherID<"FIDMark(i-1)

set rsProduct=oConn.Execute(strSQL)%>

<UL><%

Do While Not rsProduct.Eof%>

<LI><%=rsProduct("Name")

Loop%>

</UL><%

rsProduct.Close

End Sub

%>

關(guān)于第5個(gè)問題、第6個(gè)問題,就留作習(xí)題吧。有了上面的位編碼,一切都應(yīng)該迎刃而解。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
美国av免费观看| 无码中文字幕色专区| 蜜臀久久99精品久久久画质超高清| 欧美丰满少妇xxxxx做受| 2021中文字幕一区亚洲| 亚洲成人aaa| 狠狠躁狠狠躁视频专区| 网友自拍区视频精品| 在线观看av大片| 亚洲免费成人av电影| 久久久久成人网| 国产精品成人国产| 三级不卡在线观看| 一本一道久久a久久精品蜜桃| 日韩av电影免费观看高清| 亚洲www色| 欧美一a一片一级一片| 国产精品久久麻豆| 欧美高清性xxxxhdvideosex| 亚洲免费av电影| 成人激情电影在线看| 性感美女一区二区三区| 免费看国产精品一二区视频| 免费成人黄色大片| 超碰caoporn久久| 亚洲欧美国产一区二区| 人人狠狠综合久久亚洲| 欧美理论在线| 国产精品久久久久av电视剧| 久久久亚洲影院| 污视频免费在线观看| 97超级在线观看免费高清完整版电视剧| 亚洲欧洲制服丝袜| 亚洲美女高潮久久久| 久热re这里精品视频在线6| 在线人成日本视频| 少妇久久久久久被弄到高潮| 成人免费黄色av| 高潮一区二区三区乱码| 亚洲视频在线观看一区二区三区| 你懂得在线网址| 成人短视频在线观看免费| 久久精品免视着国产成人| 欧美日韩在线二区| 久久久噜久噜久久综合| 国内伊人久久久久久网站视频| 国产黄在线观看免费观看不卡| 蜜桃视频最新网址| 国产欧美一区二区三区在线观看视频| 精品国产亚洲日本| 羞羞免费视频网站| 久久发布国产伦子伦精品| 国产色播av在线| 欧美亚洲国产精品久久| 91精品在线免费| 国产乱码精品一品二品| 米奇四色影视| 一级日本免费的| www视频在线观看| 亚洲一级片免费看| 手机福利在线视频| 亚洲大胆美女视频| 99久久久无码国产精品| 日韩成人在线视频网站| lutube成人福利在线观看| 亚洲色图另类图片| 国产aⅴ夜夜欢一区二区三区| 精品蜜桃一区二区三区| 国产一区二区三区不卡视频网站| 欧美一区二区在线视频| 国产无遮挡又黄又爽| 一本色道久久综合狠狠躁篇的优点| 国产在线乱码一区二区三区| 亚洲人一二三区| 欧美在线观看天堂一区二区三区| 99精品欧美一区二区| 日本三级韩国三级欧美三级| 国产精品免费视频久久久| 韩漫成人漫画| 国产精品久久精品国产| 亚洲欧美天堂网| 日韩女优电影在线观看| 日本一区二区三区免费看| 不许穿内裤随时挨c调教h苏绵| 狠狠狠色丁香婷婷综合久久五月| 在线观看免费观看在线91| wwwxxx亚洲| 日韩精品四区| 精品久久久久亚洲| 亚洲最大福利网| 亚洲成人网av| 18性欧美xxxⅹ性满足| 成人写真视频| 一级二级黄色片| 在线一区二区日韩| 一道精品一区二区三区| 上原亚衣av一区二区三区| 玛丽玛丽电影原版免费观看1977| 亚洲一区二区四区| 一区中文字幕在线观看| 高清日韩电视剧大全免费| 永久免费未视频| 青青草视频在线免费播放| 91超碰在线| 中文成人在线| 日韩久久久久久久久久久久| 国产乱码精品一区二区三区日韩精品| 久久久一二三四| 国产av一区二区三区精品| 中文av在线全新| 欧美亚洲综合一区| 最新中文字幕亚洲| 999久久久国产999久久久| 欧美国产日韩一二三区| 在线看国产视频| 国产伦久视频在线观看| 狠狠色综合网站久久久久久久| 多野结衣av一区| 中文字幕在线视频精品| 日本在线电影一区二区三区| 91人人网站| av福利导福航大全在线| 欧美日韩国产精品一区二区三区| 99视频免费观看| 在线观看成年人视频| 国产精品伊人| 亚洲午夜精品一区二区三区他趣| 一区二区三区网| 亚欧美中日韩视频| 欧美啪啪一区| 久久成人人人人精品欧| jizz.日本| 精品激情国产视频| 亚洲精品天堂在线观看| 中文字幕有码热在线视频| 一区二区三区精密机械公司| 亚洲精品国产suv一区| 久久久久国产一区二区| 天堂а√在线官网| 日本欧美一区二区在线观看| 亚洲精品乱码电影在线观看| 亚洲成人激情在线| 狠狠狠色丁香婷婷综合激情| 中文在线第一页| 日韩激情一区| 一区二区三区欧洲区| 亚洲一区影院| 狠狠色狠狠色综合日日小说| 一二三av在线| 欧美高清videos高潮hd| 丝袜脚交一区二区| 久久国产一级片| 日漫免费在线观看网站| 肉色丝袜一区二区| 91精品视频大全| 99热这里只有精品在线| 亚洲综合社区网| 97久久超碰| 僵尸再翻生在线观看免费国语| 黄色激情小视频| 国产精品国产亚洲精品看不卡| 最近中文字幕免费在线观看| 国产成人精品久久二区二区| 免费看岛国视频在线观看| 国产精品啪视频| 欧美视频精品全部免费观看| 香蕉成人在线视频| 欧美另类一区二区| 99精品99久久久久久宅男| 91丨porny丨首页| 大肉大捧一进一出好爽动态图| 天天射综合网站| 精品国产一区二区国模嫣然| 欧美xxxx黑人xyx性爽| 亚洲欧美一区二区三区| 国产裸体写真av一区二区| 欧美一区二区视频在线播放| 亚洲91av| 亚洲男人天堂古典| 三级一区在线视频先锋| 日本综合字幕| 人妻大战黑人白浆狂泄| 啦啦啦在线视频免费观看高清中文| 久久久精品一区| 丝袜中文在线| 美女脱光衣服与内衣内裤一区二区三区四区| 国产精品91一区二区三区| 爱爱永久免费视频| 人妻精品一区二区三区| 国产黄色av网站| 黑人精品一区二区| 国产精品-区区久久久狼| 亚洲欧美成aⅴ人在线观看| 国产欧美日韩中文字幕在线| 久久久久中文字幕| 国产亚洲自拍av| 亚洲乱码精品一二三四区日韩在线| 飘雪影视在线观看免费观看| 亚洲欧洲av一区二区三区久久| 欧美色爱综合| 91色|porny| 精品视频一区在线视频| 国产精品剧情一区二区在线观看| 国产精品一区二区三区精品| 亚洲天堂视频在线观看免费| 男男视频在线观看网站| 国产日韩精品suv| 91九色蝌蚪嫩草| 午夜欧洲一区| 成人一级黄色片| 色视频欧美一区二区三区| 蜜桃久久av一区| 国产精品入口免费软件| 无码人妻一区二区三区在线视频| 国内av在线播放| 98视频在线噜噜噜国产| 国产欧美日韩精品一区二区免费| 9i看片成人免费看片| 精品偷拍各种wc美女嘘嘘| 亚洲高清免费在线观看| 亚洲另类春色校园小说| 北岛玲一区二区三区| 久热免费视频| 精品人妻一区二区免费| 精品国产av鲁一鲁一区| 国产精品久久久久久久久搜平片| 久久天堂电影| 色av成人天堂桃色av| 制服丝袜影音先锋| 亚洲国产成人91porn| 久久午夜老司机| 亚洲精品成av人片天堂无码| 精品国产美女福利到在线不卡| 日韩av最新在线| 91亚洲精华国产精华| 性一交一乱一伧老太| 日韩欧美中文一区二区| 不卡的一区二区| 日本美女视频一区二区| 色偷偷成人一区二区三区91| www.555国产精品免费| 性色av无码久久一区二区三区| 2020日本不卡一区二区视频| 欧美大黑bbbbbbbbb在线| 91小视频免费看| 蜜臀av国内免费精品久久久夜夜| 亚洲欧美在线免费| 播五月开心婷婷综合| 亚洲一区二区在线观| 你懂的网址一区二区三区| 国产精品久久毛片av大全日韩| jizz日本在线播放| 久久视频在线看| 国产成人精品一区二三区| 国产九色视频| 6080yy精品一区二区三区| 欧美刺激午夜性久久久久久久| 亚洲高清在线看| 精品影片一区二区入口| 免费人成又黄又爽又色| 日韩一区二区在线免费| 久久黄色av网站| 国产一区二区区别| 久久久国产视频| 国产jizzjizz一区二区| 国产精品自拍首页| 久久久久久久久久久久| 久久久久久久久免费| 乱人伦中文字幕在线zone| xvideos成人免费中文版| 亚洲免费观看在线观看| 亚洲成人黄色网址| 综合毛片免费视频| 久久视频在线观看| 91香蕉视频污在线观看| 欧美精品久久久久久久久老牛影院| 男女男精品网站| 国产一区二区电影在线观看| 日本高清不卡中文字幕| 视频一区视频二区视频三区视频四区国产| 东方av正在进入| 国产一区二区三区免费| 成人www视频网站免费观看| 在线看的毛片| 欧美亚洲激情视频| 国产免费一区二区三区四在线播放| 青青草国产成人a∨下载安卓| 亚洲欧洲av色图| 欧美精品色综合| 日韩二区三区在线观看| 五月综合激情婷婷六月色窝| 欧美日韩综合视频网址| 男女毛片免费视频看| 成人福利一区二区| 黄色激情网站| 综合国产在线观看| 亚洲精品亚洲人成人网| 久久久久亚洲AV成人无在| 亚洲国产高清高潮精品美女| 肉色超薄丝袜脚交69xx图片| 亚洲精品国产动漫| xfplay资源站色先锋在线观看| 亚洲黄色在线观看视频| 国产精品网站在线看| 欧美乱大交xxxxx在线观看| 国产无遮挡又黄又爽在线观看| 91精品少妇一区二区三区蜜桃臀| 蜜臀99久久精品久久久久小说| 成人黄色电影网址| 亚洲二区在线播放视频| 国产一区精品| 99久久久无码国产精品免费蜜柚| 粉嫩av性色av蜜臀av网站| 国产在线视频欧美一区二区三区| 日韩av手机在线播放| av图片在线观看| 国产极品久久久久久久久波多结野| 国产精品美女久久久久久免费| 99在线精品观看| 久久精品黄色| 亚洲精品老司机| 久久婷婷人人澡人人喊人人爽| dy888午夜| 欧美国产在线看| 久久一区二区精品| 精品无码一区二区三区蜜臀| 中文无字幕一区二区三区| 一区二区三区四区电影|