logo

כיצד לעצב Hashset ב-Python?

כפי שאנו יודעים כי HashSet הוא מחלקה מפורסמת בג'אווה. HashSet משמש לאחסון הערכים באמצעות טבלת hash. במדריך זה, נסקור את HashSet ב-Python. נלמד גם כיצד אנו יכולים לעצב HashSet ב-Python.

HashSet הוא מבנה נתונים בסיסי בתכנות, שנמצא בדרך כלל בשפות כמו Java. הוא שייך ל-Java Collections Framework ומשמש כיישום של ממשק הסט. המאפיין הייחודי של HashSet הוא היכולת שלו לאחסן אלמנטים באופן המאפשר בדיקה יעילה של קיומם של אלמנטים ספציפיים ומבטיח ייחודיות בתוך הסט. בניגוד למבנים כגון רשימות, HashSet אינו שומר על סדר מסוים בין האלמנטים שלו.

מאפיין מרכזי אחד של HashSet הוא ערובה לייחודיות; הוא אינו מאפשר רכיבים כפולים. לפעולות כמו הוספה, הסרה ובדיקת נוכחות של אלמנטים יש בדרך כלל ביצועים ממוצעים בזמן קבוע, מה שהופך אותו לבחירה יעילה עבור משימות כאלה. עם זאת, חשוב לציין שסדר האלמנטים ב-HashSet אינו מובטח.

מאפיינים מרכזיים:

ייחודיות: HashSet אינו מאפשר רכיבים כפולים. הוא משתמש בשיטת equals() כדי לבדוק כפילויות, ומבטיח שכל רכיב בקבוצה הוא ייחודי.

אין הזמנה: האלמנטים ב-HashSet אינם מאוחסנים בסדר מסוים. אם אתה צריך לשמור על סדר האלמנטים, אתה יכול לשקול להשתמש ב-LinkedHashSet, ששומר על סדר ההכנסה.

מבנה הנתונים הבסיסי: פנימית, HashSet משתמש בטבלת hash לאחסון אלמנטים. זה מאפשר מורכבות ממוצעת בזמן קבוע עבור פעולות בסיסיות כמו הוספה, הסרה ומכילה.

מה זה אורקל

אלמנטים אפסים: HashSet מאפשר רכיב null אחד. אם תנסה להוסיף רכיב null כפול, הוא יחליף את הקיים.

מבוא

אנחנו יכולים לעצב HashSet מבלי להשתמש בכל ספריית טבלת Hash. להלן מספר הפונקציות השונות -

הוסף(x) - שיטת add(x) משמשת בעיקר להכנסת ערך x לתוך ה-HashSet.

מכיל (x) - השיטה contains(x) משמשת בעיקר כדי לבדוק אם קיים ערך x ב-HashSet או לא.

הסר(x) - שיטת remove(x) משמשת בעיקר למחיקת x מה-HashSet. אם ל-HashSet אין שום ערך, הוא לא יעשה כלום.

בואו נבין את השיטות הללו על ידי הדוגמה שלהלן.

מחרוזת ב-int

ראשית, אתחל את ה-HashSet והתקשר לפונקציה add(1). זה יוסיף 1 לערכת הגיבוב. קרא add(3), שיוסיף 3, ואז call contains(1). זה יבדוק אם 1 קיים או לא בערכת הגיבוב. כעת אנו קוראים מכיל(2), הוסף(2), מכיל(2), הסר(2), מכיל(2).

הפלט יוחזר כ-true עבור 1 קיים, false עבור 2 אינו קיים, נכון עבור 2 קיים, false עבור 2 אינו קיים, בהתאמה.

פעולות בסיסיות של HashSet ב-Python

אנו יכולים לבצע כמה פעולות בסיסיות ב-HashSet באמצעות השיטות הבאות. בואו נבין את השיטות הללו.

הוספת ערכים חדשים ב-HashSet

בדוגמה למטה, נוסיף את הערך בערכת ה-hash באמצעות הפונקציה add() . הפונקציה add() מוסיפה את הערך אחד בכל פעם. בוא נראה את הקוד הבא.

דוגמא -

 from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) 

תְפוּקָה:

mysql הכנס לתוך
 Adding value: 2 Adding value: 7 Adding value: 6 

הסרת ערכים ב-HashSet

אנו יכולים להסיר את הערך הקיים באמצעות הפונקציה remove() . בואו נבין את הקוד הבא.

דוגמא -

 from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.remove(7) obj.remove(6) 

תְפוּקָה:

 Adding value: 2 Adding value: 7 Adding value: 6 Removed value: 7 Removed value: 6 

בודק אם קיימים ערכים ב-HashSet

בדוגמה זו, נדגים כיצד אנו יכולים לבדוק אם קיים ערך מסוים או אינו משתמש ב- מכיל() פוּנקצִיָה. בואו נבין את הקוד הבא.

דוגמא -

 from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.contains(2) 

תְפוּקָה:

ההבדל בין קרח לשלג
 Adding value: 2 Adding value: 7 Adding value: 6 It contains: 2 

אלגוריתם עבור ה-HashSet ב-Python

בשלב הראשון, אנו מגדירים מבנה נתונים אחד בשם HashList. לאחר מכן, אנו מאתחלים רשימה ריקה כ רשימה חדשה . לאחר מכן, אנו מגדירים פונקציה update() שבה found יאחסן ערך בוליאני False. כעת, אנו משתמשים עבור לולאה עבור כל אינדקס I ו-K. אם המפתח זהה ל-'k', אז new_list[i]=ק והערך נמצא כ-True. הערך יוכנס בסוף הרשימה אם לא נמצא ערך.

השלב הבא הוא להגדיר את הפונקציה get() שבה נשתמש עבור הלולאה, ואם הערך של k זהה למפתח, הפלט יהיה True; אחרת, שקר. אם המפתח זהה ל-'k', מחק את הערך מהרשימה רשימה חדשה. אותו תהליך יוחל בפונקציה remove() .

כעת, ניצור את ה-HashSet של הכיתה הראשית. מחלקה זו תכריז על פונקציית האתחול כאשר ערך key_space = 2096. ל-hash_table תהיה רשימה של אובייקטים מסוג new_list בגודל key_space . לאחר מכן, ניצור פונקציית add() שבה hash_key = key%key_space ועדכן את המפתח של hash_table[hash_key]. לאחר מכן, נתקשר ל- להסיר פונקציה , שבו hash_key = key % key_space, ומחק את המפתח של hash_table[hash_key]. לאחר מכן, נתקשר ל- מכיל פונקציה , שבה

hash_key = מפתח % key_space, וקבל את המפתח של hash_table[hash_key].

מה זה מאבן

בואו נראה את אלגוריתם היישום השלב.

אלגוריתם -

  • צור מבנה נתונים בשם HashSet, אתחל אותו כמו למטה
  • new_list = []
  • הגדר עדכון פונקציה(). זה ייקח מפתח
  • נמצא := שקר
  • עבור כל אינדקס i ומפתח k ב-new_list, בצע
    • אם המפתח זהה ל-k, אז
      • new_list[i]:= מפתח
      • נמצא:= נכון
      • לצאת מהלולאה
    • אם נמצא שקר, אז
      • הכנס מפתח בסוף new_list
  • הגדר פונקציה get() . זה ייקח מפתח
    • עבור כל k ב-new_list, עשה
      • אם k זהה למפתח, אז
        • חזרה True
      • החזר False
  • הגדר פונקציה remove(). זה ייקח מפתח
    • עבור כל אינדקס i ומפתח k ב-new_list, בצע
      • אם המפתח זהה ל-k, אז
        • מחק רשימה חדשה[i]
  • כעת צור hashSet מותאם אישית. יהיו מעט שיטות כדלקמן
  • אתחול את זה באופן הבא -
  • key_space := 2096
  • hash_table:= רשימה של אובייקט מסוג דלי בגודל key_space
  • הגדר פונקציה add(). זה ייקח מפתח
    • hash_key:= key mod key_space
    • call update(key) of hash_table[hash_key]
  • הגדר פונקציה remove(). זה ייקח מפתח
    • hash_key:= keymodkey_space
    • מחק מפתח מ-hash_table[hash_key]
  • הגדר פונקציה מכילה(). זה ייקח מפתח
    • hash_key:= keymodkey_space
    • החזר get(key) של hash_table[hash_key]

הטמעת HashSet ב-Python

כאן ניישם את האלגוריתם הנ'ל וניצור תוכנית Python. נגדיר את שתי המחלקות: HashSet ו-CreateHashset. בוא נראה את הקוד למטה.

קוד -

 # Here, we are Designing the HashSet in python # Here, we are checking the values and will return the output class class verifyvalues: # Here, we are initialization function which has list new_list def __init__(self): self.new_list=[] # Here, we have the function to update values def update(self, key): found=False for i,k in enumerate(self.new_list): if key==k: self.new_list[i]=key found=True break if not found: self.new_list.append(key) # Here, we have function to get values def get(self, key): for k in self.new_list: if k==key: return True return False # Here, we have function to remove values def remove(self, key): for i,k in enumerate(self.new_list): if key==k: del self.new_list[i] # Here, we have defined a class as HashSet class HashSet: # Here, we have defined an Initialization function def __init__(self): self.key_space = 2096 self.hash_table=[verifyvalues() for i in range(self.key_space)] def hash_values(self, key): hash_key=key%self.key_space return hash_key # Here, we have also defined an add function def add(self, key): self.hash_table[self.hash_values(key)].update(key) # Here, we have also defined a remove function def remove(self, key): self.hash_table[self.hash_values(key)].remove(key) # Here, we have defined the contains function def contains(self, key): return self.hash_table[self.hash_values(key)].get(key) def display(self): ls=[] for i in self.hash_table: if len(i.new_list)!=0:ls.append(i.new_list[0]) print(ls) ob = HashSet() print(ob.hash_values(10)) print('Add 10') ob.add(10) print(ob.hash_values(6)) print('Add 6 ') ob.add(6) print(ob.hash_values(5)) print('Add 5 ') ob.add(5) print('Contains 10 : ',ob.contains(10)) print('Contains 3: ',ob.contains(3)) print('Contains 8 : ',ob.contains(9)) 

תְפוּקָה:

 10 Add 10 6 Add 6 5 Add 5 Contains 10 : True Contains 3: False Contains 8 : False 2 Add 2 3 Add 3 Contains 2 : True Remove 2 Contains 2 : False Contains 3 : True [3, 5, 6, 10] 

הֶסבֵּר:

    מחלקה של verifyvalues:מחלקה זו עוסקת בסקירה של ערכים (new_list) ונותנת טכניקות לרענון, בדיקת נוכחות וביטול ערכים.טכניקת __init__:מציג סקירה פנויה לכל אירוע.טכניקת עדכון:מעדכן ערך נוכחי או מצמיד ערך אחר לסיכום.קבל טכניקה:בודק במקרה שקיים שווי בסקירה.לחסל אסטרטגיה:מבטל הערכה מוגדרת מראש מהתקציר.מחלקה HashSet:זהו הביצוע העיקרי של ה-HashSet.טכניקת __init__:מציג את ה-HashSet עם מרחב מפתח מוגדר מראש ויוצר אשכול (hash_table) של דוגמאות של verifyvalues ​​לטיפול בהשפעות.טכניקת hash_values:מעבד את מפתח ה-hash עבור מפתח מידע נתון תוך שימוש בפעילות המודולו.הוסף אסטרטגיה:מוסיף מפתח ל-HashSet על ידי רענון אובייקט ההשוואה של verifyvalues ​​ב-hash_table.לחסל טכניקה:מבטל מפתח מה-HashSet.מכיל אסטרטגיה:בודק אם חיוני קיים ב-HashSet.טכניקת הצג:מדפיס את המרכיב העיקרי של כל רשימת ערכים לא-בטלים, ומציע תיאור של תפוצת המידע.דוגמה לשימוש:הקוד מציג את השימוש ב-HashSet על ידי הוספת מפתחות (10, 6, 5), בדיקת נוכחות והצגת נתונים על המצב הפנימי.