Làm thế nào để hiệu quả (lập trình) xác định xem hai bộ dữ liệu có / không có nội dung giống hệt nhau không?


8

Được:

  • một cơ sở dữ liệu địa lý A chứa 100 bộ dữ liệu được đặt tên 1 .. một 100
  • một cơ sở dữ liệu địa lý B chứa 100 bộ dữ liệu có tên b 1 .. b 100

Tôi muốn xác định theo chương trình (*) cho mỗi cặp dữ liệu ( a i , b i ) xem chúng có nội dung giống hệt nhau không. Vì tôi đang so sánh 100 cặp, tôi cần một phương pháp so sánh hiệu quả. Lý tưởng nhất là toàn bộ so sánh sẽ chỉ mất vài giây.

(*) Lưu ý: Tôi đề cập đến thuật ngữ "lập trình", không phải vì tôi đang tìm kiếm các ví dụ mã (mặc dù tôi sẵn sàng chấp nhận chúng), nhưng để nhấn mạnh rằng tôi đang tìm kiếm một phương pháp so sánh rất nhanh, sẽ không bao giờ có thể khi so sánh 100 cặp dữ liệu bằng tay.

Tôi đang lên kế hoạch tự thực hiện phương pháp so sánh này, vì vậy điều tôi thực sự tìm kiếm là một thuật toán chứ không phải là một công cụ sẵn sàng sử dụng (trừ khi có lẽ khi nó là nguồn mở).

Tôi biết rằng tôi có thể yêu cầu điều không thể, vì điều này sẽ yêu cầu so sánh nội dung hoàn chỉnh của bộ dữ liệu (có lẽ với các công cụ trong Bộ công cụ quản lý dữ liệuSo sánh dữ liệu ); hoặc ít nhất là so sánh giá trị băm / dữ liệu, nhưng việc tạo ra các bản tóm tắt cũng sẽ yêu cầu phải đi qua tất cả dữ liệu của bộ dữ liệu trước tiên.

Vì vậy, cách tiếp cận tốt nhất của tôi cho đến nay là:

  1. Trước tiên hãy xác định cặp dữ liệu nào ( a i , b i ) có thể có nội dung giống hệt nhau.

  2. Thực hiện so sánh dữ liệu đầy đủ chỉ cho các cặp dữ liệu còn lại.

Những câu hỏi của tôi:

  • ArcGIS có xảy ra để tự động tính toán một số loại dữ liệu mà tôi có thể truy vấn không? Nếu vậy thì thế nào?

    (Tôi không biết bất cứ điều gì thuộc loại đó, vì vậy tôi mong câu trả lời là "không". Vui lòng chứng minh tôi sai.)

  • Một số cách rất hiệu quả, đáng tin cậy để xác định xem hai bộ dữ liệu có thể có nội dung giống hệt nhau không?

    .


Có liên quan, nhưng không trùng lặp: gis.stackexchange.com/questions/49427/ trên
nicksan

Câu trả lời:


2

Bạn có thể tạo một trường trên bảng thuộc tính tính năng và tính toán hàm băm, ví dụ MD5 , trên tính năng bằng IEditEvents hoặc phần mở rộng lớp.

Giá trị băm sẽ được tính toán trên biểu diễn chuỗi của tính năng (json hoặc xml), trong đó WKT có thể được sử dụng cho trường hình dạng.


Thực tế tôi có thể làm một cái gì đó như thế. Mặc dù có thể không dễ dàng để làm cho công việc này trong mọi kịch bản mà không có cơ hội phá vỡ tính toán tiêu hóa.
stakx

@stakx Có, tránh khó tiêu có thể khó khăn :) Một phần mở rộng lớp có thể sẽ cung cấp quyền kiểm soát nhiều nhất đối với CRUD.
Kirk Kuykendall 18/03/13

0

Tôi sẽ xem xét tia X để so sánh các lược đồ và sau đó So sánh tính năng, So sánh bảng, v.v. từ bộ công cụ So sánh dữ liệu để so sánh nội dung khi lược đồ khớp. Nếu bạn đã thử phương pháp này thì có lẽ hãy cho chúng tôi biết cách tiếp cận này có thể thiếu.


Xin chào @PolyGeo. Cảm ơn bạn đã liên kết, công cụ này trông rất hữu ích. Tuy nhiên, nó khiến tôi nhận ra rằng tôi đã quên đề cập rằng tôi không tìm kiếm một công cụ sẵn sàng sử dụng , mà là một thuật toán . Tôi đã sửa đổi câu trả lời của mình.
stakx
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.