ساختمان داده ها جداول درهم سازی

Slides:



Advertisements
Similar presentations
Awe sim.
Advertisements

معاونت درمان امور مامایی اردیبهشت 90. برای ثبت اطلاعات در برنامه نرم افزاری نظام مراقبت مرگ پریناتال ابتدا لازم است برنامه نرم افزار info-path وپرنیان.
الگوریتم ژنتیکی. تعریف  الگوریتم ژنتیکی، رویه ای تکراری است که راه حل های انتخابیش را بصورت رشته ای از ژنها که کروموزوم نامیده می شوند، بازنمایی می کند.
Decision Tree.
فایل پردازی در C File based Programming in C. انواع فایل متنی –سرعت بالا –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها دودویی (باینری) –امکان باز.
پیدا کردن شواهد علمی. منابع بررسي متون  كتاب ها  گزارش ها  مجله هاي علمي peer reviewed  ايندكس مديكوس  داده هاي الكترونيكي  بانك هاي الكترونيكي.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 14 Structures.
COMP519: Web Programming Autumn 2007 Perl Tutorial: The very beginning A basic Perl Program The first line Comments and statements Simple printing Running.
Database Laboratory: Session #4 Akram Shokri. DB-Lab 2 Lab Activity You must already created all tables You have to have inserted proper data in tables.
موضوع: دبير مربوطه: آموزشگاه : اجرا : عبارتهای جبری خانم مقصودی
مظفر بگ محمدی دانشگاه ایلام Generics. کدهای عمومی 2 یکی از اهداف OOP ایجاد قابلیت نوشتن برنامه های عمومی با قابلیت استفاده ی مجدد است. کدهای چندریخت تا.
ساختمان داده‌ها پیمایش گراف. مرور °مشکل: چگونه تمام نودهای گراف را مشاهده کنیم؟ °جستجوی اول عمق دنبال کردن مسیرهای بین راسها. °جستجوی اول سطح دیدن تمام.
Arrangements of Lines C omputational Geometry By Samaneh shafi naderi
CS Constraint Satisfaction Constraint Satisfaction Problems Chapter 5 Section 1 – 3 Modified by Vali Derhami.
آشنايي با سيستم اعداد.
به نام خدا.
[c.
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
ویژگی های DHCP جلوگیری از Conflict سرعت بخشیدن به کارها مدیریت متمرکز
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
SY800 router mode [AD-14-TB ].
ساختمان داده‌ها الگوریتمهای کوتاهترین مسیر
دانشگاه صنعتی امیرکبیر Instructor : Saeed Shiry & Mitchell Ch. 2
آزمایشگاه پایگاه داده ها قیود در جداول یک پایگاه داده در SQL Server
Odd-even merge sort مرتب سازی.
چگونه بفهمیم آیا ژورنالی ISI است؟ ایمپکت فاکتور دارد یا خیر؟
دانشگاه علوم پزشکی شهید بهشتی
مظفر بگ محمدی دانشگاه ایلام
فصل دوم جبر بول.
Route configuration for 5400W ADSL Router
حافظه ی نهان دانشگاه ایلام.
بررسی قطبش در لیزر های کاواک عمودی گسیل سطحی(vcsel)
آشنایی با پایگاه داده mysql
آموزش کرک کردن نرم افزار ACTIVE HDL
Tree Sort.
مدارهای منطقی فصل سوم - خصوصیات توابع سويیچی
ساختمان داده‌ها پیمایش درخت دودویی
درخت جستجوی دودویی درخت جستجوي دودويي: درخت دودويي صفر نود يا بيشتر
سميرا قانوني زهرا معدني
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
Bucket sort اكرم منوچهري زهرا منوچهري
راهنمای استفاده از ابزار Mailings در Ms Word
پشته و صف پیوندی Give qualifications of instructors: DAP
بسم الله الرحمن الرحیم هرس درخت تصمیم Dr.vahidipour Zahra bayat
با تشکر از جناب آقای مهندس بگ محمدی
جستجوی منابع الکترونیک
به نام خدا Koha برنامه.
IN THE NAME OF GOD MATH SABA KARBALAEI
سمینار SharePoint رانندگی در بزرگراه پرتال ها
Angular Kinetics مهدی روحی بهار 85.
فصل ششم مدارهای ترتیبی.
ساختمان داده‌ها درختان و درختان دودویی
دکتر مظفر بگ محمدی دانشگاه ایلام
مدار منطقي مظفر بگ محمدي
مدار منطقي مظفر بگ محمدي
مظفر بگ محمدی دانشگاه ایلام
Uniprocessor Scheduling
توزیع میانگین نمونه سعید موسوی.
مراحل پیش رو : 1- الگوریتم عقبگرد برای مسئله کوله پشتی صفر و یک
نسبت جرم فرمولی ”جرم اتمی و فرمول تجربی
برنامه ریزی خطی پیشرفته (21715( Advanced Linear Programming Lecture 7
kbkjlj/m/lkiubljj'pl;
ساختمان داده ها مرتب سازی درجی
پشته و صف پیوندی Give qualifications of instructors: DAP
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
ساختمان داده ها گرافها.
مظفربگ محمدی TCP – III قابلیت اطمینان و مباحث پیاده سازی
Presentation transcript:

ساختمان داده ها جداول درهم سازی ساختمان داده ها جداول درهم سازی Give qualifications of instructors: DAP teaching computer architecture at Berkeley since 1977 Co-athor of textbook used in class Best known for being one of pioneers of RISC currently author of article on future of microprocessors in SciAm Sept 1995 RY took 152 as student, TAed 152,instructor in 152 undergrad and grad work at Berkeley joined NextGen to design fact 80x86 microprocessors one of architects of UltraSPARC fastest SPARC mper shipping this Fall

پیاده سازی آن تا حدودی مشکل است. جدول درهم سازی آیا راه بهتری برای ذخیره ی عناصر یک مجموعه وجود دارد؟ تاکنون لیست مرتب و درخت جستجوی دودویی را دیده ایم. جدول درهم سازی: از یک تابع ریاضی به اسم تابع درهم سازی استفاده می کند. در هنگام دسترسی یا ذخیره ی داده ها ممکن است با برخورد مواجه شویم. پیچیدگی پیاده سازی آن تا حدودی مشکل است.

انگیزه ی استفاده از درهم سازی ما مجبوریم که تعدادی رکورد را ذخیره و اعمال زیر را انجام دهیم: اضافه کردن یک رکورد جدید. حذف یک رکورد موجود. جستجوی یک رکورد. دنبال راهی هستیم که این کارها را بهتر انجام دهیم. تا کنون چه راه حلهایی را دیده‌ایم؟

استفاده از یک آرایه ی نامرتب برای ذخیره کردن اطلاعات. اضافه کردن خیلی سریع است. (O(1)) چون که می توانیم رکورد را به عنوان آخرین عنصر ذخیره کنیم. حذف یک عنصر کند است چون باید عنصر را پیدا کنیم. O(n) جستجو: جستجوی ترتیبی کند است. O(n)

هنگام اضافه کردن عناصر ترتیب آنها را به هم نمی‌زنیم. آرایه ی مرتب هنگام اضافه کردن عناصر ترتیب آنها را به هم نمی‌زنیم. الحاق کند است چون باید جای عنصر پیدا کنیم. O(n) حذف بعد از حذف یک جای خالی باقی می ماند که باید با جابجایی حل شود. لذا کند است. O(n) جستجو جستجوی دودویی سریع است. O(logn)

عناصر را در یک لیست پیوندی ذخیره می کنیم. لیست پیوندی نامرتب عناصر را در یک لیست پیوندی ذخیره می کنیم. الحاق سریع است. می توانیم داده را هر جا که خواستیم اضافه کنیم. O(1) حذف حذف خود عنصر سریع است اما پیدا کردن آن کند است. O(n) جستجو چون جستجو ترتیبی است کند است. O(n)

عناصر را در یک لیست پیوندی مرتب ذخیره می کنیم. عناصر را در یک لیست پیوندی مرتب ذخیره می کنیم. الحاق کند است. باید جای نود را پیدا کنیم. O(n) حذف حذف خود عنصر سریع است اما پیدا کردن آن کند است. O(n) جستجو چون جستجو ترتیبی است کند است. O(n)

عناصر را در یک درخت جستجوی دودویی ذخیره می کنیم. عناصر را در یک درخت جستجوی دودویی ذخیره می کنیم. الحاق سریع است. با ارتفاع درخت متناسب است. O(logn) حذف جستجو

استفاده از آرایه به عنوان جدول 9903030 9802020 9801010 0056789 0012345 0033333 tom mary peter david andy betty 73 100 20 56.8 81.5 90 ID NAME SCORE 9908080 bill 49 ... می خواهیم اطلاعات ۱۰۰۰ دانشجو را ذخیره کنیم و آنها را با شماره ی دانشجویی ذخیره کنیم.

استفاده از آرایه به عنوان جدول : betty andy 90 81.5 ID NAME SCORE david 56.8 bill 49 برای هر ID یک خانه از آرایه را در نظر می گیریم. لذا یک آرایه ی خیلی بزرگ خواهیم داشت. از شماره ی دانشجویی به عنوان ایندکس آرایه استفاده می‌کنیم. مثلاً اطلاعات دانشجوی شماره ی 0012345 در A[12345] ذخیره شده است. 33333 12345 56789 9908080 9999999

استفاده از آرایه به عنوان جدول رکوردها را در یک آرایه ی بزرگ ذخیره کنید و از ایندکس به عنوان کلید استفاده کنید. الحاق خیلی سریع است. O(1) حذف خیلی سریع است. O(1) جستجو خیلی سریع است. O(1) اما اتلاف حافظه خیلی زیاد است. باید راهی پیدا کنیم که از حافظه بهتر استفاده کنیم.

استفاده از یک تابع برای پیدا کردن کلید int Hash(key) یک عدد طبیعی بر می گرداند. فرض کنید یک تابع جادویی داریم که هر کدام از ۱۰۰۰ شماره ی دانشجویی موجود را به یکی از اعداد ۰ تا ۹۹۹ نگاشت می کند و هیچ دو کلید مجزایی به یک عدد نگاشت نمی شوند. H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764 … H(‘9908080’) = 3

هنگام جستجو نیز به محلی که Hash(target ID) نشان می دهد مراجعه می کنیم. جدول درهم سازی : betty bill 90 49 ID NAME SCORE andy 81.5 david 56.8 0033333 9908080 0012345 0056789 3 67 764 999 134 اگر بخواهیم یک رکورد را ذخیره کنیم، ابتدا Hash(ID) را پیدا می کنیم و آنرا در این محل ذخیره می کنیم. هنگام جستجو نیز به محلی که Hash(target ID) نشان می دهد مراجعه می کنیم.

جدول درهم سازی در صورت وجود تابع درهم ساز کامل تابع جادویی قبلی را تابع درهم ساز کامل می نامیم. الحاق خیلی سریع است. O(1) حذف خیلی سریع است. O(1) جستجو خیلی سریع است. O(1) اما مشکل اینجاست که پیدا کردن یک تابع درهم ساز کامل معمولاً مشکل است. به خصوص وقتی که فضای کلیدهای ممکن خیلی بزرگ باشد.

تابع درهم ساز تابع درهم ساز ما را از فضای کلیدهای ممکن به فضای ایندکس های موجود می برد. باید ساده باشد و محاسبه ی آن سریع انجام شود. کلیدها را به صورت متوازن توزیع کند و تا حد امکان از برخورد اجتناب کند.

برخورد در اکثر موارد نمی توان از برخورد کاملاً اجتناب کرد. اگر دو کلید متفاوت به یک ایندکس مشابه نگاشت شوند، چکار کنیم؟ H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764 … H(‘9903030’) = 3 H(‘9908080’) = 3

درهم سازی و استفاده از لیست پیوندی 2 4 1 3 null 5 : HASHMAX Key: 9903030 name: tom score: 73 یکی از راههای حل برخورد ذخیره ایندکسهایی که برخورد کرده اند در یک لیست پیوندی است. حال آرایه دارای یک اشاره گر به این لیست است. اگر در آن محل نودی موجود نباشد آرایه به null اشاره می کند.

جدول درهم سازی زنجیره ای از تابع درهم ساز استفاده می کنیم. اگر برخورد پیش بیاید با لیست پیوندی مشکل را حل می کنیم. اگر تابع درهم سازی خوب باشد، تعداد برخوردها کم خواهد بود و تمام اعمال الحاق، حذف و جستجو با O(1) انجام خواهند شد. در غیر این صورت: بعضی از کلیدها یک لیست طولانی خواهند داشت. الحاق کماکان O(1) است چون می توانیم به ابتدای لیست اضاف کنیم. حذف و جستجو کند خواهند بود و احتمال دارد با O(n) انجام شوند.

درهم سازی با استفاده از آرایه جستجوی خطی اگر هنگام الحاق برخورد پیش بیاید آنرا در خانه ی خالی بعدی آرایه ذخیره می کنیم. در هنگام جستجو ابتدا محل کلید را پیدا می کنیم، سپس آنقدر جستجو را ادامه می دهیم تا نود را پیدا کنیم یا به خانه ی خالی بعدی برسیم.

خلاصه کدهای جستجوی دودویی و درهم سازی را پیاده کنید. BST در صنعت استفاده زیادی دارد. درهم سازی اجازه می دهد در حالتی که فضای کلید بزرگ و تعداد آنها کم است سریعاً به نود دسترسی داشته باشیم. در پایگاههای داده و به خصوص وقتی که تعداد جستجوها زیاد باشد کاربرد زیادی دارد. پیدا کردن یک تابع درهم ساز خوب مشکل است و هدف ما کاهش تعداد برخوردها و توزیع یکنواخت آنها است.