✨Thuật toán dòng dữ liệu

Thuật toán dòng dữ liệu

Trong khoa học máy tính, thuật toán dòng dữ liệu là thuật toán để xử lý các dòng dữ liệu trong đó dữ liệu vào được cung cấp dưới dạng một dãy các phần tử, và chỉ có thể đọc một vài lần (thông thường đúng một lần). Các thuật toán này có bộ nhớ giới hạn (thường nhỏ hơn kích thước dữ liệu vào rất nhiều) và thời gian xử lý mỗi phần tử cũng bị giới hạn.

Do các giới hạn trên nên thuật toán cho dòng dữ liệu thường đưa ra một lời giải xấp xỉ dựa trên một cấu trúc dữ liệu tóm tắt hay tổng kết dữ liệu vào.

Lịch sử

Mặc dù các thuật toán dòng dữ liệu đã được nghiên cứu bởi Munro và Paterson cũng như Flajolet và Martin, mô hình này được định nghĩa và phổ biến rộng rãi trong một bài báo của Noga Alon, Yossi Matias, và Mario Szegedy. Nhờ bài báo này, các tác giả trên đã đoạt giải Gödel năm 2005 "cho những đóng góp cơ bản của họ cho thuật toán dòng dữ liệu". Từ đó đến nay, đã có nhiều công trình nghiên cứu về thuật toán dòng dữ liệu cho nhiều lĩnh vực khác nhau trong khoa học máy tính như lý thuyết, cơ sở dữ liệu, mạng, và xử lý ngôn ngữ tự nhiên.

Ví dụ

Một ví dụ của thuật toán dòng dữ liệu là việc tìm số bị thiếu trong một dãy số. Giả sử dữ liệu vào là một hoán vị của các số từ 1 đến nhưng bị thiếu đúng một số. Bài toán đặt ra là cần tìm số bị thiếu. Một thuật toán đơn giản cho bài toán này là như sau. Khởi tạo một biến bằng 0. Mỗi lần nhận được một số mới từ dữ liệu vào, cộng vào . Đến cuối dòng dữ liệu, đúng bằng tổng tất cả các số trong dữ liệu vào. Nếu không có số nào bị thiếu thì tổng đó đúng bằng tổng các số từ 1 đến , tức là . Do đó, chính là số bị thiếu. Như vậy thuật toán chỉ cần lưu trữ đúng một giá trị mà vẫn có thể giải được bài toán đặt ra bất kể kích thước bài toán là bao nhiêu (nếu tính bộ nhớ theo số bit thì bộ nhớ cần dùng là , vẫn nhỏ hơn kích thước dữ liệu vào là rất nhiều).

Mô hình

Trong mô hình dòng dữ liệu, dữ liệu vào được cung cấp dưới dạng một hay nhiều dãy các phần tử chỉ có thể đọc theo thứ tự định sẵn đúng một lần hoặc một vài lần.

Một phần đáng kể các nghiên cứu về dòng dữ liệu tập trung vào việc tính các số liệu thống kê về tần số các phần tử trong dòng dữ liệu khi tập hợp các tần số này là quá lớn không thể lưu trữ hết trong bộ nhớ. Ở đây dữ liệu vào có thể được mô hình bởi một vectơ \mathbf{a} = (a_1, \dots, a_n) ban đầu được khởi tạo bằng vectơ \mathbf{0}, và dòng dữ liệu là một chuỗi các thay đổi của vectơ \mathbf{a}. Mục tiêu của thuật toán là tính một số liệu thống kê về vectơ \mathbf{a} bằng bộ nhớ nhỏ hơn rất nhiều bộ nhớ cần thiết để lưu trữ vectơ \mathbf{a}. Có hai mô hình phổ biến là mô hình "máy tính tiền" và mô hình "cửa xoay".

Trong mô hình máy tính tiền, mỗi lần thay đổi được xác định bởi một cặp số \langle i, c\rangle, nghĩa là a_i được tăng lên c đơn vị (c là số dương). Một trường hợp đặc biệt hay được xem xét là c = 1 (chỉ được phép tăng lên 1).

Trong mô hình cửa xoay, mỗi lần thay đổi được xác định bởi một cặp số \langle i, c\rangle, nghĩa là a_i được cộng thêm số nguyên (có thể âm hoặc dương) c. Trong mô hình cửa xoay nghiêm ngặt, a_i luôn không âm tại mọi thời điểm.

Ngoài ra, một số bài báo nghiên cứu về mô hình "cửa sổ dịch chuyển". Trong mô hình này, hàm cần tính là hàm của một số lượng cố định các phần tử cuối cùng (gọi là cửa sổ) của dòng dữ liệu. Khi các phần tử mới xuất hiện trong dòng dữ liệu, chúng được thêm vào cửa sổ và các phần tử cũ nhất trong cửa sổ bị loại ra.

Bên cạnh các bài toán về tần số, nhiều bài toán khác cũng được xem xét trong mô hình dòng dữ liệu. Nhiều bài toán đồ thị có thể giải được trong mô hình này khi ma trận kề hoặc danh sách kề của đồ thị được cung cấp dưới dạng dòng dữ liệu theo một thứ tự bất kì. Cũng có những bài toán phụ thuộc vào thứ tự các phần tử trong dòng dữ liệu chẳng hạn như đếm số nghịch thế của một hoán vị hay tìm độ dài dãy con tăng dài nhất.

Đánh giá

Hiệu quả của một thuật toán trên dòng dữ liệu được đánh giá bởi ba yếu tố cơ bản:

  • Số lượt thuật toán đọc qua dòng dữ liệu.
  • Lượng bộ nhớ cần dùng.
  • Thời gian chạy của thuật toán. Các thuật toán này có nhiều điểm tương đồng với thuật toán trực tuyến do chúng đều phải đưa ra quyết định mà không được thấy hết toàn bộ dữ liệu vào nhưng cũng có nhiều điểm khác biệt. Thuật toán dòng dữ liệu tuy chỉ có bộ nhớ hữu hạn nhưng không phải quyết định ngay khi một phần tử mới xuất hiện trong dòng dữ liệu trong khi thuật toán trực tuyến không có giới hạn bộ nhớ nhưng phải quyết định ngay khi dữ liệu mới xuất hiện.

Ứng dụng

Thuật toán dòng dữ liệu có nhiều ứng dụng trong mạng máy tính như tìm các dòng lớn, đếm số dòng khác nhau, ước lượng phân bố kích thước các dòng,v.v. Chúng cũng có ứng dụng trong cơ sở dữ liệu, chẳng hạn như ước lượng kích thước join.

Một vài bài toán dòng dữ liệu

Mô men tần số

Mô men tần số thứ k của một tập hợp các tần số

\mathbf{a} được định nghĩa là F_k(\mathbf{a}) = \sum_{i=1}^n a_i^k.

Mô men thứ nhất F_1 đơn giản là tổng tất cả các tần số (nghĩa là tổng toàn bộ). Mô men thứ hai F2 được dùng để tính nhiều chỉ số thống kê của dữ liệu, chẳng hạn như hệ số Gini. F{\infty} được định nghĩa là tần số của phần tử phổ biến nhất.

Bài báo của mở đầu nghiên cứu về việc ước lượng các mô men tần số của dòng dữ liệu.

Phần tử phổ biến

Bài toán này yêu cầu tìm tất cả các phần tử xuất hiện nhiều lần trong dòng dữ liệu, chẳng hạn ít nhất 1% của toàn bộ dữ liệu. Một vài thuật toán cho bài toán này bao gồm

  • Thuật toán
  • Thuật toán Count-Min
  • Thuật toán Count-sketch

Đếm số phần tử khác nhau

Bài toán này yêu cầu đếm số phần tử khác nhau xuất hiện trong dòng dữ liệu (đôi khi gọi là mô men F_0 dù tên gọi này không chính xác về mặt toán học). Thuật toán đầu tiên cho bài toán này là của Flajolet và Martin, và thuật toán tốt nhất hiện nay về thời gian và bộ nhớ là của D. Kane, J. Nelson và D. Woodruff. Nó dùng bộ nhớ O(ε^2 + log d) và thời gian cập nhật là O(1) trong trường hợp xấu nhất.

Entropy

Entropy (thực nghiệm) của tập hợp các tần số \mathbf{a} được định nghĩa là H(\mathbf{a}) = \sum_{i=1}^n \frac{a_i}{m}\log{ai/m}, trong đó m = \sum{i=1}^n a_i.

Việc ước lượng hàm số này cho dòng dữ liệu là chủ đề của nhiều bài báo chẳng hạn như của hay .

Chặn dưới

Đã có nhiều nghiên cứu về chặn dưới cho lượng bộ nhớ cần dùng của các thuật toán dòng dữ liệu. Cho đến nay, kĩ thuật phổ biến nhất để tìm ra các chặn dưới này là thông qua độ phức tạp liên lạc.

👁️ 1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Trong khoa học máy tính, **thuật toán dòng dữ liệu** là thuật toán để xử lý các dòng dữ liệu trong đó dữ liệu vào được cung cấp dưới dạng một dãy các phần tử,
Trong khoa học máy tính, một thuật toán là **trực tuyến** nếu nó không nhận được toàn bộ dữ liệu ngay từ đầu mà chỉ nhận được từng phần của dữ liệu và phải đưa
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
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ữ
**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
**Thuật toán Dinitz** là một thuật toán thời gian đa thức mạnh cho việc tìm luồng cực đại trên đồ thị luồng, tìm ra năm 1970 bởi nhà nghiên cứu khoa học máy tính người
**Phân tích dữ liệu** là một quá trình kiểm tra, làm sạch, chuyển đổi và mô hình hóa dữ liệu với mục tiêu khám phá thông tin hữu ích, thông báo kết luận và hỗ
**Hệ thống quản lý cơ sở dữ liệu hoạt động** (còn gọi là OLTP Trên cơ sở dữ liệu Transaction Processing Line), được sử dụng để quản lý Dữ liệu động trong thời gian thực.
Một số ngôn ngữ lập trình cung cấp **kiểu dữ liệu phức** để lưu và thực hiện các phép toán số học số phức dưới dạng một kiểu dữ liệu có sẵn (cơ bản). Trong
**Giảm chiều dữ liệu** (tiếng Anh: **dimensionality reduction**, hay **dimension reduction**), là sự biến đổi dữ liệu từ không gian chiều-cao thành không gian chiều-thấp để biểu diễn ở dạng chiều-thấp đồng thời giữ lại
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
phải|nhỏ|[[Lưu đồ thuật toán (thuật toán Euclid) để tính ước số chung lớn nhất (ưcln) của hai số _a_ và _b_ ở các vị trí có tên A và B. Thuật toán tiến hành bằng
**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_),
nhỏ| Để tìm kiếm một mục đã cho trong một danh sách theo thứ tự nhất định, có thể sử dụng cả thuật toán [[Tìm kiếm tuần tự|tìm kiếm nhị phân và tuyến tính (bỏ
Bài viết này là **danh sách các thuật toán** cùng một mô tả ngắn cho mỗi thuật toán. ## Thuật toán tổ hợp ### Thuật toán tổ hợp tổng quát * Thuật toán Brent: tìm
Bài này nói về từ điển các chủ đề trong toán học. ## 0-9 * -0 * 0 * 6174 ## A * AES * ARCH * ARMA * Ada Lovelace * Adrien-Marie Legendre *
Trong khoa học máy tính và trong toán học, **thuật toán sắp xếp** là một thuật toán sắp xếp các phần tử của một danh sách (hoặc một mảng) theo thứ tự (tăng hoặc giảm).
Trong khoa học máy tính, **thuật toán tất định** là một thuật toán có đầu ra (output) hoàn toàn có thể dự đoán được (xác định được) qua đầu vào (input), và máy chạy thuật
Trong tính toán lượng tử, **thuật toán lượng tử** là một thuật toán chạy bằng mô hình thực tế của tính toán lượng tử, mô hình được sử dụng phổ biến nhất là mô hình
nhỏ|Xử lý dữ liệu **Xử lý dữ liệu** nói chung là việc thu thập dữ liệu và xử lý các mục dữ liệu để tạo thông tin có ý nghĩa." Theo khía cạnh này, có
Trong công nghệ thông tin, **Nén dữ liệu** (tiếng Anh: _Data compression_) là việc chuyển định dạng thông tin sử dụng ít bit hơn cách thể hiện ở dữ liệu gốc. Tùy theo dữ liệu
Trong lĩnh vực điện toán**, Khôi phục dữ liệu** (hay **Phục hồi dữ liệu**) là quá trình sử dụng các thiết bị, phần mềm lấy lại dữ liệu từ bị hư hỏng, lỗi hoặc bị
**Bảo vệ dữ liệu cá nhân** khởi đầu dùng để chỉ việc bảo vệ dữ liệu có liên quan đến cá nhân trước sự lạm dụng. Trong vùng nói tiếng Anh người ta gọi đó
**Thuật toán Berlekamp–Massey** là một thuật toán tìm bộ ghi dịch hồi tiếp tuyến tính (LFSR) ngắn nhất sinh ra một dãy nhị phân cho trước. Thuật toán cũng tìm ra đa thức nhỏ nhất
**Thuật toán luật μ** là một thuật toán nén-giản tín hiệu, chủ yếu được sử dụng trong các hệ thống viễn thông kỹ thuật số của Bắc Mỹ và Nhật Bản. Các thuật toán nén-giản
Các **thuật toán tìm đường đi trong mê cung** là những phương pháp được tự động hóa để giải một mê cung. Các thuật toán chọn đường ngẫu nhiên, bám theo tường, Pledge, và Trémaux
Trong hoạt động tính toán máy tính, **dữ liệu liên kết** mô tả một phương thức tạo ra dữ liệu có cấu trúc để có thể liên kết được với nhau và trở nên có
**Xóa dữ liệu** (còn được gọi là **hủy dữ liệu**, ) là phương pháp của phần mềm xóa dữ liệu nhằm mục đích xóa hoàn toàn tất cả dữ liệu trên ổ đĩa cứng hoặc
thumb|320x320px|Mã hóa khóa đối xứng: quá trình mã hóa và giải mã sử dụng cùng một khóa Trong mật mã học, các **thuật toán khóa đối xứng** (_tiếng Anh: symmetric-key algorithms_) là một lớp các
**Thuật toán thiên hà** là một thuật toán mà chạy nhanh hơn các thuật toán khác với một dữ liệu vào đủ lớn, nhưng số "đủ lớn" đó lại quá lớn đến nỗi nó không
**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
**Quản lý dữ liệu** bao gồm tất cả các ngành liên quan đến quản lý dữ liệu như một tài nguyên có giá trị. ## Khái niệm Khái niệm quản lý dữ liệu xuất hiện
Trong hình học tính toán, **thuật toán Chan**, gọi theo tên của Timothy M. Chan, là một thuật toán phụ thuộc dữ liệu ra tối ưu cho việc tìm bao lồi của tập hợp _P_
**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
**Mô hình cơ sở dữ liệu phân cấp** (tiếng Anh: hierarchical database model) là một loại mô hình dữ liệu, trong đó dữ liệu được tổ chức thành cấu trúc dạng cây. Dữ liệu được
**Thu thập dữ liệu mẫu** là quá trình lấy mẫu tín hiệu để đo các điều kiện vật lý trong thế giới thực và chuyển đổi các mẫu kết quả thành giá trị số kỹ
nhỏ| Trung tâm dữ liệu [[ARSAT (2014) ]] **Trung tâm dữ liệu** (tiếng Anh Mỹ: data center, hoặc tiếng Anh Anh: data centre), là một tòa nhà, không gian dành riêng trong tòa nhà hoặc
**Cơ sở dữ liệu thư mục** (tiếng Anh: _bibliographic database_) là cơ sở dữ liệu chứa các biểu ghi thư mục, được tổ chức như một bộ sưu tập kỹ thuật số các tài liệu
nhỏ|phải|Bảo mật dữ liệu **Bảo mật dữ liệu** (_Data security_) hay còn gọi là **An ninh dữ liệu** có nghĩa là bảo vệ dữ liệu kỹ thuật số (chẳng hạn như dữ liệu nằm trong
Trong hệ cơ sở dữ liệu, **tính nguyên tử** (tiếng Anh: atomicity, ) là một trong các tính chất ACID của giao dịch cơ sở dữ liệu. **Giao dịch nguyên tử** là dãy thao tác
**Ứng dụng cơ sở dữ liệu** là một chương trình máy tính có mục đích chính là nhập và truy xuất thông tin từ cơ sở dữ liệu được máy tính hóa. Ví dụ ban
## Khái niệm dữ liệu thứ cấp Dữ liệu thứ cấp là dữ liệu đã có sẵn, không phải do mình thu thập, đã công bố nên dễ thu thập, ít tốn thời gian, tiền
thumb|Quy trình mô hình hóa dữ liệu. Hình ảnh minh họa cách mô hình dữ liệu được phát triển và sử dụng ngày nay. Một [[sơ đồ khái niệm|mô hình dữ liệu khái niệm được
Trong khoa học máy tính, **đống** (tiếng Anh: _heap_) là một cấu trúc dữ liệu dựa trên cây thỏa mãn _tính chất đống_: nếu B là nút con của A thì khóa(A)≥khóa(B). Một hệ quả
Trong khoa học máy tính, **thuật toán Prim** là một thuật toán tham lam để tìm cây bao trùm nhỏ nhất của một đồ thị vô hướng có trọng số liên thông. Nghĩa là nó
**Thuật toán Dijkstra**, mang tên của nhà khoa học máy tính người Hà Lan Edsger Dijkstra vào năm 1956 và ấn bản năm 1959, là một thuật toán giải quyết bài toán đường đi ngắn
**Thuật toán ghép cặp của Edmonds** (còn gọi là thuật toán bông hoa) là một thuật toán trong lý thuyết đồ thị để tìm cặp ghép cực đại trong đồ thị. Thuật toán được tìm
thumb|hochkant=1.8|Radar của trạm Echelon 81 cũ tại [[Bad Aibling, Bayern]] **Scandal việc do thám bí mật người dân 2013** dính líu tới những sự kiện xảy ra từ tháng 6 năm 2013, sau khi cựu
**Thuật toán Bellman–Ford** hay **Giải thuật Bellman–Ford** là một thuật toán tính các đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng có trọng số (trong đó một số cung có thể
**LZW** là một phương pháp nén được phát minh bởi Lempel - Ziv và Welch. Nó hoạt động dựa trên một ý tưởng rất đơn giản là người mã hoá và người giải mã cùng