Hướng dẫn how do you make a hashtable in python? - làm thế nào để bạn tạo một bảng băm trong python?
Các bảng Hash là một loại cấu trúc dữ liệu trong đó địa chỉ hoặc giá trị chỉ mục của phần tử dữ liệu được tạo từ hàm băm. Điều đó làm cho việc truy cập dữ liệu nhanh hơn khi giá trị chỉ mục hoạt động như một khóa cho giá trị dữ liệu. Nói cách khác, bảng băm lưu trữ các cặp giá trị khóa nhưng khóa được tạo thông qua hàm băm. Show
Vì vậy, chức năng tìm kiếm và chèn của một phần tử dữ liệu trở nên nhanh hơn nhiều khi chính các giá trị chính trở thành chỉ mục của mảng lưu trữ dữ liệu. Trong Python, các loại dữ liệu từ điển đại diện cho việc thực hiện các bảng băm. Các khóa trong từ điển đáp ứng các yêu cầu sau.
Vì vậy, chúng tôi thấy việc triển khai bảng băm bằng cách sử dụng các loại dữ liệu từ điển như dưới đây. Truy cập các giá trị trong từ điểnĐể truy cập các phần tử từ điển, bạn có thể sử dụng các dấu ngoặc vuông quen thuộc cùng với khóa để có được giá trị của nó. Thí dụ# Declare a dictionary dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} # Accessing the dictionary with its key print "dict['Name']: ", dict['Name'] print "dict['Age']: ", dict['Age'] Đầu raKhi mã trên được thực thi, nó sẽ tạo ra kết quả sau - dict['Name']: Zara dict['Age']: 7 Cập nhật từ điểnBạn có thể cập nhật từ điển bằng cách thêm một mục nhập mới hoặc một cặp giá trị khóa, sửa đổi một mục nhập hiện có hoặc xóa một mục nhập hiện có như được hiển thị bên dưới trong ví dụ đơn giản- Thí dụ# Declare a dictionary dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} dict['Age'] = 8; # update existing entry dict['School'] = "DPS School"; # Add new entry print "dict['Age']: ", dict['Age'] print "dict['School']: ", dict['School'] Đầu raKhi mã trên được thực thi, nó sẽ tạo ra kết quả sau - dict['Age']: 8 dict['School']: DPS School Cập nhật từ điểnBạn có thể cập nhật từ điển bằng cách thêm một mục nhập mới hoặc một cặp giá trị khóa, sửa đổi một mục nhập hiện có hoặc xóa một mục nhập hiện có như được hiển thị bên dưới trong ví dụ đơn giản- Thí dụdict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} del dict['Name']; # remove entry with key 'Name' dict.clear(); # remove all entries in dict del dict ; # delete entire dictionary print "dict['Age']: ", dict['Age'] print "dict['School']: ", dict['School'] Đầu raKhi mã trên được thực thi, nó sẽ tạo ra kết quả sau - dict['Age']: Traceback (most recent call last): File "test.py", line 8, in Băm là gì?Một hàm băm là một giá trị có độ dài cố định và nó được tạo bằng công thức toán học. Các giá trị băm được sử dụng trong nén dữ liệu, mật mã, v.v ... Trong lập chỉ mục dữ liệu, các giá trị băm được sử dụng vì chúng có kích thước chiều dài cố định bất kể các giá trị được sử dụng để tạo chúng. Nó tạo ra các giá trị băm để chiếm không gian tối thiểu so với các giá trị khác của các độ dài khác nhau. Hàm băm sử dụng thuật toán toán học để chuyển đổi khóa thành băm. Một vụ va chạm xảy ra khi hàm băm tạo ra giá trị băm giống nhau cho nhiều hơn một phím. Trong hướng dẫn thuật toán này, bạn sẽ học:
Bảng băm là gì?Bảng băm là một cấu trúc dữ liệu lưu trữ các giá trị bằng một cặp khóa và giá trị. Mỗi giá trị được gán một khóa duy nhất được tạo bằng hàm băm.HASH TABLE is a data structure that stores values using a pair of keys and values. Each value is assigned a unique key that is generated using a hash function. Tên của khóa được sử dụng để truy cập giá trị liên quan của nó. Điều này làm cho việc tìm kiếm các giá trị trong bảng băm rất nhanh, không phân biệt số lượng mục trong bảng băm. Chức năng bămVí dụ: nếu chúng tôi muốn lưu trữ hồ sơ nhân viên và mỗi nhân viên được xác định duy nhất bằng số nhân viên. Chúng tôi có thể sử dụng số nhân viên làm khóa và gán dữ liệu nhân viên làm giá trị. Cách tiếp cận trên sẽ yêu cầu thêm không gian trống của thứ tự (M * N2) trong đó biến M là kích thước của mảng và biến N là số chữ số cho số nhân viên. Cách tiếp cận này giới thiệu một vấn đề không gian lưu trữ.(m * n2) where the variable m is the size of the array, and the variable n is the number of digits for the employee number. This approach introduces a storage space problem. Hàm băm giải quyết vấn đề trên bằng cách lấy số nhân viên và sử dụng nó để tạo giá trị số nguyên băm, các chữ số cố định và tối ưu hóa không gian lưu trữ. Mục đích của hàm băm là tạo một khóa sẽ được sử dụng để tham chiếu giá trị mà chúng tôi muốn lưu trữ. Hàm chấp nhận giá trị được lưu sau đó sử dụng thuật toán để tính giá trị của khóa. Sau đây là một ví dụ về hàm băm đơn giản h(k) = k1 % m HERE,
Thí dụHãy giả sử rằng chúng ta có một danh sách với kích thước cố định là 3 và các giá trị sau [1,2,3] Chúng ta có thể sử dụng công thức trên để tính toán các vị trí mà mỗi giá trị nên chiếm. Hình ảnh sau đây cho thấy các chỉ mục có sẵn trong bảng băm của chúng tôi. Bước 1) Tính vị trí sẽ bị chiếm bởi giá trị đầu tiên như vậy H (1) = 1 % 3 = 1 Giá trị 1 sẽ chiếm không gian trên INDEX 11 will occupy the space on index 1 Bước 2) Tính vị trí sẽ bị chiếm bởi giá trị thứ hai H (2) = 2 % 3 = 2 Giá trị 2 sẽ chiếm không gian trên INDEX 22 will occupy the space on index 2 Bước 3) Tính vị trí sẽ bị chiếm bởi giá trị thứ ba. H (3) = 3 % 3 = 0 Giá trị 3 sẽ chiếm không gian trên INDEX 03 will occupy the space on index 0 Kết quả cuối cùng Chúng tôi điền vào bảng băm bây giờ sẽ như sau. Phẩm chất của một hàm băm tốtMột hàm băm tốt nên có những phẩm chất sau.
Va chạmMột vụ va chạm xảy ra khi thuật toán tạo ra cùng một băm cho nhiều hơn một giá trị. Hãy cùng nhìn vào một ví dụ. Giả sử chúng ta có danh sách các giá trị sau [3,2,9,11,7] Hãy giả sử rằng kích thước của bảng băm là 7 và chúng tôi sẽ sử dụng công thức (k1 % m) trong đó m là kích thước của bảng băm. Bảng sau đây cho thấy các giá trị băm sẽ được tạo.
Như chúng ta có thể thấy từ các kết quả trên, các giá trị 2 và 9 có cùng giá trị băm và chúng ta không thể lưu trữ nhiều hơn một giá trị ở mỗi vị trí. Vấn đề đã cho có thể được giải quyết bằng cách sử dụng chuỗi hoặc thăm dò. Các phần sau đây thảo luận về chuỗi và thăm dò chi tiết. ChuỗiChuỗi là một kỹ thuật được sử dụng để giải quyết vấn đề va chạm bằng cách sử dụng các danh sách được liên kết mà mỗi danh sách có các chỉ mục duy nhất. Hình ảnh sau đây hình dung ra một danh sách xích trông như thế nào Cả 2 và 9 đều chiếm cùng một chỉ số, nhưng chúng được lưu trữ dưới dạng danh sách được liên kết. Mỗi danh sách có một định danh duy nhất. Lợi ích của danh sách xích Sau đây là những lợi ích của danh sách xích:
Để thăm dòKỹ thuật khác được sử dụng để giải quyết va chạm là thăm dò. Khi sử dụng phương pháp thăm dò, nếu xảy ra va chạm, chúng ta có thể chỉ cần di chuyển và tìm một khe trống để lưu trữ giá trị của chúng ta. Sau đây là các phương pháp thăm dò:
Sử dụng ví dụ trên của chúng tôi, bảng băm sau khi sử dụng thăm dò sẽ xuất hiện như sau: Hoạt động bàn bămỞ đây, các hoạt động được hỗ trợ bởi các bảng băm:
Chèn hoạt động dữ liệuHoạt động chèn được sử dụng để lưu trữ các giá trị trong bảng băm. Khi một giá trị mới được lưu trữ trong bảng băm, nó được gán một số chỉ mục. Số chỉ mục được tính toán bằng hàm băm. Hàm Hash giải quyết mọi va chạm xảy ra khi tính toán số chỉ mục. Tìm kiếm hoạt động dữ liệuHoạt động tìm kiếm được sử dụng để tra cứu các giá trị trong bảng Hash bằng số chỉ mục. Hoạt động tìm kiếm trả về giá trị được liên kết với số chỉ mục tìm kiếm. Ví dụ: nếu chúng ta lưu trữ giá trị 6 tại INDEX 2, thao tác tìm kiếm với chỉ mục số 2 sẽ trả về giá trị 6. Xóa hoạt động dữ liệuHoạt động xóa được sử dụng để xóa giá trị khỏi bảng băm. Để xóa hoạt động được thực hiện bằng số chỉ mục. Khi một giá trị đã bị xóa, số chỉ mục được thực hiện miễn phí. Nó có thể được sử dụng để lưu trữ các giá trị khác bằng cách sử dụng thao tác chèn. Thực hiện bảng băm với ví dụ PythonHãy cùng xem một ví dụ đơn giản tính toán giá trị băm của khóa def hash_key( key, m): return key % m m = 7 print(f'The hash value for 3 is {hash_key(3,m)}') print(f'The hash value for 2 is {hash_key(2,m)}') print(f'The hash value for 9 is {hash_key(9,m)}') print(f'The hash value for 11 is {hash_key(11,m)}') print(f'The hash value for 7 is {hash_key(7,m)}') Giải thích mã bảng bămHERE,
Thực hiện mã trên tạo ra các kết quả sau. The hash value for 3 is 3 The hash value for 2 is 2 The hash value for 9 is 2 The hash value for 11 is 4 The hash value for 7 is 0 Ví dụ từ điển PythonPython đi kèm với một loại dữ liệu tích hợp gọi là Từ điển. Từ điển là một ví dụ về bảng băm. Nó lưu trữ các giá trị bằng một cặp khóa và giá trị. Các giá trị băm được tự động tạo cho chúng tôi và bất kỳ va chạm nào được giải quyết cho chúng tôi trong nền. Ví dụ sau đây cho thấy cách bạn có thể sử dụng kiểu dữ liệu từ điển trong Python 3 employee = { 'name': 'John Doe', 'age': 36, 'position': 'Business Manager.' } print (f"The name of the employee is {employee['name']}") employee['position'] = 'Software Engineer' print (f"The position of {employee['name']} is {employee['position']}") employee.clear() print (employee) HERE,
Chạy mã trên tạo ra các kết quả sau. dict['Name']: Zara dict['Age']: 70 Phân tích độ phức tạpCác bảng băm có độ phức tạp thời gian trung bình của O (1) trong trường hợp tốt nhất. Độ phức tạp thời gian trong trường hợp xấu nhất là O (N). Kịch bản trường hợp xấu nhất xảy ra khi nhiều giá trị tạo ra cùng một khóa băm giống nhau và chúng ta phải giải quyết vụ va chạm bằng cách thăm dò. Ứng dụng trong thế giới thựcTrong thế giới thực, các bảng băm được sử dụng để lưu trữ dữ liệu cho
Ưu điểm của bảng bămỞ đây, là ưu/lợi ích của việc sử dụng bảng băm:
Nhược điểm của bảng bămỞ đây, là nhược điểm của việc sử dụng bảng băm:
Summary:
Làm thế nào để bạn tạo một bảng băm?Bây giờ, có một số bước liên quan đến chức năng chèn ... Tạo mục dựa trên cặp {key: value} .. Tính chỉ mục dựa trên hàm băm .. Kiểm tra xem chỉ mục đã bị chiếm dụng hay không, bằng cách so sánh khóa. Nếu nó không bị chiếm đóng. Chúng ta có thể trực tiếp chèn nó vào chỉ mục .. Có một hashtable trong Python?Các bảng băm hoặc có bản đồ trong Python được triển khai thông qua kiểu dữ liệu từ điển tích hợp. Các khóa của một từ điển trong Python được tạo ra bởi một hàm băm. Các yếu tố của từ điển không được đặt hàng và chúng có thể được thay đổi.. The keys of a dictionary in Python are generated by a hashing function. The elements of a dictionary are not ordered and they can be changed.
Là một từ điển Python giống như một bảng băm?Trong Python, từ điển (hay gọi tắt là Dict Dicts, là một cấu trúc dữ liệu trung tâm: Dicts lưu trữ một số lượng đối tượng tùy ý, mỗi đối tượng được xác định bởi một khóa từ điển duy nhất.Từ điển thường được gọi là bản đồ, băm, bảng tra cứu hoặc mảng kết hợp.Dictionaries are often also called maps, hashmaps, lookup tables, or associative arrays.
__ Hash __ làm gì trong Python?Gọi __hash__ trên chìa khóa để tính toán băm của khóa.Nếu khóa không thể băm, hãy tăng một kiểu.Lưu trữ (Hash_Value, khóa, giá trị) trong một mảng tại vị trí Hash_value % Len (mảng).compute the hash of the key. If the key is not hashable raise a TypeError. Store (hash_value, key, value) in an array at location hash_value % len(array) . |