Các khoảng cách Hamming giữa hai chuỗi chiều dài bằng nhau là số vị trí mà tại đó những biểu tượng tương ứng là khác nhau.
Hãy Plà một chuỗi nhị phân có độ dài nvà Tlà một chuỗi nhị phân có độ dài 2n-1. Chúng ta có thể tính nkhoảng cách Hamming giữa Pvà mọi nchuỗi con Tthứ cấp theo thứ tự từ trái sang phải và đặt chúng vào một mảng (hoặc danh sách).
Ví dụ trình tự khoảng cách Hamming
Hãy để P = 101và T = 01100. Trình tự khoảng cách Hamming bạn nhận được từ cặp này là 2,2,1.
Định nghĩa về sự gần gũi
Bây giờ hãy xem xét hai chuỗi khoảng cách Hamming như vậy. Nói x = (0, 2, 2, 3, 0)và y = (2, 1, 4, 4, 2)làm ví dụ. Chúng tôi nói rằng xvà ylà closenếu y <= x <= 2*yhoặc nếu x <= y <= 2*x. Ở đây phép nhân vô hướng và bất đẳng thức được lấy theo nguyên tố. Đó là để nói, cho hai chuỗi Avà B, A <= B iff A[i] <= B[i]cho tất cả các chỉ số i.
Lưu ý rằng các chuỗi khoảng cách Hamming tạo thành một thứ tự từng phần theo cách so sánh chúng. Nói cách khác, nhiều cặp trình tự không lớn hơn hoặc bằng hoặc không nhỏ hơn hoặc bằng nhau. Ví dụ (1,2)và (2,1).
Vì vậy, sử dụng ví dụ trên, (0, 2, 2, 3, 0) <= 2*(2, 1, 4, 4, 2) = (4, 2, 8, 8, 4)nhưng (0, 2, 2, 3, 0)không lớn hơn (2, 1, 4, 4, 2). Cũng (2, 1, 4, 4, 2)không nhỏ hơn hoặc bằng 2*(0, 2, 2, 3, 0) = (0, 4, 4, 6, 0). Kết quả là xvà ykhông gần nhau.
Bài tập
Để tăng nbắt đầu từ n=1, hãy xem xét tất cả các cặp chuỗi nhị phân có thể có Pđộ dài nvà Tđộ dài 2n-1. Có 2^(n+2n-1)những cặp như vậy và do đó có nhiều chuỗi khoảng cách Hamming. Tuy nhiên, nhiều trong số các chuỗi đó sẽ giống hệt nhau. Nhiệm vụ là tìm kích thước của tập hợp khoảng cách Hamming lớn nhất để không có hai chuỗi gần nhau.
Mã của bạn sẽ xuất ra một số cho mỗi giá trị n.
Ghi bàn
Điểm của bạn nói rộng nhất là nmã của bạn đạt được trên máy của tôi sau 5 phút (nhưng hãy đọc tiếp). Thời gian là cho tổng thời gian chạy, không phải thời gian cho việc đó n.
Để đưa ra điểm số cho câu trả lời không tối ưu, vì việc tìm câu trả lời tối ưu có thể khó, chúng tôi sẽ cần một hệ thống tính điểm hơi tinh tế. Điểm của bạn là giá trị cao nhất nmà không ai khác đã đăng câu trả lời đúng cao hơn cho bất kỳ kích thước nào nhỏ hơn bằng với điều này. Ví dụ: nếu bạn xuất 2, 4, 21và người khác xuất 2, 5, 15thì bạn sẽ chỉ ghi điểm 1vì người khác có câu trả lời tốt hơn n = 2. Nếu bạn xuất ra 2, 5, 21thì bạn sẽ ghi điểm 3bất kể ai khác xuất ra vì những câu trả lời đó đều tối ưu. Rõ ràng nếu bạn có tất cả các câu trả lời tối ưu thì bạn sẽ nhận được điểm cho bài cao nhất nbạn đăng. Tuy nhiên, ngay cả khi câu trả lời của bạn không phải là tối ưu, bạn vẫn có thể đạt được điểm nếu không ai khác có thể đánh bại nó.
Ví dụ câu trả lời và ví dụ làm việc
(Câu trả lời này vẫn chưa được kiểm tra. Xác minh độc lập sẽ được nhận một cách biết ơn.)
Nhờ các sản phẩm ETH:
- n = 1 cho 2.
- n = 2 cho 5.
- n = 3 cho 21.
Hãy xem xét n = 2chi tiết hơn. Trong trường hợp này, danh sách đầy đủ các chuỗi khoảng cách Hamming (được biểu thị bằng các bộ dữ liệu ở đây) là:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Chúng ta có thể thấy rằng (0,0)nó không gần với bất kỳ bộ dữ liệu nào khác. Trong thực tế, nếu chúng ta lấy (0, 0), (0, 1), (1, 0), (2, 1), (1,2)sau đó không ai trong số những bộ dữ liệu gần gũi với bất kỳ của những người khác. Điều này cho một số điểm 5cho n = 2.
Đối với n = 3danh sách đầy đủ các chuỗi khoảng cách Hamming khác biệt là:
[(0, 0, 0), (0, 0, 1), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 2, 1), (0, 2, 2), (0, 2, 3), (0, 3, 0), (0, 3, 1), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 0), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 0), (1, 3, 1), (1, 3, 2), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 0), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 0, 2), (3, 0, 3), (3, 1, 0), (3, 1, 1), (3, 1, 2), (3, 2, 0), (3, 2, 1), (3, 2, 2), (3, 3, 2), (3, 3, 3)]
Trong các 48chuỗi đó, chúng ta có thể chọn ra một bộ kích thước 21sao cho không có cặp nào trong bộ đó gần nhau.
Ngôn ngữ và thư viện
Bạn có thể sử dụng bất kỳ ngôn ngữ và thư viện có sẵn mà bạn thích. Nếu khả thi, sẽ tốt khi có thể chạy mã của bạn, vì vậy vui lòng bao gồm một lời giải thích đầy đủ về cách chạy / biên dịch mã của bạn trong Linux nếu có thể.
Máy của tôi Thời gian sẽ được chạy trên máy 64 bit của tôi. Đây là bản cài đặt Ubuntu tiêu chuẩn với RAM 8GB, Bộ xử lý tám lõi AMD FX-8350 và Radeon HD 4250. Điều này cũng có nghĩa là tôi cần có khả năng chạy mã của bạn.
Câu trả lời hàng đầu
- Điểm 4 cho 2, 5, 21, 83, 361 của Christian Sievers. C ++
- Điểm 5 cho 2, 5, 21, 83, 372 bởi fəˈnɛtɪk. Javascript