Trong khoa học máy tính, cấu trúc dữ liệu cho các tập hợp không giao nhau là một cấu trúc dữ liệu để lưu trữ một tập hợp các phần tử được phân chia thành nhiều tập hợp con không giao nhau. Thuật toán hợp-tìm là một thuật toán cho phép thực hiện hai thao tác sau:
- Tìm: Tìm xem một phần tử cho trước nằm trong tập hợp nào. Có thể dùng để xác định hai phần tử cho trước có nằm trong cùng một tập hợp hay không.
- Hợp: Hợp hai tập hợp làm một.
Do nó hỗ trợ hai thao tác trên nên cấu trúc dữ liệu cho các tập hợp không giao nhau còn được gọi là cấu trúc dữ liệu hợp tìm. Một thao tác quan trọng nữa nhưng thường rất đơn giản là Tạo-tập, dùng để tạo một tập mới chỉ chứa đúng một phần tử.
Để định nghĩa các thao tác trên một cách cụ thể, cần có một cách để ghi nhớ các tập. Một phương pháp phổ biến là dùng một phần tử cố định của mỗi tập để đại diện cho tập đó. Tìm(x) trả về phần tử đại diện của tập chứa x. Hợp nhận hai đối số là phần tử đại diện của hai tập.
Rừng các tập không giao nhau
Rừng các tập không giao nhau là cấu trúc dữ liệu trong đó mỗi tập được biểu diễn bởi một cây, trong đó mỗi nút lưu một con trỏ đến nút cha của nó. Cấu trúc dữ liệu này được mô tả lần đầu tiên bởi Bernard A. Galler và Michael J.Fischer năm 1964, nhưng độ phức tạp tính toán của nó chỉ được phân tích chính xác nhiều năm sau đó.
Trong rừng các tập không giao nhau, đại diện của mỗi tập là nút gốc của cây biểu diễn tập đó. Thao tác tìm đi theo các con trỏ đến nút cha cho tới khi đến nút gốc. Thao tác hợp hợp hai cây làm một bằng cách gắn một nút gốc vào làm nút con của nút gốc kia. Một phương pháp cài đặt các thao tác này là như sau:
function Tạo-tập(x)
x.cha ← x
function Tìm(x)
if x.cha == x then
return x
else
return Tìm(x.cha)
function Hợp(x, y)
xGốc ← Tìm(x)
yGốc ← Tìm(y)
xGốc.cha ← yGốc
Theo như cách cài đặt đơn giản như trên thì phương pháp này kém hiệu quả do các cây không cân bằng. Có hai cách để làm thuật toán hiệu quả hơn.
Phương pháp thứ nhất, gọi là hợp dùng hạng, là luôn gắn nút gốc cây nhỏ hơn vào làm nút con của nút gốc cây lớn hơn. Cụ thể hơn, mỗi cây đều có một tham số, gọi là hạng. Cây có đúng một phần tử có hạng bằng 0. Khi hợp hai cây cùng có hạng r, hạng của cây mới sẽ là r+1. Chỉ với phương pháp này, cấu trúc dữ liệu đã đảm bảo thời gian trừ dần cho mỗi thao tác. Sau đây là mã giả mới của Tạo-tập và Hợp cho thuật toán cải tiến.
function Tạo-tập(x)
x.cha ← x
x.hạng ← 0
function Hợp(x, y)
xGốc ← Tìm(x)
yGốc ← Tìm(y)
if xGốc == yGốc then
return
if xGốc.hạng < yGốc.hạng then
xGốc.cha ← yGốc
else if xGốc.hạng > yGốc.hạng then
yGốc.cha ← xGốc
else
yGốc.cha ← xGốc
xGốc.hạng ← xGốc.hạng + 1
Cải tiến thứ hai, gọi là nén đường, là một cách để rút ngắn đường trên cây khi thực hiện thao tác tìm. Ý tưởng của cải tiến này là bất cứ nút nào được thăm trong một thao tác tìm đều được gắn trực tiếp với nút gốc, để các thao tác tìm sau này nếu lại đi qua các nút này thì không cần phải lặp lại các thao tác đã thực hiện. Sau đây là mã giả mới cho thao tác Tìm.
function Tìm(x)
if x.cha == x then
return x
else
x.cha ← Tìm(x.cha)
return x.cha
Hai cải tiến này bổ trợ cho nhau. Khi sử dụng cả hai, thời gian trừ dần của mỗi thao tác là , trong đó là hàm ngược của , với là hàm Ackermann tăng rất nhanh. Với hầu như tất cả các giá trị thực tế của n, gia trị của là nhỏ hơn 5.
Độ phức tạp tính toán trên là tối ưu: Fredman và Saks năm 1989 đã chứng minh một thuật toán hợp tìm bất kì đều cần đọc trung bình ô nhớ cho mỗi thao tác.
👁️
0 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Trong khoa học máy tính, **cấu trúc dữ liệu cho các tập hợp không giao nhau** là một cấu trúc dữ liệu để lưu trữ một tập hợp các phần tử được phân chia thành
Đây là danh sách các cấu trúc dữ liệu. Bạn có thể xem danh sách thuật ngữ rộng hơn tại danh sách các thuật ngữ liên quan đến cấu trúc dữ liệu và giải thuật.
thumb|Một ví dụ về lấy dữ liệu đầu ra từ truy vấn cơ sở dữ liệu SQL. **Cơ sở dữ liệu** () là một tập hợp các dữ liệu có tổ chức liên quan đến
**Robert Endre Tarjan** là nhà nghiên cứu khoa học máy tính nổi tiếng người Mỹ. Ông đã phát hiện ra nhiều thuật toán quan trọng, chẳng hạn như thuật toán tìm cha chung gần nhất
thumb|Sự tăng trưởng và số hóa các khả năng lưu trữ thông tin trên toàn cầu **Dữ liệu lớn** (Tiếng Anh: **Big data**) là một thuật ngữ cho việc xử lý một tập hợp dữ
Một tập hợp hình đa giác trong một [[biểu đồ Euler]] Tập hợp các số thực (R), bao gồm các số hữu tỷ (Q), các số nguyên (Z), các số tự nhiên (N). Các số
**Máy truy tìm dữ liệu trực tuyến** hay **máy tìm kiếm** hay **cỗ máy tìm kiếm** (tiếng Anh: _search engine_), hay còn được gọi với nghĩa rộng hơn là **công cụ tìm kiếm** (_search tool_),
**Trao đổi dữ liệu điện tử** (Electronic Data Interchange - EDI) là sự truyền thông tin từ máy tính gửi đến máy tính nhận bằng phương tiện điện tử, trong đó có sử dụng một
**Rò rỉ dữ liệu** hay **vi phạm dữ liệu**, **lộ dữ liệu** là "việc tiết lộ, công khai hoặc làm mất thông tin cá nhân một cách trái phép". Kẻ tấn công có nhiều động
**Tích hợp dữ liệu** liên quan đến việc kết hợp dữ liệu cư trú trong các nguồn khác nhau và cung cấp cho người dùng một cái nhìn thống nhất về chúng. Quá trình này
nhỏ|Một ví dụ về cây phân loại CART **Khai phá dữ liệu** (_data mining_) Là quá trình tính toán để tìm ra các mẫu trong các bộ dữ liệu lớn liên quan đến các phương
**Hệ cơ sở dữ liệu nhúng** là một hệ quản trị cơ sở dữ liệu (DBMS) được tích hợp chặt chẽ với một phần mềm ứng dụng yêu cầu quyền truy cập vào dữ liệu
thumb|Các địa tầng nguyên thủy nằm ngang bị biến dạng do ứng suất. **Địa chất cấu trúc** hay **địa chất cấu tạo** là nghiên cứu về sự phân bố ba chiều không gian của các
**Tái tạo và thu thập dữ liệu 3D** là việc tạo ra các mô hình ba chiều hoặc không gian từ dữ liệu cảm biến. Các kỹ thuật và lý thuyết, nói chung, hoạt động
Chỉ số khởi nghiệp của DocSend khám phá những xu hướng thay đổi trong số các nhà đầu tư mạo hiểm. Trong số những phát hiện, dữ liệu cho thấy các nhà đầu tư hiện
nhỏ| Ví dụ về thu thập dữ liệu trong khoa học sinh học: [[Chim cánh cụt Adélie được xác định và được cân mỗi khi chúng đi qua cầu cân tự động trên đường đến
phải|khung|Một cây có dán nhãn với 6 đỉnh và 5 cạnh **Cây** là khái niệm quan trọng trong lý thuyết đồ thị, cấu trúc dữ liệu và giải thuật. Cây là một đồ thị mà
**Xử lý dữ liệu điện tử** có thể đề cập đến việc sử dụng các phương pháp tự động để xử lý dữ liệu thương mại. Thông thường, điều này sử dụng các hoạt động
Trong khoa học máy tính, **treap** và **cây tìm kiếm nhị phân ngẫu nhiên hóa** là hai dạng cấu trúc dữ liệu cây tìm kiếm nhị phân liên quan chặt chẽ đến nhau. Chúng lưu
**Trung tâm Dữ liệu Hoàng Sa** (TTDL Hoàng Sa) là một tổ chức dân sự phi chính phủ và phi lợi nhuận, được xây dựng với mục tiêu phổ biến thông tin về chủ quyền
Trong lập trình máy tính, **Hợp ngữ** (hay **assembly**) thường được viết tắt là **asm** là bất kỳ ngôn ngữ lập trình cấp thấp nào có sự tương ứng rất mạnh giữa các tập lệnh
nhỏ|Một tập tin bitmap **Định dạng tập tin** là một cách chuẩn để thông tin được mã hóa trong việc lưu trữ trong các file. Nó chỉ định cách các bit được sử dụng để
Trong điện toán, khái niệm **hệ thống tập tin** hoặc **hệ thống tệp** () được dùng để chỉ các phương pháp và cấu trúc dữ liệu mà một hệ điều hành sử dụng để theo
**Bảng tra cứu dãy số nguyên trực tuyến** (_The On-Line Encyclopedia of Integer Sequences_), hay đơn giản là **Sloane's**, là cơ sở dữ liệu chuỗi số nguyên trực tuyến. Bảng được tạo ra và bảo
**Tài liệu Panama** hay **Hồ sơ Panama** () là một bộ 11,5 triệu tài liệu mật được tạo ra bởi nhà cung cấp dịch vụ của công ty Panama Mossack Fonseca cung cấp thông tin
thumb|[[Al-Masjid an-Nabawi ở Medina, một trong những nhà thờ Hồi giáo linh thiêng nhất]] **Thánh đường Hồi giáo**, **giáo đường Hồi giáo** hay **nhà thờ Hồi giáo** ( — , số nhiều: _masājid_, — ;
Đạo Phật có một lịch sử phát triển rất thăng trầm trong suốt hơn 2.500 năm; lan tỏa từ Ấn Độ ra khắp nơi trên thế giới. Do đó, việc hình thành các bộ phái
**Tập tin** (, viết tắt cho **tập thông tin**, còn được gọi là **tệp**, **tệp tin**) là một tập hợp của thông tin được đặt tên. Thông thường thì các tập tin này chứa trong
**ARM** (được viết cách điệu là **arm**, trước đây là từ viết tắt của **Advanced RISC Machine**, ban đầu là **Acorn RISC Machine**) là một họ kiến trúc dạng RISC cho các vi xử lý
**Không lực Hải quân Đế quốc Nhật Bản** (kanji cũ: 大日本帝國海軍航空隊, romaji: _Dai-Nippon Teikoku Kaigun Koukuu-tai_, phiên âm Hán-Việt: _Đại Nhật Bản Đế quốc Hải quân Hàng không Đội_) là binh chủng không quân của
Mọi tổ chức cung cấp dịch vụ dữ liệu hiện nay đều chấp nhận thực tế rằng việc có thể quản lý dữ liệu tốt cùng với việc cho phép khách hàng quản lý dữ
Phân tích dữ liệu kinh doanh không còn là lựa chọn phụ trợ mà đã trở thành yếu tố cốt lõi trong vận hành và ra quyết định của doanh nghiệp hiện đại. Khi thông
Mọi tổ chức cung cấp dịch vụ dữ liệu hiện nay đều chấp nhận thực tế rằng việc có thể quản lý dữ liệu tốt cùng với việc cho phép khách hàng quản lý dữ
Chỉ số khởi nghiệp của DocSend khám phá những xu hướng thay đổi trong số các nhà đầu tư mạo hiểm. Trong số những phát hiện, dữ liệu cho thấy các nhà đầu tư hiện
Chỉ số khởi nghiệp của DocSend khám phá những xu hướng thay đổi trong số các nhà đầu tư mạo hiểm. Trong số những phát hiện, dữ liệu cho thấy các nhà đầu tư hiện
Mọi tổ chức cung cấp dịch vụ dữ liệu hiện nay đều chấp nhận thực tế rằng việc có thể quản lý dữ liệu tốt cùng với việc cho phép khách hàng quản lý dữ
Các bảng băm phân tán **Bảng băm phân tán** (tiếng Anh: _distributed hash table_, viết tắt **DHT**) là một lớp các hệ thống phân tán không tập trung, cung cấp một dịch vụ tra cứu
right|thumb|Tìm kiếm vùng đơn hình. Dạng tổng quát nhất của bài toán **tìm kiếm vùng** là như sau: xử lý và lưu trữ một tập hợp _S_ các đối tượng, sao cho có thể xác
thumb|Một hội nghị trực tuyến **Hội nghị trực tuyến** là thuật ngữ dùng để chỉ các dịch vụ hội nghị và hợp tác trực tuyến khác nhau bao gồm các **webinar** (buổi hội thảo trực
nhỏ|Ảnh chụp màn hình tài liệu [[API web viết bởi NASA]] Một **giao diện lập trình ứng dụng** (, viết tắt: _API_) là một giao diện mà một hệ thống máy tính hay ứng dụng
Trong toán học, đặc biệt là trong lý thuyết tập hợp, **tập hợp lũy thừa** (hay còn gọi là **tập lũy thừa**, **tập hợp các bộ phận**, **tập các bộ phận**, **tập hợp các tập
**Giao tiếp** thường được định nghĩa là sự truyền tải thông tin. Hiện chưa có thống nhất về định nghĩa chính xác của thuật ngữ, đồng thời có nhiều tranh cãi về việc giao tiếp
**IPTV** (tiếng Anh viết tắt của _Internet Protocol Television_, có nghĩa: Truyền hình giao thức Internet) là một hệ thống dịch vụ truyền hình kỹ thuật số được phát đi nhờ vào giao thức Internet
Quốc giáo của nhà Thương () là một tôn giáo cổ đại của Trung Quốc, trong đó các tín đồ được đào tạo giao tiếp với nhiều vị thần, bao gồm tổ tiên và các
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
**Georg Ferdinand Ludwig Philipp Cantor** (; – 6 tháng 1 năm 1918) là một nhà toán học người Đức, được biết đến nhiều nhất với tư cách cha đẻ của lý thuyết tập hợp, một
**John von Neumann** (**Neumann János**; 28 tháng 12 năm 1903 – 8 tháng 2 năm 1957) là một nhà toán học người Mỹ gốc Hungary và là một nhà bác học thông thạo nhiều lĩnh
nhỏ|Tổng hợp giọng nói Trên máy tính, **tổng hợp giọng nói** là việc tạo ra giọng nói của người từ đầu vào là văn bản hay các mã hóa việc phát âm. Hệ thống này
**NTFS** (Viết tắt của từ New Technology File System). **Tiếng Việt**: "**Hệ thống tập tin công nghệ mới**". **NTFS** là hệ thống tập tin tiêu chuẩn của Windows NT, bao gồm cả các phiên bản
**Gioan Phaolô II** (hay **Gioan Phaolô Đệ Nhị;** tiếng Latinh: _Ioannes Paulus II_; tên khai sinh: **Karol Józef Wojtyła,** ; 18 tháng 5 năm 1920 – 2 tháng 4 năm 2005) là vị giáo hoàng