Tôi có một câu hỏi nhỏ, cách nhanh nhất để quét các phần tử nhất định trong một mảng char chưa được ký hiệu LARGE và một vectơ chỉ chứa các phần tử char chưa ký là gì? Câu trả lời thẳng sẽ là tuyệt vời, nhưng câu trả lời chi tiết chuyên sâu sẽ là tuyệt vời. Tôi có ý gì bằng cách nhanh chóng? Về cơ bản, để tìm kiếm các ký tự nhất định trong vòng ít nhất một giây. Tôi biết rằng đó không phải là định nghĩa được giáo dục ...C++ Cách nhanh nhất để quét các phần tử nhất định trong mảng char chưa ký và một véc tơ chữ ký không dấu là gì?
Lưu ý: Mảng không được sắp xếp.
Tuyên bố chung:
unsigned char* Array = new unsigned char[ 50000 ];
std::vector< unsigned char > Vec(50000);
/*
* Fill Array & Vec with random bytes
*/
phép nói rằng, tôi muốn tìm kiếm những chữ 'a' trong Array, tôi sẽ chỉ đơn giản là viết vòng lặp này để tìm kiếm cho nó:
Lưu ý: quá trình tìm kiếm sẽ tìm kiếm nhiều hơn một phần tử. Chủ yếu, 256. Do đó, bạn có thể khai thác số ma thuật đó.
Đối với phương pháp lặp:
unsigned int Count = 0;
for (unsigned int Index = 0; Index != 50000; ++ Index)
if(Array[ Index ] == 'a') Count ++;
std :: count phương pháp:
unsigned int Count = std::count (Array, Array + 50000, 'a');
Có cách nào nhanh hơn để tìm kiếm các yếu tố nhất định trong mảng?
Một số IDEAS - Xin vui lòng không cho tôi một dấu hiệu cho điều này! Nó chỉ là một ý tưởng. Tôi muốn một số ý kiến.
Sorting
tốc độ sẽ được tốt hơn nếu chúng ta làm một bản sao của mảng và sắp xếp nó? Tại sao tạo một bản sao? Vâng, bởi vì chúng ta cần giữ nội dung gốc. Mục đích là để quét cơ bản và đếm sự xuất hiện của một nhân vật. Hãy nhớ rằng, vấn đề tốc độ. Điều đó có nghĩa, quá trình sao chép phải nhanh.
Answer: No and its not worth it!
Tại sao? Vâng, cho phép đọc:
@Kiril Kirov:
Phụ thuộc. Nếu bạn có kế hoạch tìm kiếm một đơn char - thì hoàn toàn không. Sao chép mảng là một hoạt động tốn kém. Sắp xếp nó - thậm chí còn đắt hơn.
Vâng, nếu bạn sẽ chỉ có một mảng và bạn dự định tìm kiếm, giả sử, 100 ký tự khác nhau, thì phương pháp này có thể cung cấp cho bạn hiệu suất tốt hơn. Bây giờ, điều này thực sự phụ thuộc vào cách sử dụng của bạn. Và không ai có thể cung cấp cho bạn câu trả lời hoàn toàn đúng cho trường hợp này. Bạn cần phải chạy nó và hồ sơ.
* Cuộn xuống bài viết cung cấp thông tin của @Kiril Krov để biết thêm.
Trả lời: Cho đến nay, không có một chất rắn hoặc một câu trả lời, bởi vì không có một phương pháp thực sự "nhanh" để đạt được mục tiêu này, đặc biệt là khi nó không sắp xếp. Tuy nhiên, chủ đề có thể là giải pháp khả thi. Nhưng, xem ra cho CPU của chúng tôi!Điều này được dựa trên câu trả lời được gửi của @ Andrea (cuộn xuống một chút để biết thêm thông tin) - Tôi hy vọng tôi đọc nó đúng.
Wow, tại sao lại bỏ phiếu ??? – CLearner
Điểm đầu tiên - một véc tơ của unsigned char là cho tất cả các mục đích thực tế giống hệt với một mảng unsigned char, vì vậy có thể sửa đổi câu hỏi của bạn. –
Bạn có thể nghĩ ra những cách nào? Mảng được xác định như thế nào? Có bao nhiêu kích thước? –