- 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ình hình là thế này:
Tôi có hàng triệu (có thể là hàng tỷ) chuỗi mà tôi đang cố phân tích cú pháp và đưa vào cấu trúc được sắp xếp, giả sử tôi có 5.000.000 chuỗi. Tôi đang cố gắng viết một chương trình nhanh có thể đặt tất cả các chuỗi này từ một vectơ chưa được sắp xếp vào cấu trúc dữ liệu có thứ tự cũng có thể được tìm kiếm nhanh chóng cho các cấu trúc, do đó suy luận về cây AVL (cuối cùng tôi dự định sử dụng ha az cho bảng băm để tra cứu nhanh hơn, nhưng điều đó sẽ đến sau). Đầu tiên tôi đặt tất cả các chuỗi vào một vectơ nhưng chúng đều lộn xộn, không được sắp xếp và có độ dài khác nhau. Tôi không muốn bất kỳ chuỗi trùng lặp nào xuất hiện trong cây của mình, vì vậy nếu chương trình tìm thấy các chuỗi "hello" và "hello", nó sẽ chỉ có một mục nhập AVL và một giá trị giữ số nguyên sẽ được tăng lên để biểu thị sự xuất hiện của chuỗi đó Tính thường xuyên.
Vì vậy, câu hỏi của tôi là: trước tiên có thể sắp xếp vectơ nhanh hơn (sử dụng thứ gì đó như sắp xếp nhanh đa luồng hoặc sắp xếp nhanh khác) rồi đưa nó vào cây AVL, sau khi tất cả các từ được sắp xếp cùng với các từ khác? hoặc sẽ nhanh hơn nếu chỉ đặt tất cả dữ liệu trong vectơ chưa được sắp xếp vào cây AVL và tiếp tục kiểm tra cây AVL để xem liệu một từ đã tồn tại chưa rồi tăng nó lên.
Vì vậy có hai tình huống để mô tả nó theo thứ tự thực hiện:
TRƯỜNG HỢP A:
> Nhận chuỗi đầu vào/phân tích
> Đặt chuỗi vào vector (chưa sắp xếp)
> Đưa vector vào mảng hoặc danh sách liên kết
> Sắp xếp nhanh mảng/danh sách đó
> Nhập mảng đã sắp xếp đó vào Cây AVL
TRƯỜNG HỢP B:
> Nhận chuỗi đầu vào/phân tích
> Đặt chuỗi vào vector (chưa sắp xếp)
> Chèn dữ liệu vector vào cây AVL
> Trong quá trình chèn, kiểm tra xem có từ nào trùng lặp không, nếu có thì tăng bộ đếm
Trường hợp nào nhanh hơn? ?
--biên tập-- Vì vậy, sau khi nghe một số nhận xét, sẽ là một ý tưởng tồi nếu chèn một mảng đã sắp xếp vào cây AVL ngay từ đầu, với số lượng phép quay sẽ hợp lý. Có vẻ như chèn trực tiếp vào cây AVL có thể là một ý tưởng hay, nhưng cách tốt nhất để chèn hiệu quả khi một từ đã ở đâu đó trong cây là gì? Làm thế nào tôi có thể chắc chắn rằng tôi tìm thấy nó? Đây có phải là nơi việc sắp xếp của tôi có thể phát huy tác dụng không?
câu trả lời hay nhất
Hãy suy nghĩ về cách cân bằng cây AVL. Nó hoạt động tốt nhất nếu "giá trị trung bình" đến trước. Với đầu vào được sắp xếp, bạn sẽ cần phải cân bằng lại rất nhiều, vì vậy việc sắp xếp trước có thể gây hại nhiều hơn là có lợi.
Ví dụ: hãy xem xét cây AVL sau chứa các giá trị 1-6:
4
/ \
2 5
/ \ \
1 3 6
Nếu thứ tự đầu vào là 4, 2, 5, 1, 3, 6
, bạn không bao giờ cần một cây cân bằng. Ngược lại, đối với đầu vào được sắp xếp 1, 2, 3, 4, 5, 6
, bạn sẽ cần nhiều thao tác tái cân bằng:
1 +3 2 +4 2 +5 2 +6 3
\ ---> / \ ---> / \ ---> / \ ---> / \
2 1 3 1 3 1 4 2 5
\ / \ / / \
4 3 5 1 4 6
gia hạn Câu hỏi ban đầu là liệu việc sắp xếp dữ liệu trước khi chèn vào cây AVL có cải thiện hiệu suất hay không. Bây giờ OP đã chỉnh sửa câu hỏi để chuyển sang câu hỏi cụ thể của mình.
nhưng cách tốt nhất để chèn một cách hiệu quả khi một từ đã có trong cây ở đâu đó? Làm cách nào để đảm bảo rằng tôi tìm thấy nó?
Mục đích chung của cây AVL là tìm kiếm dữ liệu một cách hiệu quả, nên tôi không hiểu vấn đề. Rõ ràng là làm thế nào để duyệt qua cây tìm kiếm nhị phân để tìm một giá trị. Tại sao bạn cần sắp xếp dữ liệu cho việc này?
Lưu ý rằng cây tìm kiếm nhị phân là một nơi lưu trữ tốtchìa khóacấu trúc dữ liệu nhưng nó cũng có thể quản lý dữ liệu tùy ý liên quan đến các khóa này. Trong trường hợp của bạn, bạn muốn lưu trữ số lượng cùng với khóa. Vì vậy, bạn không cần cây từ/chuỗi mà là cây các cặp (chuỗi, số nguyên) biểu thị các từ và số đếm của chúng. Để sắp xếp cây, chỉ cần xem xét các khóa chuỗi, tức là các từ.
Đối với mỗi từ được chèn vào, hãy tra cứu nó trong cây. Nếu nó đã tồn tại, hãy cập nhật số từ. Nếu không, hãy chèn một cặp mới có số từ là 1.
Một lưu ý cuối cùng: thư viện chuẩn C++ đi kèm với một bản đồ
Loại, thường (luôn luôn?) được triển khai bằng cây cân bằng (AVL hoặc đỏ-đen). Chỉ cần sử dụng cách triển khai này sẽ giúp bạn tiết kiệm rất nhiều công sức và sửa lỗi. Kể từ C++ 11, cũng có một không có thứ tự_map
, thường (luôn luôn?) được triển khai bằng bảng băm.
Về c++ - Cái nào nhanh hơn, sắp xếp một vectơ rồi đặt nó vào cây AVL hoặc gõ trực tiếp? , 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/27100192/
Tôi đang cố gắng thêm thư viện loopj .jar vào dự án của mình trong Eclipse v3.7.2 Trước tiên, tôi đã thêm .jar vào thư mục "lib", nhấp chuột phải vào nó và chọn "Thêm vào đường dẫn xây dựng". Nó biên dịch tốt nhưng khi thực thi tôi gặp lỗi
Câu hỏi này đã có câu trả lời ở đây: đã đóng cửa 10 năm trước. Có thể trùng lặp: Truyền mảng hai chiều qua bảng int con trỏ [20
Biểu đồ của tôi trong Grafana tự động cập nhật vài giây một lần. Điểm dữ liệu cuối cùng bên phải sẽ giảm xuống trong giây lát khi có dữ liệu. Cuối cùng, giá trị chính xác được hiển thị, nhưng trên một số bản cập nhật, giá trị này thấp hơn. Điều này có bình thường không? Nó có thể được sửa chữa? Câu trả lời hay nhất có thể là sẽ có
Tôi không hiểu tại sao tôi lại nhận được "IllegalStateException" khét tiếng với đoạn mã sau: private void mergeQueryStrings(String url, Map parame
Xin chào, tôi đang liên kết một ứng dụng Android thử nghiệm với cơ sở dữ liệu MySQL thông qua JSON echo trong tệp .php. Tôi đã có thể điền toàn bộ dữ liệu vào ArrayList, nhưng bây giờ tôi muốn tách dữ liệu thành các biến nhưng tôi thực sự không thể tìm thấy
Tôi chỉ muốn ghi các giá trị của các thành viên dữ liệu của đối tượng vào file nên ở đây tôi không thể sử dụng serialization vì nó sẽ ghi rất nhiều thông tin khác mà tôi không cần. Tôi đã đạt được điều này theo hai cách. Một cái sử dụng bộ đệm byte còn cái kia thì không. Không sử dụng ByteBuffer: Chương
Có thể là một câu hỏi đơn giản nhưng tôi dường như không thể tìm thấy câu trả lời. Tôi đang tạo động một trang nơi tôi có thể chia sẻ liên kết Twitter. var twitter = document.createElement('a');
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
Cố gắng lấy giá trị tôi đặt cho $_SESSION ở cuối dưới dạng user_id trong truy vấn, không phải $username. Tôi dường như không thể sửa đổi truy vấn. Tôi chắc chắn rằng điều này rất đơn giản đối với một số chuyên gia ở đây. if(isset($_POS
Ai có thể giúp tôi không, tôi có truy vấn mysql, tôi đã thử nó trong phpmyadmin: select items.name, items.category, items.supplier_id, i
Tôi đang cố gắng push_back() một biểu tượng std::vector. Tôi liên tục gặp lỗi: ký tự quá lớn để bao quanh ký tự chữ t.
Tôi có một hình ảnh nén được lưu trữ trong char * và tôi muốn đặt nó trở lại AVPacket để tôi có thể đặt nó vào bộ giải mã ffmpeg. Ai đó có thể chỉ ra cách thực hiện việc này? Bất kỳ ví dụ hoặc hướng dẫn nào sẽ được đánh giá cao. Cảm ơn trước vì câu trả lời hay nhất tôi muốn
mật khẩu = str() while mật khẩu != "changeme": mật khẩu = input("Mật khẩu:") print("Bạn sẽ
Vì vậy, tôi có một Bản đồ với một số giá trị được truyền vào một phương thức: public String doThis(Map context){..... } Tôi đang cố gắng chèn một thuộc tính bổ sung String abc vào bản đồ này
Tôi đang gặp phải một số vấn đề mà tôi không thể hiểu được... Tôi đang viết một ứng dụng Swing Java có JList chấp nhận kéo và thả. Tôi muốn thay đổi con trỏ khi kéo tệp hoặc thư mục từ hệ thống của tôi vào ứng dụng Java. Tự mình trả lời hay nhất
Tôi đang cố gắng xác định một số nguyên tắc về cách viết thông báo ngoại lệ. Ví dụ: giả sử một hàm giả định phải nhận số byte không đổi (dưới dạng đối tượng byte), hãy sử dụng [1, 2, 3]. Sau đây là tất cả các tình huống ngoại lệ có thể xảy ra
Gửi tới dịch vụ web bằng JSONObject Khi chúng ta đặt double(số nguyên) về 0, điểm sẽ bị xóa mã double d = 123.00; JSONObject json = new JSONObje;
Trong WPF, làm cách nào để đặt DataGrid bên trong ComboBox để hiển thị nhiều cột? Một cái gì đó như sau dường như không làm gì cả:
Tôi đang cố gắng sử dụng QStandardItem tùy chỉnh để kéo và thả giữa hai QListView. Tôi không thể tìm thấy thông tin tôi cần trực tuyến ngoại trừ tài liệu này có phần hữu ích nhưng hiện tại tôi đang bị mắc kẹt. từ một QLi
Làm cách nào để đưa PDF vào NSData? Tôi đã tìm thấy vị trí của tệp PDF dưới dạng một chuỗi trong thư mục tài liệu của ứng dụng. Khi tôi cố gắng gửi qua email, tôi thấy tệp PDF trong nội dung email (thay vì nhìn thấy biểu tượng tệp đính kèm. Tôi không biết điều này có bình thường không)
Tôi là một lập trình viên xuất sắc, rất giỏi!