0
Tải bản đầy đủ (.pdf) (82 trang)

Cutting trees

Một phần của tài liệu MỘT SỐ KIỂU DỮ LIỆU TRỪU TƯỢNG ỨNG DỤNG TRONG HÌNH HỌC TÍNH TOÁN (Trang 62 -62 )

2.3.3.1 Phát biểu bài toán

Trongphầntrướcta giải quyết các vấn đềtìm kiếm phạm vi phẳng với partition trees. Các nhu cầulưu trữcủa partition treeslà tốt: sử dụngkhông gian ước lượng lưu trữ tuyến tính. Tuy nhiên, thời giantruy vấnlà vẫn cao. Ta có thể đạt được thời gian truy vấn tốt hơn chẳng hạn như nếu ta sẵn sàng chi phí cao hơn lưu trữ tuyến tính. Đểcóbất kỳhy vọngthành công, ta phảitừ bỏcácphương pháp tiếp cậnsử dụngcác phân vùngđơn hình: điều này không thểxây dựng cácphân vùngđơn hìnhvớiíthơn số lượng giao nhaumàmong muốn đạt đượcthời giantruy vấnnhanhhơn [5].

Hình 2.25 - Đếm phạm vi nửa mặt phẳngtrongmặt phẳngđối ngẫu: có bao nhiêuđường thẳngở dưới mộtđiểmtruy vấn?

Đểtìm phương pháp tiếp cậnmớicho vấn đề này, ta cầnphảinhìn theokhía cạnhkhác. Trongmặt phẳng đối ngẫuta cótập hợpsau: cho tập hợp gồm đường thẳng trongmặt phẳng, đếmsốđường thẳngở dưới điểmtruy vấn .Vấn đề đếmsố đường thẳng ở dưới mộtđiểmtruy vấntrở thành định vị điểm với sử dụnglưu trữ và cóthời giantruy vấn .

2.3.3.2 Thuật toán và cấu trúc dữ liệu

Ta cần xây dựngtổ hợptoàn bộcáctập con chính quibằng cách sử dụngcấu trúcdữ liệugọilàcutting trees. Ý tưởngđằng saucutting trees giống với partition trees: mặt phẳngđượcphân chiathành cácvùngtam giácnhư miêu tả trong hình 2.26. Tuy nhiên, với cutting treesyêu cầucáctam giáclà không giao nhau. Làm thế nào một phân vùngtrợ giúpđếmsố đường thẳng ởdưới mộtđiểmtruy vấn?Gọi làtậphợp các đườngthẳng thu đượcsau khichia đôi

cácđiểmđượcxử lí trướcchocác truy vấnphạm vitam giác. Xéttam giác củaphân vùngvàđường thẳng màkhôngcắt Nếu nằmdưới thì nằmở dướiđiểmtruy vấnbất kỳ bên trong .Tương tự,nếu nằm ởtrên thì nằmở trênđiểm truy vấnbất kỳ bên trong .Nếu điểm truy vấn nằmtrong thìtakhông biếtliệucác đường thẳng cắt cónằmở trên hoặcở dưới làcác đường thẳngcắt .Cấu trúcdữ liệunày sẽlưu trữmỗitam giáccủaphân vùng, vớimộttruy cậpcho biếtsố đường thẳngdướinó, mỗitam giáccũngcócấu trúcđược định nghĩa đệ quytrêncác đườngthẳng cắt nó. Đểtruy vấntrongcấu trúcnàytrước tiên ta xác định nơi mà tam giác điểmtruy vấn rơi vào. Sau đótính toáncó bao nhiêuđường thẳng từcácđường thẳng màcắt ở dưới , bằng cách thăm đệ quycây contương ứngvới .Cuối cùng, thêmsốlượng tính toántronglời gọiđệ quyvớisốđường thẳng ởdưới Hiệu quảcủa phương pháp nàyphụ thuộcvàosố đường thẳngcắtmộttam giác: nhỏ hơn số này, ít hơncácđường thẳngmàsử dụngđệ quy.

Hình 2.26 - (1/2)-cutting kích thước 10 cho tập hợp gồm 6 đường thẳng

Chotập hợp gồm đường thẳng trong mặt phẳngvà chotham số với . Đườngthẳng được phát biểu làđi quatam giácnếunó cắtphần trong củatam

giác. -cuttingcho làmộttập hợp củatam giáccó

thểkhông bị giới hạnvớicác phần trongkhông giao nhaumàcùng bao phủmặt phẳng, cótính chấtlàkhông cótam giáccủaphân vùngnày được đi quađược hơn đường thẳngtừ .Kích thước của cutting làsốtam giácnóbao gồm. Cấu trúcdữ liệudựa trên cutting được gọi là cutting trees. Cấu trúccơ bảncủacutting trees chotập hợp gồm đường thẳng nhưsau [5].

 Nếu thì cutting trees bao gồmchỉ mộtlá với đượclưu trữ. Tập hợp làtập con chính quicủalá.

 Ngược lại, cấutrúc làcây .Cómột sự tương ứngmột-mộtgiữacáccon củagốccâyvàcáctam giáccủa –cutting chotập hợp , với làmộthằng sốđủlớn. Tam giáccủacutting tương ứng với mộtnút con được kí hiệu là Tập concủacác đường thẳngtrong nằm ở dưới được gọi làtập con chính quidướicủa , kí hiệu là . Tập concủacác đường thẳng trong nằmtrên được gọi làtập con chính qui trên của , kí hiệu là Tập concủa cácđường thẳng điqua được gọi làtập con đi quacủa . Con là gốccủapartition treesđược định nghĩa đệ quytrên tập conđi qua nó; cây connàyđượckí hiệu là .

 Vớimỗi con lưutam giác , tacũnglưu trữthông tinvềtập con chính quidưới và tập con chính qui trên ; đểtínhsốđường thẳngở dướimột điểmtruy vấn ta chỉcầnlưu trữlực lượngcủatập hợp

nhưngvớicác ứng dụngkhác có thểlưu trữcác thông tinkhác.

Hình2.27 - Cáctập con chính quivàtập conđiquatam giác

Hình2.27minh họanhững khái niệm vềtập con chính qui dưới, tập con chính qui trên, tập con đi qua.Thuật toánlựa chọncácđường thẳng từ ở dưới mộtđiểmtruy vấntrongmộtsốtập con chính qui được mô tả dưới đây [5]. Đểđếmsốđường thẳng nhưtính tổngcáclực lượng củacáctập con chính qui được chọn. Cho làđiểmtruy vấn. Tập hợp cácnútđược chọnđượckí hiệubởi .

Algorithm SELECTBELOWPOINT( )

Input.Điểm truy vấn và cutting trees hoặc cây con của nó.

Output. Tập hợp các nút chính qui cho tất cả các đường thẳng trong cây nằm

ởdưới . 1.

2. if bao gồm chỉ một lá then

tập con chính qui trên tập con đi qua

3. if đường thẳng lưu trữ tại nằm ở dưới then

4. else formỗi con của gốc do

5. Kiểm tra nếu nằm trong . 6. Gọi là con mà

7. SELECTBELOWPOINT( , ) 8. return

Như vậy, có thể đếm số đường thẳngở dướiđiểmtruy vấn trongthời gian với cấu trúc sử dụnglưutrữ . Bây giờ, ta xem xét tuy vấn đếm phạm vi tam giác: cho tập hợp gồm các điểm trong mặt phẳng và yêu cầu đếm sốđiểm nằm trong tam giác truy vấn. Theo tiếp cận với các truy vấn nửa mặt phẳng tadẫnđến mặt phẳng đối ngẫu. Tam giác là giao điểm của ba nửa mặt phẳng, do đóđiểm nằmtrong tam giác khi và chỉ khi nó nằm trong mỗi nửa mặt phẳng.

Hình 2.28 - Tìm kiếm phạm vi tam giác

Trong hình 2.28, điểm p nằm trong tam giác vì và và . Đường thẳngđối ngẫuvớip do đó có ở trên nó, và ở dưới nó. Nhìn chung, sự phát biểu bài toánđối ngẫu củatìm kiếm phạm vi tam giác là: cho tập hợpLgồm các đường thẳngtrongmặt phẳngvàbộ ba điểmtruy vấn , , có nhãn“above”hoặc“below”, đếmsốđường thẳng từ nằmở các bên quy định củabađiểm truy vấn. Bài toánnàycó thểđược giải quyết vớicutting trees ba mức. Chotập hợp gồm cácđường thẳngvàcặpđiểmtruy vấn , chọncácđường thẳng nằm ở dưới cả haiđiểmtruy vấn. Sau khitìmcutting trees hai mức giải quyếtvấn đềnày tathiết kế cutting trees ba mứcchocặp vấn đềtìm kiếmphạm vi tam giác sẽ dễ dàng hơn.

mặt phẳng cơ sở mặt phẳng đối ngẫu

Cutting hai mứctrêntập hợp gồm đường thẳngđể lựa chọncác đường thẳngở dưới cặpđiểmtruy vấn , đượcđịnh nghĩanhưsau [5].

 Tập hợp được lưu trữtrongcutting trees .

 Vớimỗinút củacâymức đầu tiên lưu trữtập con chính qui thấp hơn trong cutting mức thứ hai .

Ý tưởnglàmứcđầu tiêncủa câyđược sử dụng đểchọncácđường thẳngở dưới trongmộtsốtập con chính qui. Cáccấu trúcliên kết(hoặccâyởmức thứ hai) lưu trữcáctập con chính quilựa chọnsau đó đượcsử dụng đểchọncácđường thẳngnằmở dưới . Vìcáccấu trúcliên kếtlàcutting trees một mứcsử dụngthuật toánSELECTBELOWPOINTđể truy vấnchúng [5].

Algorithm SELECTBELOWPAIR( , , )

Input. Hai điểm truy vấn và và cutting trees hoặc cây con của nó.

Output. Tập hợp các nút chính qui cho tất cả các đường thẳng trong cây nằm ở

dưới và . 1.

2. if bao gồm chỉ một lá then

3. ifđường thẳng lưu trữ tại nằm ở dưới và then

4. elsefor mỗi con của gốc do

5. Kiểm tra nếu nằm trong . 6. Gọi là con mà 7. SELECTBELOWPOINT( ) 8. ← SELECTBELOWPAIR( ) 9. 10. return

ϒ

2.3.3.3 Phân tích độ phức tạp

Định lí2.16 Vớitập hợp bất kỳgồm đường thẳng trongmặt phẳngvàtham sốrbất kỳ với , -cuttingcủakích thướctồn tại . Hơn nữa, cutting(vớimỗitam giáctrongcáctập concủacác đường thẳngtừ mà điqua nó) có thểđượcxây dựngtrongthời gian [5].

Bổ đề2.17Cho là tập hợpgồm đường thẳng trongmặt phẳng. Sử dụngcutting

trees, đường thẳngtừ ở dưới điểmtruy vấncó thểđượcchọntrongthời gian với tập con chính qui. Kết quảlà, số đường thẳng có

thểđượctínhtrongthời gian . Đối với bất kỳ , cutting trees trên có thểđượcxây dựngmà sử dụnglưutrữ [5].

Thật vậy, gọi kí hiệuthời giantruy vấntrongcutting treeschotập hợp gồm đường thẳng. Khi đó, thỏa mãn công thức truy hồi

Công thức truy hồi có lời giải với chobất kỳhằng số .

Cho trước . TheoĐịnh lí2.16có thểxây dựngmột -cutting cho có kích thước , trong đó làhằng số. Ta xây dựngdựa trêncutting trees dựa trênvề - cutting cho .Số lượnglưu trữđược sử dụng bởicutting trees, thỏa mãn

màtính tổng trêntất cả cáccon củagốc cây. Sốconcủagốclà và chomỗicon . Do đó, vớisự lựa chọn của chúng đệ quy giải quyếtđến

Bổ đề2.18Cho là tập hợp gồm đường thẳngtrongmặt phẳng. Sử dụngcutting

trees haimức, cácđườngthẳng từ ở dướicặpđiểmtruy vấncó thểđược chọnvớithời gian trong tập con chính qui. Nhưhệ quả, số đường thẳngnhư vậycó thểđược tínhtrongthời gian . Với bất kỳ , cutting treeshaimức trên có thểđượcxây dựngmàsử dụnglưu trữ [5].

Thật vậy, gọi kí hiệuthời giantruy vấntrongcutting treeshaimức chotập hợp gồm đường thẳng. Các cấu trúcliên kếtlà cutting trees một mức, thời giantruy vấncáccấu trúcliên kếtlàcủa theo Bổ đề2.33. Do đó,

thỏa mãncông thức truy hồi

Công thức truy hồinàycó lời giải với chobất kỳhằng số .Cho trước . TheoBổ đề2.17có thểxây dựngcáccấu trúcliên kết củacác con có gốcnhư vậymàmỗi nútsử dụnglưu trữ Do đó, số lượnglưu trữđược sử dụng bởicutting trees, thỏa mãn

màtínhtổng trêntất cả cáccon củagốc cây. Sốlượng các concủagốclà và chomỗicon . Nếu làmộthằng số đủlớn, công thức truy hồi có lời giải với

Định lí2.19 Cho là tập hợpgồm điểmtrongmặt phẳng. Với bất kỳ , cócấu trúc dữ liệucho được gọi làcutting trees có sử dụng lưu trữ màcácđiểmtừ nằmtrongtam giáccó thểtruy vấnđược tínhtrongthời gian .Các điểmcó thểđược báo cáo trongthời gianbổ sung , với

làsốđiểm báo cáo. Cấu trúcnày đượcxây dựngtrongthời gian [5].

2.4 Kết luận

Tìm kiếmphạm vi làmột trong nhữngvấn đềnghiên cứuhay nhất trong hình họctính toán. Kd-trees được Bentley [2] đưa ra vào năm 1975 với thời gian truy vấn là . Range trees được phát hiện độc lập bởi Bentley [4], Lee và Wong [20] với thời gian truy vấn là , phân tầng được mô tả bởi Lueker [21] và Willard [31]. Cấu trúc dữ liệu hiệu quả nhất cho các truy vấn phạm vi hai chiều là range trees phân tầng mô tả bởi Chazelle [6] với việc cải tiến thời gian lưu trữ đến trong khi vẫn giữ thời gian truy vấn là . Cấutrúc interval treescho cáctruy vấn được đưa ra bởiEdelsbrunner[14] và McCreight[24]. Câytìm kiếmưu tiênđượcthiết kếbởiMcCreight[25] và khẳng địnhcó thểsử dụng câytìm kiếmưu tiênchotruy vấn stabbinglà tốt.Thực hiệntruy vấn stabbingvới và phạm vitruy

vấn .Segment trees đượcphát hiệnbởiBentley[3] và được sử

dụngnhư là cấu trúc dữ liệumột chiềuchotruy vấn stabbing. Vì vậy, có rất nhiềuphần mở rộngcủasegment trees xử lívớicác đối tượnghai chiềuvà chiều cao hơn[9, 14, 15, 29].

Willard[32] là ngườiđầu tiêntrình bày cấu trúcdữ liệudựatrêný tưởnggiống như partition trees, phân vùngmặt phẳng thành các vùng. Làtốt hơnphân vùngđơn hìnhđã đượcphát triển,hiệu quả hơnpartition treeslà có thể [10, 16, 18, 33]. Cải tiếncó thể đượcbằng cách sử dụngcấu trúchơikhácso vớipartition trees,cụ thể làcâybao trùmvớisốlượng đi quathấp[11, 30]. Giải pháptốt nhấtchotìm kiếmphạm vitam giácđã đượcđưa rabởiMatousek[21].

Chazelle[7]phát biểu rằngcómộtcấu trúc dữ liệucho tìm kiếm phạm vi tam giác, sử dụng lưu trữ cóthời giantruy vấn . Hiện cácthuật toánnổi tiếngnhấtlàcủa Chazelle[8]chỉ ra vớibất kỳtham số , có thểtínhtoán - cuttingcủakích thước vớithuật toántất địnhmà chi phíthời gian

Partition treessử dụngkhông giantuyến tínhnhưngthời giantruy vấnlàkhácao. Cutting trees cóthời giantruy vấnlogaritnhưngkhông gian lưu trữ rất lớn, lý tưởng nhất làcómộtcấu trúcsử dụngkhông giantuyến tínhvàthời giantruy vấnlogarit. Kết quảcải tiến có thểởchiềucao hơnnhư:cácđiểmtrong truy vấnnửakhông gianđược báo cáo vớithời gian

Chương 3 - CÀI ĐẶT VÀ ĐÁNH GIÁ

Mặc dù hiệu suất của các cấu trúc dữ liệu hình học có thể chứng minh lý thuyết, việc cài đặt một vài thực nghiệm cũng là cần thiết để đánh giá độ lớn của hằng số ẩn trong ký pháp đánh giá thời gian thực hiện giải thuật. Có 4 loại cấu trúc được tiến hành thực nghiệm: Kd-trees, Range trees, Interval trees và Segment trees.

Một phần của tài liệu MỘT SỐ KIỂU DỮ LIỆU TRỪU TƯỢNG ỨNG DỤNG TRONG HÌNH HỌC TÍNH TOÁN (Trang 62 -62 )

×