Sử dụng toán tử XOR
TIL
723
White

kiennt viết ngày 10/10/2016

Toán tử XOR có tính chất:

  • A XOR A = 0
  • 0 XOR A = A

Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về run-time, và với O(1) về space.

Bài toán:

Cho một mảng có N số, với N là số lẻ. Mỗi phần tử trong mảng đều có 1 phần tử tương ứng với giá trị bằng chính nó, chỉ trừ đúng 1 phần tử duy nhất không có tính chất này.
Viết chương trình tìm phần tử đó

def solution(A):
    result = 0
    for item in A:
        result = result ^ item
    return result

Cách cài đặt thông thường, sử dụng hash table, để đếm số lượng các phần tử, vẫn có độ phức tạp O(N)

def solution(A):
    counter = {}
    for elem in A:
        if elem not in counter:
           counter[elem] = 0
        counter[elem] += 1
    for key, value in counter.iteritems():
        if value % 2 == 1:
            return key

Mở rộng bài toán

Bài toán sử dụng XOR có thể bắt nguồn từ bài toán sau

Cho một số K và một mảng có N số, với N là số lẻ. Mỗi phần tử X trong mảng đều có 1 phần tử tương ứng với giá trị bằng K - X, chỉ trừ đúng 1 phần tử duy nhất không có tính chất này.
Viết chương trình tìm phần tử đó

Tư tưởng thì cũng làm như bài toán trên, ta cần tìm một phép toán để khử đi giá trị

kiennt 09-10-2016

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

kiennt

30 bài viết.
307 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
96 18
Mọi chuyện bắt đầu từ nắm 2013 trong quá trình xây dựng chức năng login với Facebook, tôi đã tìm ra một cách để tấn công vào các hệ thống login với...
kiennt viết 3 năm trước
96 18
White
68 5
Trong tuần vừa rồi, mình có đọc chương 7 cuốn sách (Link). Bài viết này nhằm mục đích giúp mình tổng hợp lại những kiến thức đã học được về chương ...
kiennt viết 1 năm trước
68 5
White
30 5
1. Đặt vấn đề Một trong các vấn đề của một hệ thống backend là bài toán điều phối request tới các nguồn dữ liệu. Xét bài toán với một hệ thống bl...
kiennt viết gần 3 năm trước
30 5
Bài viết liên quan
White
0 0
worker và prefork, vốn là 2 MultiProcessing Modules (MPMs) phổ biến trên Linux. Ngoài ra hiện nay còn có event (cũng Linux), mpm_winnt (cho Windows...
ajino2k viết 8 giờ trước
0 0
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 năm trước
0 4
White
2 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết 6 tháng trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
30 bài viết.
307 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!