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’ | +