1. Trang chủ
  2. » Thể loại khác

cau truc du lieu hash table

5 103 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 251,28 KB

Nội dung

http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Cấu trúc liệu Hash Table Hash Table gì? Cấu trúc liệu Hash Table cấu trúc liệu lưu giữ liệu theo cách thức liên hợp Trong Hash Table, liệu lưu giữ định dạng mảng, giá trị liệu có giá trị mục riêng Việc truy cập liệu trở nên nhanh biết mục liệu cần tìm Do đó, với loại cấu trúc liệu Hash Table hoạt động chèn hoạt động tìm kiếm diễn nhanh, bất chấp kích cỡ liệu Hash Table sử dụng mảng kho lưu giữ trung gian sử dụng kỹ thuật Hash để tạo mục nơi phần tử chèn vào Kỹ thuật Hashing Hashing kỹ thuật để chuyển đổi dãy giá trị khóa (key) vào dãy giá trị mục (index) mảng Chúng ta sử dụng toán tử lấy phần dư để thu dãy giá trị khóa Giả sử có HashTable có kích cỡ 20, phần tử cần lưu giữ Phần tử định dạng (key, value) • (1,20) • (2,70) • (42,80) • (4,25) • (12,44) http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     • (14,32) • (17,11) • (13,78) • (37,98) Stt Key Hash Chỉ mục mảng 1 % 20 = 1 2 % 20 = 2 42 42 % 20 = 2 4 % 20 = 4 12 12 % 20 = 12 12 14 14 % 20 = 14 14 17 17 % 20 = 17 17 13 13 % 20 = 13 13 37 37 % 20 = 17 17 Kỹ thuật Dò tuyến tính (Linear Probing) Chúng ta thấy xảy trường hợp mà kỹ thuật Hashing sử dụng để tạo mục tồn mảng Trong tình này, cần tìm kiếm vị trí trống mảng việc nhìn vào tìm thấy trống Kỹ thuật gọi Dò tuyến tính (Linear Probing) Stt Key Hash Chỉ mục mảng Sau kỹ thuật Linear Probing, mục mảng http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     1 % 20 = 1 2 % 20 = 2 42 42 % 20 = 2 4 % 20 = 4 12 12 % 20 = 12 12 12 14 14 % 20 = 14 14 14 17 17 % 20 = 17 17 17 13 13 % 20 = 13 13 13 37 37 % 20 = 17 17 18 Các hoạt động Hash Table Dưới số hoạt động thực cấu trúc liệu Hash Table • Hoạt động tìm kiếm: tìm kiếm phần tử cấu trúc liệu HashTable • Hoạt động chèn: chèn phần tử vào cấu trúc liệu HashTable • Hoạt động xóa: xóa phần tử từ cấu trúc liệu HashTable Phần tử liệu (DataItem) HashTable Phần tử liệu bao gồm: data key Dựa vào key thực hoạt động tìm kiếm cấu trúc liệu HashTable struct DataItem { int data; int key; }; http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Phương thức cấu trúc liệu Hash Table Xác định phương thức để ước lượng Hash Code key phần tử liệu int hashCode(int key){ return key % SIZE; } Hoạt động tìm kiếm Hash Table Mỗi phần tử tìm kiếm: ước lượng giá trị hash code key truyền vào sau xác định vị trí phần tử sử dụng giá trị hash code giống mục mảng Sử dụng kỹ thuật Dò tuyến tính (Linear Probing) để lấy phần tử khơng tìm thấy phần tử với giá trị hash code ước lượng struct DataItem *search(int key){ //lấy giá trị hash int hashIndex = hashCode(key); //di chuyển mảng gặp ô trống while(hashArray[hashIndex] != NULL){ if(hashArray[hashIndex]->key == key) return hashArray[hashIndex]; Để theo dõi code đầy đủ hoạt động Hash Table, mời bạn click chuột vào chương:Hash Table C Hoạt động chèn Hash Table Mỗi phần tử chèn: ước lượng giá trị hash code key truyền xác định vị trí phần tử sử dụng giá trị hash code giống mục mảng Sử dụng Dò tuyến tính (Linear Probing) cho vị trí trống phần tử tìm thấy với giá trị hash code ước lượng void insert(int key,int data){ struct DataItem *item = (struct DataItem*) malloc(sizeof(struct DataItem)); item->data = data; item->key = key; //Lấy giá trị hash int hashIndex = hashCode(key); //di chuyển mảng gặp ô trống bị xóa while(hashArray[hashIndex] != NULL && hashArray[hashIndex]->key != -1){ //tới ô ++hashIndex; Để theo dõi code đầy đủ hoạt động Hash Table, mời bạn click chuột vào chương:Hash Table C Hoạt động xóa Hash Table Mỗi phần tử cần xóa: ước lượng giá trị hash code key truyền vào sau xác định vị trí phần tử sử dụng giá trị hash code giống mục mảng Sử dụng Dò tuyến tính (Linear Probing) để lấy phần tử khơng tìm thấy phần tử với giá trị hash code ước lượng Khi tìm thấy, lưu trữ phần tử giả để giữ hiệu suất hash table http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     struct DataItem* delete(struct DataItem* item){ int key = item->key; //lấy giá trị hash int hashIndex = hashCode(key); //di chuyển mảng gặp ô trống while(hashArray[hashIndex] !=NULL){ if(hashArray[hashIndex]->key == key){ struct DataItem* temp = hashArray[hashIndex]; //gán phần tử giả vị trí bị xóa hashArray[hashIndex] = dummyItem; return temp; } //tới ô ++hashIndex; //bao quanh hash table hashIndex %= SIZE; } return NULL; } Để theo dõi code đầy đủ hoạt động Hash Table, mời bạn click chuột vào chương:Hash Table C   http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     ... //lấy giá trị hash int hashIndex = hashCode(key); //di chuyển mảng gặp ô trống while(hashArray[hashIndex] !=NULL){ if(hashArray[hashIndex]->key == key){ struct DataItem* temp = hashArray[hashIndex];... key){ //lấy giá trị hash int hashIndex = hashCode(key); //di chuyển mảng gặp ô trống while(hashArray[hashIndex] != NULL){ if(hashArray[hashIndex]->key == key) return hashArray[hashIndex]; Để theo... trí bị xóa hashArray[hashIndex] = dummyItem; return temp; } //tới ô ++hashIndex; //bao quanh hash table hashIndex %= SIZE; } return NULL; } Để theo dõi code đầy đủ hoạt động Hash Table, mời bạn

Ngày đăng: 02/12/2017, 13:36

TỪ KHÓA LIÊN QUAN

w