2.1.3.1 Kd-trees nhiều chiều
Kd-trees cũng có thể được sử dụng cho tập hợp các điểm trong không gian ba chiều hoặc với chiều cao hơn. Thuật toán xây dựng kd-trees là giống như trường hợp trong mặt phẳng: Tại gốc, chia tập hợp các điểm thành hai tập con có kích thước gần bằng nhau của cùng một siêu phẳng vuông góc với trục tọa độ . Tại các con của gốc sự phân chia dựa trên tọa độ thứ hai (tọa độ ), tại các nút ở chiều sâu hai trên tọa độ thứ ba (tọa độ ) và cứ thực hiện như thế cho đến khi tại chiều sâu chia trên tọa độ cuối cùng (tọa độ ). Ở chiều sâu bắt đầu lại tất cả, chia trên tọa độ thứ nhất. Sự đệ quy dừng lại cho đến khi chỉ còn một điểm trái, sau đó được lưu trữ như một lá. Vì kd-trees chiều cho tập hợp gồm điểmlà câynhị phânvới lá, không gian lưu trữlà và thời gianxây dựnglà , với làhằng số.
Các nút trong kd-trees chiều tương ứng với các vùng như trong mặt phẳng. Thuật toántruy vấnthămcác nútcó các vùngđược cắt bởi phạm vitruy
vấnvàduyệtcác cây con(báo cáocác điểmlưu trữtrong các lá)đó làgốc tạicác nútmà vùngđược chứa hoàn toàntrongphạm vitruy vấn. Điều đócó thểđượcchỉ rarằng thời giantruy vấngiới hạn bởi [5].
2.1.3.2 Range trees nhiều chiều
Để khái quát từ range treeshai chiều đến range trees với số chiềucao hơn là khá đơn giản. Cho làtập hợpcácđiểmtrong không gian chiều. Xây dựngcâynhị phântìm kiếmcân bằngtrên tọa độ thứ nhấtcủacácđiểm. Tập con chính qui củanút trongcây mức đầu tiên - cây chính, bao gồmcácđiểmđược lưu trữtrong lácủacây concó gốc là . Đối vớimỗi nút cầnxây dựngcấu trúcliên kết ; câymức thứ hai - range trees chiều chocác điểmtrong , giới hạn tọa độ cuối cùng của chúng. Range trees
chiều này được xây dựngđệ quytrongcùng một cách: đó làcâynhị phântìm kiếmcân bằngtrêntọa độ thứ haicủa các điểm, trongđómỗi nútcómộtcon trỏ trỏ tớirange trees chiều củacácđiểmtrongcây con, giới hạn tọa độ cuối cùng. Sự đệ quy sẽ dừng lạikhiở tại phía trái cácđiểmgiới hạn của tọa độ cuối cùng, chúng đượclưu trữtrongrange treesmột chiều.
Thuật toántruy vấncũngtương tự nhưtrường hợphai chiều. Sử dụngcâymức đầu tiênđểxác định vị trí nútcó các tập con chính quicùng chứatất cảcácđiểmcótọa độthứ nhấtnằmtrongphạm vi. Nhữngtập con chính quiđượctruy vấn xa hơnbằng cáchthực hiệnphạm vi truy vấntương ứngcác cấu trúc mứcthứ hai. Trong mỗicấu trúcmức thứ hai, chọn tập con chính qui. Các cấu trúc mức thứ ba lưu trữcáctập con chính quisau đó được yêu cầuvới truy vấncóphạm vichotọa độ thứ ba, và cứ thực hiện như vậycho đến khinhận đượccác câymột chiều. Trong nhữngcâynày cần tìmcácđiểmcó tọa độcuối cùngnằmtrongphạm vivàbáo cáo chúng.
Định lí2.4Cho làtập hợp điểmtrong không gian chiều, với .Range treescho sử dụnglưu trữ vàđượcxây dựngtrong thời gian . Range trees có thểbáo cáocácđiểm của nằmtrongphạm vihình chữ nhậtvới thời gian , với làsốđiểmbáo cáo [5].
Thật vậy, gọi làthời gianxây dựngrange treestrêntậphợp điểmtrong không gian chiều. Ta biết . Việc xây dựngrange trees chiều bao gồmxây dựngcâynhị phântìm kiếmcân bằngvà xây dựngcấu trúc liên kết. Tạicácnútởchiều sâubất kỳcủacâymức thứ nhất,mỗi điểmđượclưu trữtrongcấu
trúcliên kết. Thời giancần thiếtđểxây dựngtất cả cáccấu trúcliên kếtcủacácnútvớichiều sâulà – , thời giancần thiếtđểxây dựngcấu trúcliên kếtở gốc. Do đó, tổng thời gian xây dựngrange trees chiềuthỏa
mãn Ta có , công
thức truy hồi có lời giảivới [5].
Gọi làthời gian chi phí chotruy vấnrange trees chiều trên điểm, khôngkểthời gianbáo cáo các điểm. Truy vấnrange trees chiềuliên quan đếnviệc tìm kiếmtrongcâymức thứ nhất, mấtthời gian vàtruy vấncủarange
trees chiều. Vậy , với
Công thức truy hồicó lờigiải với , cộngvới thời gian cần thiếtđểbáo cáocác điểm là [5].
2.1.3.3 Cải tiến range trees
Trongphần trướcmô tảcấu trúc dữ liệurange trees cho cáctruy vấnphạm vihình chữ nhậttrong mặt phẳngcóthời giantruy vấnlà , với làsốđiểmđược lưu trữ trongcấu trúcdữ liệuvà làsố điểmbáo cáo.Trongphần nàymô tảkỹ thuậtđược gọi là phân tầng(fractional cascading), giảmthời giantruy
vấnchỉ còn .
Gọi và làhaitậphợp các đối tượng, trong đó mỗi đối tượngcókhóa (key) là mộtsố thực.Các tập hợpđượclưu trữtheo thứ tựsắp xếptrongcác mảng và . Giả sửcần báo cáotất cảcác đối tượng trong và cócác khóanằmtrong phạm vi truy vấn . Trước tiênthực hiện tìm kiếmnhị phânvới trong đểtìm khóa nhỏ nhất mà lớn hơnhoặcbằng .Từđóduyệtmảng sang phải,báo cáocácđối tượngđã duyệt qua, cho đến khi gặp được khóalớn hơn . Cácđối tượngtừ có thểđược báo cáo tương tự. Nếutổng các đối tượngđược báo cáolà thìthời giantruy vấnsẽlà cộng vớithời gianchohaitìm kiếmnhị phân, trong và . Tuy nhiên, nếucác khóacủacác đối tượng trong làtập concủacác khóacủacác đối tượng trong thì có thểtránhviệc tìm kiếmnhị phânthứ hainhư sau. Thêmcác con trỏtừcác mụctrong đếncác mụctrong : nếu lưu trữđối tượng vớikhóa thìlưu trữcon trỏđếnmục trong vớikhóa nhỏ nhấtlớnhơnhoặcbằng .Nếu không cókhóanhư thế thìcon trỏtừ lànil [5].
trong và cócác khóa nằm trongkhoảngtruy vấn ? Báo cáocác đối tượng
trong vẫnđược thực hiệnnhưtrước:tìm kiếmnhị
phânvới trong vàduyệt sang phảicho đến khigặp được một khóa lớnhơn . Để báo cáocácđiểmtừ tiến hành nhưsau. Tìm trong kết thúctại .
Vậy,khóa của làmột khóa nhỏ
nhấttrong lớnhơnhoặcbằng .Khicáckhóatừ tập con củacác khóa từ , có nghĩalàcon trỏtừ phảitrỏđếnkhóa nhỏ nhấttừ lớnhơnhoặcbằng Vì vậy có thể theocon trỏ nàyvàtừđóbắt đầuđiđếnbên phảiqua . Tương tự,tìm kiếmnhị phân trong làtránh đượcvàbáo cáocácđối tượngtừ chỉ mấtthời gian , với sốcâu trả lờibáo cáo [5].
3 10 19 23 30 37 59 62 70 80 100 105
10 19 30 62 70 80 100
Hình 2.7 - Tăng tốc độ tìm kiếm bằng cách thêm các con trỏ
Trong hình 2.7, ví dụ thực hiệntruy vấnvớiphạm vi[20: 65].Trước tiênta tìm kiếmnhị phântrong đểtìm23, khóanhỏ nhấtlớnhơnhoặcbằng20. Từ đóduyệtvề phía bên phảicho đến khigặpmộtkhóa lớn hơn65. Các đối tượngđượcduyệt qua cócác khóa nằm trongphạm vi, vì vậychúngđược báo cáo.Sau đó,theocon trỏtừ23đến , nhận đượckhóa , đólà khóa nhỏnhấtlớnhơnhoặcbằng20trong Từ đócũngduyệtđếnbên phảicho đến khigặp mộtkhóa lớnhơn65vàbáo cáocácđối tượngtừ ở trong phạm vi [5].
Trình bày quan trọnglàcác tập con chính qui và cả hai đều làcác tập concủa . Gọi làrange treestrêntập hợp Pgồm điểmtrongmặt
phẳng. Mỗitập con chính qui được lưu trữ trongcấu trúcliên kết, thay vìsử dụngcâynhị phântìm kiếm như cấu trúcliên kết, ta lưucác điểmvào mảng đượcsắp xếp theotọa độ củacácđiểm. Hơnnữa, mỗimục trongmảng lưu trữhaicon trỏ: mộtcon trỏtrỏđến vàmộtcon trỏ trỏ đến . Giả sử lưu trữđiểm .Sau đó,lưu trữcon trỏtừ đếncác
mục của màtọa độ củađiểm lưu trữcótọa độ nhỏ
nhấtlớnhơnhoặcbằng . Do đó,nếu cótọa độ nhỏ nhấtlớnhơnhoặcbằngmột sốgiá trị của điểm bất kỳtrong thì cótọa độ nhỏ
nhấtlớnhơnhoặcbằng củabất kỳ điểm nàotrong . Con trỏ trỏ vào đượcđịnh nghĩatrongcùng một cách: trỏ đến mục mà tọa độ
củađiểmlưu trữcótọa độ nhỏ nhấtlớnhơnhoặcbằng [5].
(2,19) (5,80) (7,10) (8,37) (12,3) (15,99) (17,62) (21,49) (33,30) (41,95) (52,23) (58,59) (67,89) (93,70)
Hình 2.8 - Cây chínhcủarange trees phântầng: các láchỉ hiển thị các tọa độ vàcácđiểmlưu trữđượccho ở bêndưới
Hình2.9 - Các mảngliên kếtvớicác núttrongcây chính, vớicáctọa độ của các điểmtrong các điểm củacáctập con chính quitheo thứ tự sắp xếp
Phiên bản sửa đổi này của range trees được gọi là range trees phân tầng (layered range trees) [5]. Hình 2.8 và hình 2.9là một ví dụ về range trees phân tầng. Trong hình 2.9, các vị trícủa cácmảngđượcvẽtương ứngvớivị
17 8 7 52 41 67 58 21 12 33 15 5 2 5 2 7 8 12 15 17 33 21 41 52 67 58 93 3 10 19 37 62 80 99 3 10 19 23 30 37 49 59 62 70 80 89 95 99 23 30 49 59 70 89 95 10 19 37 80 3 62 99 23 30 49 95 59 70 89 19 80 10 37 3 99 62 30 49 23 95 59 70 89 30 95 23 89 70 19 80 10 37 3 99 49
trícủacácnúttrongcâychúng được liên kết: cácmảngtrên cùnglà liên kếtvớigốc, mảngtráibên dướiliên kết vớicáccontráicủagốcvà cứ thực hiện như vậy. Không phải tất cả các con trỏ đều được hiển thị trong hình.
Bằng cách nào đểtrả lờimộttruy vấnvớiphạm vi trongrange trees phântầng. Trước khitìm với và trongcâychính đểxác định các nútcócác tập con chính qui cùng chứacácđiểmcótọa độ trongphạm vi . Gọi là nút chia haiđường đitìm kiếm. Các nútđang tìm là các nút ở dưới đólàconphải củamột núttrênđường đitìm kiếm với cóđường điđến trái, hoặccontráicủamộtnúttrênđường đitìm kiếmvới cóđường điđến phải.
Tại tìm nhữngmục trong cótọa độ là tọa độ nhỏ
nhấtlớnhơnhoặcbằng .Trong khitìm xa hơnvới và trongcáccây chính, rồi tiếp tụctheo dõicácmụctrongcácmảngliên kếtmàtọa độ làtọa độ nhỏ nhấtlớnhơnhoặcbằng .Gọi là một trong nútđượcchọn, phảibáo cáocácđiểmlưu trữ trong có tọa độ nằm trongphạm vi . Tìm nhữngđiểmcó tọa độ nhỏ nhất lớnhơnhoặcbằng ; từ đóduyệt quamảng, báo cáocác điểmsao chotọa độ nhỏhơnhoặcbằng .Do đó, có thểbáo cáocácđiểm cótọa độ y nằm trongphạm vi trongthời gian , với làsố câu trả lờibáo cáocủa nút . Tổng thời giantruy vấntrở
thành [5].
Phântầngcũng giúp cải thiệnthời giantruy vấncủarange tree chiềucao hơn bởi yếu tốlogarit. Truy vấn phạm vi chiều đượcgiải quyếtbằng cáchchọnnhững điểmcótọa độ thứ trongphạm vichính xác với tập con chính quivàgiải quyếttruy vấn chiềutrêncáctập con. Truy vấn chiềuđược giải quyếtbằng đệ quytrongcùng mộtcách [5]. Tiếp tụccho đến khiđượctruy vấnhai chiều có thểđượcgiải quyếtnhưmô tảở trên.
Định lí2.5Cho làtập hợpgồm điểmtrong không gian chiều, với . Range trees phân tầng của sử dụnglưu trữ và có thể đượcxây dựngtrong thời gian . Range treescó thểbáo cáocácđiểm của nằmtrong phạm vitruy vấnhình chữ nhậtvớithời gian , với làsố điểm báo cáo [5].