لغت نامه و جدول درهم سازي Dictionaries and Hash Tables

Slides:



Advertisements
Similar presentations
Queue theory.
Advertisements

مهدی آذرنوش مبحث ششم : آرایه ها و رشته ها حسابگری الگوریتمی.
در جامعه، افرادي که موقعيت و مسؤليت خود را مي‌دانند از راحتي و امنيت بيشتري برخوردارند هر کلاس از جامعه، مجموعه‌اي از امکانات و تواناييهاي مجاز برخوردار.
سازگاري فرايندهاي يادگيري Consistency of Learning Processes ارائه دهنده : الهام باوفای حقیقی استاد درس : آقای دکتر شيري دانشگاه امير كبير دانشكده ‌ مهندسي.
دستور العمل نحوه محاسبه امتیاز مقالات ISI اعضای هیأت علمی دانشگاه صنعتی اصفهان بر اساس تعداد استنادات در پايگاه اسكاپوس شهریور ماه 1388 نفیسه دهقان.
1 آزمايشگاه سيستم های هوشمند ( Domain-specific Architecture.
RoboCup Rescue Simulation قسمت سوم به نام خدا دانشکده مهندسی کامپيوتر و فن آوری اطلاعات ارائه درس رباتيکز ارائه دهندگان : اميرعلی صالحی ابری.
روشهاي پارس بهينه. پارس توسط انسان تمام روشهاي پارس که تا کنون مطرح شدند از تکنيکهاي “جستجوي کامل” براي تفسير جمله استفاده مي کردند. به نظر ميرسد که پارس.
مهندسی نرم افزار مبتنی بر عامل
ارائه روشي براي شناسايي کاراکترهاي دستنويس، برپايه شبکه LVQ.
بنام خدا معرفي روشهاي اصلاح شده در بهينه سازي کولوني مورچه ها و پيشنهاد يک local optimization.
ارائه درس روباتيکز Extended Kalman Filter فريد ملازم استاد مربوطه دکتر شيري دانشگاه امير کبير – دانشکده کامپيوتر و فناوري اطلاعات.
روشهاي پارس بهينه ارائه دهنده : دکتر احمد عبدالله زاده تنظيم کننده : پرهام مرادي پائيز 85 دانشگاه صنعتي امير کبير دانشکده مهندسي کامپيوتر و فناوري اطلاعات.
طراحي و ساخت سيستم‌هاي تجارت الکترونيک ساخت سيستم‌هاي تجارت الکترونيک ECSE.
نمايش اعداد.
نام و نام خانوادگي : فريد ملازم 1 آزمايشکاه سيستم هاي هوشمند ( موضوع ارائه Process and Deployment Design.
ارائه دهنده: دکتر احمد عبدالله زاده تنظيم کننده:پرهام مرادي
نمايش اعداد.
تعميم در يادگيري مبتني بر نمونه ها
Artificial Intelligent Systems Laboratory 1 الگو‌هاي فرايند (Process Patterns) فصل 2 درس مهندسي نرم‌افزار 2 دكتر احمد عبداله زاده بارفروش تهيه كننده :
In the name of God Sharif University of Technology, International Branch, Kish Island Dr. Mohsen Sadighi Moshkenani Chapter 12.
نمايش اعداد علی عادلی.  مبنا ( base ): –مبناي r: ارقام محدود به [0, r-1]  دسيمال:(379) 10  باينري:( ) 2  اکتال:(372) 8  هگزادسيمال:(23D9F)
 Hassan jamali In the name of God Grade: three CD شامل : مكالمه لغات جديد درس نقاط گرامري و تمرين است.
Solving problems by searching Chapter 3 Modified by Vali Derhami.
اسامي شناسه ها (Identifier names) اسامي متغيرها ، توابع ، برچسب ها (labels) وبقيه اشياء تعريف شده توسط كاربر در C ، شناسه ( identifier ) ناميده مي شود.
1 فصل دوم تبديلات. 2 فصل دوم سرفصل مطالب مقدمه ضرب بردارها دستگاه ‌ هاي مختصات دوران ‌ ها مختصات همگن دوران ‌ ها و انتقال ‌ ها تبديلات تركيبي همگن تبديل.
شرط و تصميم اصول كامپيوتر 1. 2 الگوريتم اقليدس E1: [find remainder] Divide m by n and let r be the remainder. Clearly, 0
1/19 Informed search algorithms Chapter 4 Modified by Vali Derhami.
1/27 Informed search algorithms Chapter 4 Modified by Vali Derhami.
Department of Computer Eng. & IT Amirkabir University of Technology (Tehran Polytechnic) Data Structures Lecturer: Abbas Sarraf Order.
سيستم خبره مرکب ( ترکيب پيشرو و پسرو ) زماني که يک فرضيه احتمالي براي جواب داشته باشيم، روش backward مي تواند خيلي کاراتر و مناسبتر باشد. اگر هيچ احتمال.
پشته Stack ساختمان داده ها و الگوريتمها. 2 آشنايي مجموعه پويا (Dynamic Set ): مجموعه اي است كه تركيب و تعداد عناصر آن ممكن است در طول زمان اجراي برنامه.
1 فصل سوم سينماتيك مستقيم. 2 محتواي فصل   تعريف مجموعه فازي   تابع عضويت   نمايش مجموعه هاي فازي   برش آلفا   متغيرهاي زباني   ساخت مجموعه.
به نام خدا.
Cost- Effectiveness Analysis
ساختمان داده ها و الگوريتمها
ساختمان داده ها و الگوريتم ها
مرتب سازي مقايسه اي مرتب سازي خطي
آرايه ها و ساختارها.
آرايه ها.
ANOVA: Analysis Of Variance
ليست هاي پيوندي.
فصل سوم : صف وپشته اهداف آشنايي با پشته آشنايي با صف ارزشيابي عبارات 1.
ANOVA: Analysis Of Variance
روش حریصانه در طراحی الگوریتم
وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد
Quick Sort مرتب سازي سريع.
دستورات کنترل و تکرار- 2 اصول كامپيوتر 1.
بسم الله الرحمن الرحيم.
آشنايي با برنامه نويسي به زبان C++
معرفي درس ساختمان داده ها و الگوريتمها
تبدیل فوریه (Fourier Transform)
نمايش اعداد در کامپيوتر چهار عمل اصلي
(Structured Query Language)
درخت جستجوی دودویی درخت جستجوي دودويي: درخت دودويي صفر نود يا بيشتر
سميرا قانوني زهرا معدني
گزگز و خواب رفتگي انگشتان دست
سيستمهاي اطلاعات مديريت
مدلسازي تجربي – تخمين پارامتر
هیدرولیک جریان در کانالهای باز
فيلتر كالمن معرفي : فيلتر كالمن تخمين بهينه حالت‌ها است كه براي سيستم‌هاي ديناميكي با اختلال تصادفي در سال 1960 بزاي سيستم‌هاي گسسته و در سال 1961 براي.
آشنايي با درخت هاي تصميم گيري
با تشکر از دکتر جواد سلیمی
مدلسازي تجربي – تخمين پارامتر
مثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد
در اين درس مباني ساختمان داده ها و الگوريتم ها تدریس میشود.
Petri Nets: Properties, Analysis and Application
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
تخمين پارامترها - ادامه
Presentation transcript:

لغت نامه و جدول درهم سازي Dictionaries and Hash Tables ساختمان داده ها و الگوريتم

لغت نامه - Dictionary مجموعه اي از زوج هاي مرتب به صورت: (key, element) کليد زوج هاي مرتب متفاوت است عمليات روي لغت نامه: get(theKey) put(theKey, theElement) remove(theKey) A linear list is an ordered sequence of elements. A dictionary is just a collection of pairs. Interface Dictionary has these 3 methods. Note that Java has an abstract class Dictionary that has these three methods plus isEmpty and some others.

کاربرد Application مجموعه دانشجويان اين کلاس (key, element) = (student name, linear list of assignment and exam scores) همه کليدها منحصر بفرد هستند مثال: پيدا کردن زوج مرتبي که کليد آن ”علي تقي زاده“ باشد بروز رساني رکوردي که کليد آن ”ايمان معتمدي“ است بروز رساني معادل حذف رکورد فعلي و سپس اضافه کردن رکورد با تغييرات جديد است Update(x) R = get(x) ; // get the record with key X remove(x) ; Modify R Put(x , R)

کليدهاي تکراري در لغت نامه لغت نامه ممکن است کليد تکراري داشته باشد همانند کلمات تکراري يک لغت نامه روان : روح، جان روان: رونده ، جاري روان: اسم خاص (اسم شهر) روان: اسم خاص (اسم شخص) مي توان ركوردهاي هم كليد را با يك ليست نشان داد

نمايش لغت نامه با يک ليست خطي L = (e0, e1, e2, e3, …, en-1) Each ei is a pair (key, element). 5-pair dictionary D = (a, b, c, d, e). a = (aKey, aElement), b = (bKey, bElement), etc. مي توان از آرايه يا ليست پيوندي استفاده کرد Even though a dictionary is not an ordered sequence, it may be represented as a linear list.

put(theKey, theElement) نمايش با آرايه a b c d e get(theKey) O(size) time put(theKey, theElement) O(size) براي تشخيص دادن کليد تکراري و , O(1) براي افزودن کليد به سمت راست آرايه. remove(theKey) O(size) time.

آرايه مرتب اعضا بر اساس کليد به صورت صعودي مرتب شده اند get(theKey) A B C D E اعضا بر اساس کليد به صورت صعودي مرتب شده اند get(theKey) O(log size) time put(theKey, theElement) O(log size) براي يافتن کليد تکراري, O(size) براي افزودن کليد در محل مناسب remove(theKey) O(size) time. O(log (size)) for get() results from the use of a binary search.

put(theKey, theElement) زنجيره نامرتب a b c d e null firstNode get(theKey) O(size) time put(theKey, theElement) O(size) براي تشخيص دادن کليد تکراري و , O(1) براي افزودن کليد به سمت راست آرايه. remove(theKey) O(size) time.

اعضا بر اساس کليد به صورت صعودي مرتب شده اند. زنجيره مرتب A B C D E null firstNode اعضا بر اساس کليد به صورت صعودي مرتب شده اند. get(theKey) O(size) time put(theKey, theElement) O(size) براي تشخيص دادن کليد تکراري و , O(1) براي افزودن کليد به سمت راست آرايه. Binary search cannot be done in O(log size) time on a chain, because it takes O(size) time to locate the middle node. Worst-case performance of a sorted chain is no better than that of an unsorted chain.

اعضا بر اساس کليد به صورت صعودي مرتب شده اند زنجيره مرتب A B C D E null firstNode اعضا بر اساس کليد به صورت صعودي مرتب شده اند remove(theKey) O(size) time. چگونه مي توان در ليست هاي پيوندي هم جستجوي لگاريتمي انجام داد ؟

لغت نامه ساختاري براي نگهداري رکوردهاي اطلاعاتي است بحث و بررسي لغت نامه ساختاري براي نگهداري رکوردهاي اطلاعاتي است در اغلب برنامه ها مانند كامپايلرها و پردازش متن كاربرد زيادي دارد بنابراين هزينه عمليات اين ساختار داده بايد تا حد ممكن كم شود زمان اجراي عمليات حذف ، اضافه كردن و جستجوي لغت نامه از خطي يا لگاريتمي است پياده سازي هاي مختلف برخي عمليات را با هزينه كمتري نسبت به ديگر پياده سازي ها انجام مي دهند هزينه افزودن به آرايه نامرتب O(1)‌ است اما همين هزينه براي ليست مرتب O(Size) است ؟ ايده ال ما اين است كه هزينه عمليات مختلف حذف روي لغت نامه ها را به O(1) ‌ كاهش دهيم .

Symbol Table برنامه نويسان مي توانند طبق قواعد زبان، متغيرها را به دلخواه نامگذاري کنند کامپايلر براي اختصاص حافظه و مديريت متغيرها، آنها را در جدولي به نام Symbol Table نگهداري مي کند اين جدول نمونه اي از ساختار داده Dictionary است. دسترسي به اين جدول از مرتبه Θ(N) است. براي دسترسي Θ(1) لازم است آرايه هاي خيلي بزرگ تعريف کنيم اعداد صحيح: 65536 رشته ها: بيشتر از اين مقدار

كامپايلر از اين جدول براي نگهداري و مديريت Symbol Table كامپايلر از اين جدول براي نگهداري و مديريت متغيرها و علايم تعريف شده در برنامه ها استفاده مي كند هر Symbol Table شامل مجموعه اي از ركوردها مثل x است Symbol Table ADT Class SymbolTable{ Records[1..N] //Operations: Insert(X:Record) Delete(X:Record) Search(K:key) } Key[X] Record X data fields

Hashing Hashing روشي براي دسترسي به اعضاي آرايه هايي مثل Symbol Table است که از مرتبه Θ(1) است Variable Name (String) Index Generator (Hash Function) K (Integer) 6 200 5 500 4 54 3 130 2 85 1 250 100 Offset Index تابع Hashing تابعي معين (Deterministic) است!

فرض كنيد كليد ركوردها اعدادي در بازه 0..m-1 باشند دسترسي مستقيم فرض كنيد كليد ركوردها اعدادي در بازه 0..m-1 باشند آرايه اي m عضويT[0..m-1] را مي توان ساخت: T[k] = x if key(x)=k T[k] = nil otherwise Complexity: Θ(1) مساله: اگر دامنه كليدها بزرگ باشد ...؟ مثلا اعداد صحيح !

راه حل تعريف تابع Hash كه مجموعه كليدها را به مجموعه انديسها ترجمه مي كند: مساله جديد: اگر دو كليد به يك مكان ترجمه شوند؛ برخورد اتفاق مي افتدCollision

حل برخورد با ليست پيوندي بدترين حالت همه كليدها به يك محل نگاشت شوند: دسترسي: Θ(n)

اگر n كليد داشته باشيم و آرايه m عضوي باشد و تابع نگاشت يكنواخت باشد: جستجوي يك ركورد اگر n كليد داشته باشيم و آرايه m عضوي باشد و تابع نگاشت يكنواخت باشد: a = n /m = load factor  كليد به ازاي هر خانه آرايه Θ(1 + a ) : هزينه جستجوي ناموفق! Θ(1) : يافتن محل كليد Θ(a) : يافتن ركورد در ليست if a = O(1)  Θ(1) = هزينه جستجوي ناموفق هزينه جستجوي موفق هم در نهايت، همين اندازه است: Θ(1+a)

انتخاب تابع Hash نگاشت يكنواخت كليدها به خانه هاي آرايه عدم حساسيت به تركيب خاص ركوردهاي ورودي quicksort را به خاطر بياوريد! روش تقسيم:h(k) = k mod m نگاشت كليدهاي k به 0..m-1 نگاشت يكنواخت 1..k اگر m=2r باشد، تابع Hash ، به r بيت كم ارزش بستگي دارد!

m را طوري انتخاب كنيد كه عددي اول باشد انتخاب تابع Hash m را طوري انتخاب كنيد كه عددي اول باشد m را عددي نزديك تواني از 2 يا 10 انتخاب نكنيد! گرچه الگوريتمهاي تقسيم و حل با آرايه هايي كه طول آنها عدد اول باشد خوب كار نمي كنند؛ در اينجا چنين انتخابي لازم است روش ضرب h(k) = ⌊ m (kA - ⌊kA⌋) ⌋ . , 0 < A < 1 پياده سازي سريع روش ضرب با استفاده از عملگرهاي شيفت، اين تابع پياده سازي سريعي دارد

پياده سازي روش ضرب عملگرهاي شيفت بيت 11101101 >> 1 = 01110110  shr(x,n) == x /2n 11101101 << 1 = 11011010 shl(x,n) == x * 2n

پياده سازي روش ضرب اگر اعداد صحيح مورد استفاده در کامپيوتر w‌ بيتي و m =2p باشد. و k يك عدد W بيتي و عدد اعشاري A به شكل A =S/2W باشد كه در آن S‌ يك عدد W‌بيتي است به زبان ساده ، A‌عددي به فرم 1/2, 3/4, 1/8, 7/16,… باشد [KA] =[KS/2W] = [KS >> W ] f= KA – [KA] = (KS >> w) – [KS >> w] = fractional wbits e.g. 0.1110101 f * m = f * 2p = f << p  select p bits

حل برخورد با آدرس دهي باز آدرس دهي باز: به جاي استفاده از ليست پيوندي، از خود آرايه براي نگهداري رکوردهاي برخوردي استفاده مي شود براي افزودن رکوردي جديد؛ ابتدا محلي خالي در آرايه پيدا مي شود و رکورد جديد در اين محل جاي مي گيرد تابع افزودن رکورد جديد ، علاوه بر کليد يک پارامتر ديگر به نام Probe Number هم دارد h: U * { 0 , 1 , …, m -1}  {0, 1, … , m-1} مجموعه {h(k,0), h(k,1) , …, h(k,m-1)} بايد ترکيبي از مجموعه {0..m-1} ‌باشد به زبان رياضي: تابع Hash روي مجموعه {0..M-1} بسته باشد

مثال Open Addressing

مثال Open Addressing

مثال Open Addressing

جستجو با Open Addressing عمل جستجو از همين روش تابع افزودن، براي پيدا کردن رکورد مورد نظر استفاده مي کند

Linear : h(k ,i ) = (h’(k) + i ) mod m روشهاي Probing Linear : h(k ,i ) = (h’(k) + i ) mod m Primary Clustering Problem افزايش زمان متوسط جستجوي رکوردها m distinct probe seq. Quadratic:h(k,i)= (hi(k) + c1 i + c2 i2) mod m Secondary Clustering Double Hashing:h(k, i) = (h1(k) + ih2(k)) mod m Semi-Random Behavior m2 distinct probe seq.

آناليز Open Addressing n = Number of records to be stored m = size of hash table (hash array) a = n/m = load factor Expected number of probes = 1 / (1- a) if a = 0.5  E(probes) = 2 if a = 0.9  E(probes) = 10

Perfect Hashing همانند Randomized Quick sort‌تابع hash‌را ازبين مجموعه اي از توابع معين به صورت تصادفي انتخاب کنيد افزايش کارايي متوسط الگوريتم ورودي خاصي از رکوردها در اغلب موارد منجر به بدترين حالت نمي شود

درهم سازي مجدد Re-Hashing Records Hash Double Sized New Hash Function اگر جدول درهم سازي ، پر شود؛ جدول بزرگتري ساخته مي شود. سپس با استفاده از تابع جديد درهم سازي ركوردهاي موجود در حافظه قبلي و همچنين ركوردهاي جديد به اين جدول منتقل مي شوند درهم سازي مجدد عمل هزينه بري است؛ ازهمان ابتدا حافظه بزرگتري استفاده كنيد سعي كنيد هميشه load factor ‌كمتر از 20 درصد باشد

توليد تابع Hashing با روشهاي تكاملي شبكه هاي عصبي تخمين توابع نگاشت فضاهاي برداري توليد تابع Hashing با روشهاي تكاملي Genetic Programming

class StringHashTable{ تمرين يک ADT ‌ براي نگهداري رکوردهايي تعريف کنيد که کليد رکوردها، رشته حرفي باشد؛ چه تابع Hashing ‌پيشنهاد مي کنيد ؟ با استفاده از روش Open addressing ؛ الگوريتمهاي حذف، اضافه و جستجو کردن در جدول رکوردها را بنويسيد. class StringHashTable{ Record T[0..m-1] ; void insertRecord(Record r) ; void deleteRecord(Record r) ; }