Transcript O(n)
Orthogonal Range Searching
Querying a Database
92 ابان
عاطفه اکبری-زینب محمدی
بسیاری از انواع پرسش هایی که روی یک پایگاه داده پرسیده میشود قابلتفسیر به صورت هندس ی است.
برای این منظور رکوردهای پایگاه داده را به نقاطی در فضای چند بعدی انتقال
می دهیم و پرسش ها را روی این نقاط اجرا میکنیم.
در هر مسیری که به چپ حرکت میکنیم برگهای زیر درخت راست را گزارش
میکنیم و در حرکت به سمت راست برگ های زیر درخت چپ را.
لم :1-5الگوریتم
دقیقا نقاطی را که در بازه قرار دارد گزارش میکند.
اثبات:
-1هر نقطه ای که گزارش شده در بازه بوده
-2هر نقطه ای که در بازه هست گزارش میشود.
Complexities:
Query Time
O( K + log n) T ,[x,x’] output
Construction Time O(n log n)
Space
O(n)
PT
store T
فرض های اولیه :هیچ دو نقطه ای مختصات x,yیکسان ندارند
یک فضای 2بعدی را میتوان ترکیبی از 2تا فضای 1بعدی در نظر گرفت.
ساختمان داده ی مناسب :
bstمتوازن؟
با توجه به تعریف بازگشتی bstمتوازن قابل تعمیم به
فضای با بعد باالتر هست.
تعریف بازگشتی :مجموعه ای از نقاط که به دو
زیرمجموعه ی تقریبا مساوی تقسیم میشوند یک زیر
مجموعه شامل نقاط کوچکتر یا مساوی با راس جداساز
و دیگری شامل نقاط بزرگتر از راس جداساز
dimension d=2:
y
point p=( x(p) , y(p) ) , range
R = [x1 : x2] [y1 : y2]
p R x(p) [x1 : x2] and y(p) [y1 : y2] .
R
y2
y(p)
y1
p
x
x1
x(p) x2
L
L
2D-tree
Pright
Pleft
Pleft
Pright
OR
Pright
L
Pleft
خط جداساز:L
Buildkdtree(p,depth)
L1
L5
L9
p10
p2
p8
L2
p1
p5 p
6
p3
L4
p4
L3
L6
p9
L8 p7
L1
L7
L2
L6
L3
L4
p1
p3
L5
p4
p2
L7
L8
p5
p7
p6
L9
p9
p8
p10
زمان ساخت:
)O(nlogn
)T(n)=O(n)+2T(n/2
فضای ذخیره سازیO(n):
لم :3-5یک kdtreeروی مجموعه ای از nنقطه فضایی برابر با ) o(nخواهد
برد و در زمان ) o(nlognساخته میشود.
نتیجه :اگر ناحیه ی پرسش ما با )region(vاشتراک داشته باشد باید به دنبال زیردرختی باشیم که
ریشه ی ان vهست.
لم :4-5پرس و جو برای یک دامنه ی مستطیل شکل در یک kdtreeبا nنقطه در
زمان ) O(k+√nانجام میشود.
قضیه :5-5
یک درخت kdبرای مجموعه ای از nنقطه در صفحه در زمان )O(nlogn
ساخته میشود و فضایی برابر با ) O(nاستفاده خواهد کرد.و پرس و جو برای
داده در فضای 2بعدی )O(K+√nمیباشد.
برای راحتی کار و پیدا کردن حداکثر ناحیههایی که با مرز های ما برخورد دارند یکی از
4یال (چون فضا 2بعدی است) رو در نظر گرفته
و مساله را برای ان حل میکنیم و چون برای
همه ی یال ها روال کار مشابه است نتیجه را
در 4ضرب میکنیم.
برای اینکه کران باال برای نواحیدارای اشتراک با ناحیه ی جستجو بدست
بیاید پاره خط ها را خط در نظر
میگیریم.
توجه:یال مورد نظر(خط قرمز)فقط یک سمت هر خط جداساز عمودی
قرار داشته و دو طرف هر خط جداساز افقی است.
اگر )Q(nرا تعداد نود های دارای ناحیه ی مشترک در یک kdtreeبا nبرگ
در نظر بگیریم میتوان روابط زیر را نتیجه گرفت:
اگر در عمق زوج درخت باشیم:
)Q(n)=1+Q(n/2
)(1
و اگر در عمق فرد باشیم
)Q(n)=1+2Q(n/2
از ) (1و ) (2نتیجه میشود:
)Q(n)ϵO)√ n
)Q(n)=O(k)+2Q(n/4
)(2
2تا خط عمودی و 2تا خط افقی داریم که حداکثر نواحی مشترک با هر یک از انها )o(√nاست
فضای 3بعدی:
y
z
x
مشابه حالت قبل:
)x: Q(n)=1+Q(n/2
)y: Q(n)=1+2Q(n/2
)z: Q(n)=1+2Q(n/2
با ترکیب 3رابطه ی باال:
)Q(n)=O(1)+4Q(n/8
Q(n)ϵ
هر مکعب 6وجه دارد که برای هر کدام رابطه ی باال صادق است.
Range Tree
Range tree
نتیجه:پرس و جو در یک kdtreeدرزمان
قابل اجراست.
ایا میتوان زمان را بهبود داد؟
Range tree
• زمان ساخت k_dtreeاز مرتبهی )O(n
• زمان جستجو در k_dtreeازمرتبهی
)O(n log n
)O(√n + k
)O((log n)2 + k
زیرمجموعه ی کانونی) :p(vمجموعهی نقاطی که در
برگهای زیر درخت با ریشه ی vذخیره شده اند.
• اجتماع مجزای ) O(log nزیرمجموعهی کانونی را برای هر درخت در الیهی اول
تعریف میکنیم.
• درخت اصلی
• درخت وابسته
بر اساس مؤلفه x
بر اساس مؤلفه y
Range Trees
2-level data structure:
root[T ]
Primary Level:
BST on
x-coordinates
Tassoc(v)
v
Secondary level:
BST on y-coord.
P(v)
P(v)
min(v)
max(v)
• در این جا به بررسی سه مورد میپردازیم:
• زمان ساخت
• فضای ساخت
• زمان جستجو
• فرض بر این است نقاط به صورت پیش فرض بر اساس xمرتب هستند.
زمان ساخت:
ساخت درخت وابستهO(nlogn) :
• یافتن میانهO(1) :
• رابطهی بازگشتی2T(n/2) :
• )T(n)=O(nlogn)+O(1)+2T(n/2
)T(n)=O(nlog2n
میتوان این زمان را بهینه تر کرد!
با فرض مرتب بودن نقاط به طور پیش فرض براساس yداریم:
ساخت درخت وابستهO(n) :
یافتن میانهO(1) :
روابط بازگشتی2T(n/2) :
در نهایت داریمT(n)=O(n)+2T(n/2):
)T(n)=O(nlog n
با استفاده از فرمول اصلی داریم:
لم :6-5یک range treeروی یک مجموعه از nنقطه فضای ) O(nlognنیاز دارد.
اثبات:به تعداد نود های هر سطح درخت اول ‚درخت وابسته داریم.مثال در سطح اول یک نود وجود دارد
و یک درخت وابسته با nنود‚در سطح دوم 2نود با n/2برگ وجود دارد که برای هر کدام درخت
وابسته با n/2برگ وجود داردو....پس میتوان رابطه ی زیر را نوشت:
)O(n)+2O(n/2)+4O(n/4)+…+nO(1
عبارت باال به )O(nتعلق دارد.تعداد سطوح درخت اولیه nlognو هر سطح )O(nفضا نیاز دارد.پس
فضای ذخیره سازیO(nlogn):
الگوریتم جستجو برای Range Treeدوبعدی:
-1این الگوریتم در ابتدا در زمان )( O(lognبرای هر گره میانی) زیرمجموعهی کانونی را انتخاب می کند
که همهی آنها با هم شامل نقاطی هستند که مؤلفهی xآنها در بازهی ]’ [x,xقرار دارد(.که میتواند
توسط یک جستجوی یک بعدی انجام شود).
-2نقاطی از مجموعهی فوق مد نظر است که مؤلفهی yآنها نیز در بازهی ]’ [y,yقرار داشته باشند(.این
کار نیز توسط یک الگوریتم جستجوی یک بعدی قابل انجام است ،که در این الگوریتم همان ساختارهای
وابسته که قبال در مجموعهی کانونی ذخیره شده اند بکار می رود).
این الگوریتم یعنی 2-DRANGEQUERYشبیه همان الگوریتم 1-DRANGEQUERYاست که
تفاوت این دو در فراخوانی REPORTSUBTREEاست ،که در این جا به جای آن از 1-
DRANGEQUERYاستفاده میشود.
Algorithm 2DRANGEQUERY(T.[x:x’]×[y:y’] (
Input. A 2-dimensional range tree T and a range [x:x’]×[y:y’].
Output. All points in T that lie in the range.
1. vsplit ← FINDSLPITNODE(T,x,x’(
2. If vsplit is a leaf
3. then check if the point stored at vsplit must be reported.
4. else (*follow the path to x and call 1DRANGEQUERY on
the subtrees right of the path.*)
5. v ←lc(vsplit )
6. While v is not a leaf
7. do if x ≤ xv
8. then 1DRANGEQUERY(Tassoc)rc)v((, [y:y’](
9. v ←lc(v)
10. else v ←rc(v)
11. Check if the point stored at v must be reported.
12. Similarly, follow the path from rc(vsplit ( to x’, call
1DRANGEQUERY with the range [y:y’] on the associated
structures of subtrees left of the path, and check if the point
stored at the leaf where the path ends must be reported.
15
لم :5-7
نشان دهید یک جستجوی مستطیلی موازی محور xها و yها در یک Range Treeکه nنقطه ذخیره کرده است زمان
) O((log n)² + kنیاز دارد که kتعداد نقاط گزارش شده است.
• اثبات:
دردرخت اصلی vدر مسیر چپ و راست کال برای این که تصمیم بگیریم آیا به فراخوانی 1-DRANGEQUERYنیاز
است یا نه به زمان ) O(lognنیاز است.
اگر تمام گرههای میانی واقع شده در مسیر]’ [x,xکه طول lognدارند را بخواهیم ،باید الگوریتم
DRANGEQUERYرا فراخوانی کنیم که طبق لم 5-2از مرتبهی
)O(Kv + log |Tassoc(v)|)=O(Kv + log nv
است.
Kvتعداد نقاط گزارش شده است.
اگر vرا تعداد نقاطی که به ازای آنها الگوریتم فراخوانی می شود در نظر بگیریم زمان کل مصرف شده
برای الگوریتم برابر است با:
و داریم:
که اگر Kرا تعداد تمام نقاط گزارش شده در نظر بگیریم ،جمع اول در این رابطه برابر است با:
و چون الگوریتم 1-DRANGEQUERYحداکثر log nبار انجام میشود ،داریم:
و می دانیم :
nv<=n
قضیه :5-8
فرض کنید pیک مجموعه از nنقطه در صفحه باشد که یک Range Treeبرای ذخیره
سازی این pنقطه به زمان ) O(n lognو برای ساخت هم به زمان ) O(n lognنیاز دارد.جستجو بر روی
Range Treeمیتواند نقاطی از مجموعهی pرا که در مستطیلی موازی محور xها و yها است را در
زمان ) O(logn2+kمیدهد K .تعداد نقاط گزارش شده است.
Higher_Dimensional Range Tree:
برای ساختن Range Treeهایی در ابعاد باالتر باید
چندین سطح از درختهای وابسته داشته باشیم.هر درخت
توسط اشاره گرهایی از درخت سطح قبل ،قابل دسترسی
است.
ساخت درختهایی در ابعاد باالتر:
بعدی
(فرض کنید pمجموعه نقطههایی در فضای ُ d
باشد).
ساختن یک درخت جستجوی دودویی متعادل براساس
مؤلفهی اول
در هر راس
vدر درخت سطح اول زیرمجموعهی کانونی
)p(vمجموعه نقاطی است که در برگهای زیردرخت با ریشه
درخت به صورت بازگشتی ساخته میشود.
توقف بازگشت لحظهای است که به یک درخت با عمق 1برسیم.
General Sets Of Point:
تا کنون فرض بر این بود که در مجموعهی pهیچ دو نقطهای
دارای مؤلفهی xیکسان و yیکسان نیستند.
راه حل:
استفاده از اعداد ترکیبی قاموسی بجای اعداد
Composite Number Space:
حقیقی
نمایش اعداد ترکیبی که از هر دو عدد عدد a,bساخته
میشود به فرم زیر است:
)(a,b) → (a | b
حال یک رابطه کلی روی فضای ترکیبی توسط ترتیب قاموسی
) (a | bو )’ (a’ | bداریم:
تعریف میکنیم .پس برای دو عدد
)’(a | b) < (a’ | b’) ⇔ a<a’ or (a=a’ & b<b
نمایش هر نقطه در مجموعه pبصورت ) p = (px , pyاکنون
بصورت:
در این روش
میآید.
مجموعهی جدید ’ pاز nنقطه به وجود
هدف گزارش نقاطی از مجموعهی pاست که در ناحیهی
RهستندR=[x,x’]*[y,y’] .
ساختن درخت برروی ’p
انتقال Rبه فضای ترکیبی جدید ’R
] )∞R=[x:x’]×[y:y’] → R’ = [ (x | -∞) : (x’ | +∞) ] × [ (y | -∞) : (y’|+
درستی روش با لم زیر اثبات میشود.
لم :5-10
فرض کنید pیک نقطه باشد و Rectangular Rangeباشد.
آنگاه:
’p ∈ R ⇔ p’ ∈ R
فرض کنید pدر ناحیهی Rقرار دارد ،طبق تعریف pدر Rقرار دارد اگر وتنهااگر
’ x ≤ px ≤ xو ’y ≤ py ≤ y
وبه راحتی میتوان نشان داد حالت فوق برقرار است اگر و تنها اگر:
)∞(x | -∞) ≤ (px | py ) ≤ (x’ | +و )∞(y | -∞) ≤ (py | px ) ≤ (y’ | +