Có bất kỳ thuật toán hoặc cấu trúc dữ liệu nào cần tìm giá trị trung bình của một tập hợp không?


14

Tôi đã đọc cuốn sách này cho lớp học của tôi, Thuật toán ngẫu nhiên. Trong cuốn sách đặc biệt này, có cả một phần dành riêng cho việc tìm trung bình của một mảng bằng cách sử dụng lựa chọn ngẫu nhiên, dẫn đến một thuật toán hiệu quả hơn. Bây giờ, tôi muốn biết liệu có bất kỳ ứng dụng thực tế nào của thuật toán này, trong lĩnh vực khoa học máy tính, bên cạnh một cải tiến về mặt lý thuyết. Có bất kỳ thuật toán hoặc cấu trúc dữ liệu nào cần tìm trung tuyến của một mảng không?


3
Bạn có thể muốn xem quicksort: Bằng cách chọn trung vị làm trục, trường hợp xấu nhất có thể tránh được (trường hợp xấu nhất là thời gian chạy = O (n log n) thay vì O (n ^ 2)) và độ sâu đệ quy sẽ là thu nhỏ (log2 (n)).
hoffmale

1
@hoffmale: Nhưng điều đó không đòi hỏi bạn phải tìm trung bình. Nó đòi hỏi bạn phải tìm một giá trị gần hợp lý với trung vị. Ví dụ: việc tìm một trục không nằm trong 5% hàng đầu hoặc 5% dưới cùng đảm bảo O (n log n).
gnasher729

1
@ gnasher729: nhưng điều đó sẽ không giảm thiểu độ sâu đệ quy. Cả hai thuộc tính đều quan trọng, ví dụ trong môi trường thời gian thực giới hạn tài nguyên.
hoffmale

@hoffmale, tình cờ, ký hiệu thông thường cho logarit cơ sở 2 (đặc biệt là giữa các nhà khoa học máy tính) chỉ đơn giản là "lg" như trong (lg (n)).
tự đại diện

@ gnasher729 Vì chủ đề là các thuật toán ngẫu nhiên, điều này (= khá gần) có lẽ chính xác là những gì các thuật toán này đang làm.
Konrad Rudolph

Câu trả lời:


17

nếu có bất kỳ ứng dụng thực tế nào của thuật toán này trong lĩnh vực khoa học máy tính bên cạnh việc cải tiến về mặt lý thuyết

Ứng dụng của thuật toán này là tầm thường - bạn sử dụng nó bất cứ khi nào bạn muốn tính trung bình của một tập hợp dữ liệu (mảng nói cách khác). Dữ liệu này có thể đến từ các lĩnh vực khác nhau: quan sát thiên văn, khoa học xã hội, dữ liệu sinh học, v.v.

Tuy nhiên, điều đáng nói là khi nào thích trung bình hơn (hoặc chế độ). Về cơ bản, trong thống kê mô tả, khi dữ liệu của chúng tôi được phân phối hoàn toàn bình thường thì giá trị trung bình, chế độ và trung vị là bằng nhau, tức là chúng trùng nhau. Mặt khác, khi dữ liệu của chúng tôi bị lệch, tức là phân phối tần số cho dữ liệu của chúng tôi bị lệch (trái / phải), nghĩa là không cung cấp vị trí trung tâm tốt nhất vì độ lệch đang kéo nó ra khỏi giá trị điển hình sang trái hoặc phải , trong khi trung vị không bị ảnh hưởng mạnh mẽ bởi dữ liệu bị lệch, và do đó tốt nhất giữ lại vị trí này chỉ đến một giá trị điển hình. Do đó, tính toán một trung vị có thể thích hợp hơn khi bạn xử lý dữ liệu sai lệch.

Ngoài ra, học máy là nơi các phương pháp thống kê được sử dụng nhiều, ví dụ như phân cụm -medians .k


Cảm ơn bạn! Điều đó là vô cùng hữu ích! Bất kỳ thuật toán hoặc kỹ thuật khác có thể cần phải tìm một trung vị?
Sharan Duggirala

5
Mặc dù điều này là đủ (+1), thường xuyên hơn là không thống kê được áp dụng, dữ liệu sẽ được sắp xếp trước khi tìm trung vị, vì trong nhiều hoặc thậm chí hầu hết các bối cảnh nơi trung vị mong muốn, do đó, ít nhất là một số thứ tự khác số liệu thống kê.
John Coleman

1
Hấp dẫn. Tôi đã nghe nói về -means clustering, nhưng không phải về k -medians clustering. kk
Svick

13

Lọc trung bình là phổ biến trong việc giảm các loại nhiễu nhất định trong xử lý hình ảnh. Đặc biệt là tiếng ồn muối và hạt tiêu. Nó hoạt động bằng cách chọn ra giá trị trung bình trong mỗi kênh màu trong từng vùng lân cận cục bộ của hình ảnh và thay thế nó bằng nó. Làm thế nào lớn những khu phố này có thể khác nhau. Kích thước bộ lọc phổ biến (vùng lân cận) là ví dụ 3x3 và 5x5 pixel.


1
Median không chỉ áp dụng cho nhiễu trong hình ảnh mà còn nhiễu trong hầu hết các lần đọc cảm biến, trong đó máy ảnh chỉ là một loại cảm biến. Sách giáo khoa trường học cho thấy hình dạng sóng hình sin và vuông đẹp để làm việc với. Trong thế giới thực, dữ liệu sạch như thế hầu như không bao giờ xảy ra. Nếu có, hầu như luôn luôn là do người khác đã chăm sóc làm sạch dữ liệu trước khi bạn nắm giữ nó. ví dụ: dữ liệu đọc cảm biến điển hình hơn mà bạn cần chọn giá trị "chính xác": (1, 3, 5, 65, 68, 70, 75, 80, 82, 85, 540, 555). Tôi đã sắp xếp dữ liệu để làm cho nó rõ ràng hơn.
Dunk

1
Đúng là bạn đúng. Nhưng nó sẽ tạo ra một câu trả lời rất dài và nhàm chán nếu chúng ta viết ra tất cả những điều nhỏ nhặt trong xử lý tín hiệu nơi nó có thể được sử dụng.
mathreadler

1
Các trung vị trong xử lý hình ảnh cũng có thể được sử dụng cho mỗi pixel với chuỗi 5 ảnh hoặc hơn, đó là cách để loại bỏ nhiễu tạm thời (còn gọi là khách du lịch chặn tầm nhìn)
Hagen von Eitzen

@HagenvonEitzen Bạn nói đúng! Thật ra tôi đã nghĩ về một cái gì đó khá giống nhau chỉ vài ngày trước. Nhiều khách du lịch xung quanh ...
mathreadler

10

Tính toán trung vị là đặc biệt quan trọng trong các thuật toán ngẫu nhiên.

341±εMột34kMột(1±ε)kMột(1-ε)A(1+ϵ)k

2nn


5

Các trung bình của trung vị có một số ứng dụng:

  • Ôi(nđăng nhậpn)
  • Ôi(n)Ôi(n2)

1
Trên thực tế, việc sử dụng các giá trị trung bình để chọn một trục cho quicksort dường như rất có thể làm chậm thuật toán trong thực tế, bởi vì nó hoàn toàn giết chết địa phương bộ đệm, đây là đóng góp chính cho sự nhanh chóng của quicksort. Nhưng nhận xét của bạn về sự phức tạp trong trường hợp xấu nhất dĩ nhiên là đúng.
wchargein

@wchargein Bạn có đề xuất lựa chọn thay thế nào? Không có triển khai quicksort thực tế nào mà tôi biết sử dụng một trục nhạy cảm với bộ đệm, bởi vì thực hiện giao dịch trong thời gian chạy trường hợp xấu nhất. Kỹ thuật cơ bản là một chức năng sắp xếp Giấy mà thảo luận về các lựa chọn thay thế, và không ai trong số chúng là nhận biết bộ đệm (và tuy nhiên vượt trội hơn so với lựa chọn trục ngây thơ).
Konrad Rudolph

1
@wchargein Quay trả lời câu hỏi của riêng tôi: Java 7 đã chuyển sang một thủ tục trục kép mới mà tôi không biết. Điều này là hấp dẫn và có thể làm cho các thuật toán trục trung bình lỗi thời.
Konrad Rudolph
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.