- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang cố gắng giải quyết vấn đề Union-Find này
Kế thừa có xóa. Cho một tập hợp N số nguyên S={0,1,…,N−1} và một chuỗi các yêu cầu có dạng sau:
Loại bỏ x khỏi S Tìm phần tử kế tiếp của x: y nhỏ nhất trong S sao cho y ≥ x thiết kế kiểu dữ liệu sao cho tất cả các thao tác (trừ xây dựng) sẽ mất thời gian logarit hoặc tốt hơn.
Mặc dù tôi tìm thấy một số giải pháp và bài viết giải thích cách sử dụng Liên minh-Tìm
Điều này đã được thực hiện, nhưng tôi không thể tưởng tượng nó hoạt động như thế nào.
Ví dụ:Xóa(X)
có thể vượt quaLiên minh(X,X+1)
để hoàn thành, nhưng tôi không thể tưởng tượng nó hoạt động như thế nào khi xóa. và tìm kiếm Người kế nhiệm(X)
tương tự.
Bất kỳ trợ giúp/hướng dẫn hoặc giải thích chi tiết nào sẽ giúp ích rất nhiều.
câu trả lời hay nhất
Chúng ta có thể xây dựng cấu trúc dữ liệu tìm liên kết để thể hiện vấn đề này. Bất biến là gốc(x)
Lưu trữ nhỏ nhất trong S y
làm y >= x
.
Đầu tiên, chúng ta có thể đảm bảo rằng cấu trúc dữ liệu tra cứu kết hợp ban đầu trên các nút 1..N thỏa mãn bất biến: chúng ta chỉ cần đảm bảo rằng mỗi nút ban đầu Tôi
kho Tôi
.
Để mô phỏng x
loại bỏ, chúng tôi thực hiện hợp(x, x+1)
. Chúng ta phải đảm bảo rằng việc triển khai tìm liên kết sẽ duy trì các bất biến của chúng ta. nếu chúng ta muốn gốc(x)
Kết nối với gốc(x+1)
, điều đó tốt thôi, nhưng nếu chúng ta kết nối gốc(x+1)
đến gốc(x)
, thì chúng ta cần phải gốc(x+1)
Giá trị của được lưu trữ trong nút gốc(x)
.
Chúng ta cần phải cẩn thận để đảm bảo union
Chạy trong thời gian O(log n) được đảm bảo. Để làm điều này, chúng ta cần lưu trữ cho mỗi nút kích thước của cây có gốc tại nút đó. Đây là một cách thực hiện và một ví dụ đơn giản.
nút lớp:
def __init__(self, i):
tự.i = tôi
tự.size = 1
self.max = tôi
self.root = tự
gốc def (nút):
r = nút
trong khi r.root != r:
r = r.root
# thực hiện nén đường dẫn
trong khi node.root != nút:
nút, node.root = node.root, r
trả lại r
hợp def (n1, n2):
n1 = gốc(n1)
n2 = căn (n2)
nếu n1.size < n2.size:
n1, n2 = n2, n1
n2.root = n1
n1.size += n2.size
n1.max = max(n1.max, n2.max)
def Sfind(uf, i):
trả về root(uf[i]).max
def Sdelete(uf, i):
công đoàn(uf[i], uf[i+1])
N = 100
S = dict((i, Node(i)) cho i trong xrange(1, N))
Xóa(S, 10)
Xóa(S, 12)
Xóa(S, 11)
cho tôi trong [10, 12, 13, 20]:
in i, Sfind(S, i)
Đây là một ví dụ. Chúng ta bắt đầu với 5 nút và bước qua hợp (2, 3), hợp (4, 5) và hợp (3, 4) - tương ứng với việc xóa 2, rồi 4, rồi 3. Hãy lưu ý rằng mũi tên trong hình từ a đến b tương ứng với a.root = b. Khi tôi nói về "cây có gốc nút" ở trên, sẽ tự nhiên hơn khi nghĩ đến các mũi tên chỉ theo hướng ngược nhau.
Về thuật toán - Union-Find: Successor Deletion, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42860950/
Vì câu hỏi của tôi ở đây không thể được trả lời một cách tự tin nên tôi hỏi lại ở đây với hy vọng ai đó biết chắc: Có sự khác biệt nào (ngoài cú pháp) giữa một con trỏ tới một liên kết và một liên kết chứa các con trỏ tới các phần tử của nó không? Một ví dụ về hội được tạo ra trong này là
Trong ngôn ngữ C, có thể xác định một phần thân hợp nhất trong một phần thân hợp nhất khác không? Nếu không thì tại sao lại không thể? Hoặc nếu vậy, nó có thể được sử dụng ở đâu? Câu trả lời tốt nhất giả sử bạn muốn xác định: union myun { int x;
Trong C, có thể xác định một liên minh trong một liên minh khác không? Nếu không thì tại sao lại không thể? Hoặc nếu vậy, nó có thể được sử dụng ở đâu? Câu trả lời hay nhất Giả sử bạn muốn xác định: union myun { int x s;
Tôi đang đọc một số mã và tìm thấy một cái gì đó như thế này: typedef union { int int32; int time_t date;
Tôi đang học Lua và tôi thích sử dụng dấu hai chấm (:) cho các phương thức. Thật không may, nó không hoạt động ở mọi nơi. Hãy xem mã của tôi: set = {} local mt = {} function Set: new(m) local set = {} setmetatable()
Tôi đang gặp một số vấn đề về hiệu suất, tôi có truy vấn sau: CHỌN * TỪ Foo UNION CHỌN * TỪ Boo UNION CHỌN * TỪ Koo Tôi chắc chắn Koo sẽ không trả lại bất kỳ bản sao nào
Câu hỏi này đã có câu trả lời ở đây: Khởi tạo cấu trúc C++ (16 câu trả lời) Đã đóng vào tháng trước. Tôi đang cố gắng sử dụng một số cho các mục tiêu được nhúng
Sự khác biệt giữa UNION và UNION ALL là gì? Câu trả lời hay nhất UNION loại bỏ các bản ghi trùng lặp (tất cả các cột trong kết quả đều giống nhau), UNION ALL thì không. Hiệu suất sẽ bị ảnh hưởng khi sử dụng UNION thay vì UNION ALL,
Tôi muốn sử dụng toán tử hợp trên hai bảng. Tôi muốn tập kết quả loại bỏ các giá trị trùng lặp do liên kết tạo ra, nhưng không loại bỏ các giá trị trùng lặp tồn tại trước trong bảng. Hãy xem xét mã này... chọn b từ (giá trị (1), (2), (2
Tôi biết rằng UNION loại bỏ các bản sao nhưng nó thay đổi thứ tự kết quả ngay cả khi không có bản sao. Tôi có hai câu lệnh chọn và không có thứ tự câu lệnh nào ở bất kỳ đâu tôi muốn hợp nhất chúng hay không (tất cả), tức là CHỌN MỘT UNI
Về cơ bản, tôi có một biến struct foo { /* biểu thị thành viên tích cực của liên minh */ enum whichmembe
Tôi có một truy vấn lớn thực hiện UNION ALL trên nhiều bảng (mỗi bảng có hàng nghìn hàng) và sau đó xuất ra bảng tạm thời trước khi quay lại. Dạng cũ: SELECT * FROM (SELECT `a` AS `Human rea
Sự khác biệt giữa UNION và UNION ALL là gì? Câu trả lời hay nhất UNION loại bỏ các bản ghi trùng lặp (tất cả các cột trong kết quả đều giống nhau), UNION ALL thì không. Hiệu suất sẽ bị ảnh hưởng khi sử dụng UNION thay vì UNION ALL,
Nếu tôi có hai cấu trúc hàng hợp: struct A { A() {} ~A() {} union { vector vi;
Hãy xem xét đoạn mã sau mà tôi đã viết: #include #include union myAccess { uint16_t access16;
Tôi đang cố gắng tìm hiểu xem bạn nhận được gì từ việc dễ dàng sắp xếp các biến trong C99: Ngoại lệ đối với quy tắc đặt bí danh nghiêm ngặt trong C từ 6.5.2.3 Cấu trúc và liên kết
Tôi đang chọn một khóa ngoại cột từ nhiều bảng thông qua UNION hoặc UNION ALL. Khi sự trùng lặp không phải là vấn đề đáng lo ngại, thông thường nên sử dụng UNION ALL thay vì UNION để giải quyết các vấn đề về hiệu suất. Tuy nhiên, trong tập lệnh gọi PHP của tôi, vòng lặp
Trong C++, một liên minh có thể chứa các thành viên tĩnh, trong trường hợp là một lớp, thuộc về một lớp và do đó chung cho tất cả các đối tượng. liên U { dài l; tĩnh dài
Có ai có thể đề cập đến sự khác biệt giữa liên kết thông thường và ẩn danh (hoặc cấu trúc) không? Tôi vừa tìm thấy một điều: Bạn không thể xác định các hàm trong các liên kết ẩn danh. Câu trả lời hay nhất Bạn không cần toán tử dấu chấm "." để truy cập các phần tử hợp nhất ẩn danh. #bao gồm
Tôi có thể đang phức tạp hóa vấn đề này quá mức.. Tôi đang cố gắng tạo một hệ thống menu phân cấp có thể tái sử dụng khá nhiều trong C trên Arduino cho một ứng dụng nhúng. Tôi có các cấu trúc để biểu diễn các loại mục menu khác nhau, bao gồm các menu con đó và sự kết hợp của các mục menu này là
Tôi là một lập trình viên xuất sắc, rất giỏi!