Vào cuối ngày, một ký tự chữ và số có ít nhất 36 giá trị có thể. Nếu bạn bao gồm dấu câu, chữ thường, vv thì bạn có thể dễ dàng chuyển 72 giá trị có thể.
Số không va chạm cho phép bạn nhanh chóng so sánh các chuỗi nhất thiết sẽ tăng theo cấp số nhân với độ dài của chuỗi.
Vì vậy, bạn trước tiên phải quyết định chuỗi dài nhất bạn đang mong đợi để so sánh. Giả sử N có chiều dài ký tự và giả sử bạn CHỈ cần chữ hoa và các chữ số 0-9 thì bạn cần phải có một số nguyên đại diện có thể cao tới 36^N
Đối với chuỗi dài 25 trường tên) sau đó bạn sẽ cần một số nhị phân với 130 bit.
Nếu bạn soạn thành số 32 bit, bạn sẽ cần 4. Sau đó, bạn có thể so sánh từng số (bốn số nguyên so sánh sẽ không mất thời gian so với khi đi bộ chuỗi). Tôi sẽ giới thiệu một thư viện số lớn, nhưng đối với trường hợp đặc biệt này, tôi khá chắc chắn bạn có thể viết của riêng bạn và có được hiệu suất tốt hơn.
Nếu bạn muốn xử lý 72 giá trị có thể cho mỗi ký tự (chữ hoa, chữ thường, chữ số, dấu câu ...) và bạn cần 10 ký tự, thì bạn cần 62 bit - hai số nguyên 32 bit (hoặc 64 bit nếu bạn đang sử dụng hệ thống hỗ trợ tính toán 64 bit)
Nếu, bạn không thể hạn chế số trong chuỗi (ví dụ: có thể là bất kỳ 256 chữ cái/số/ký tự/v.v ...) không thể xác định kích thước của chuỗi, sau đó so sánh các chuỗi trực tiếp là cách duy nhất để đi, nhưng có một phím tắt.
Truyền con trỏ của chuỗi tới mảng số nguyên không dấu 32 bit và so sánh chuỗi 4 byte tại một thời điểm (hoặc 64 bit/8byte tại một thời điểm trên bộ xử lý 64 bit). Điều này có nghĩa là một chuỗi ký tự 100 chỉ yêu cầu 25 so sánh tối đa để tìm chuỗi nào lớn hơn.
Bạn có thể cần phải xác định lại bộ ký tự (và chuyển đổi chuỗi) để các ký tự có mức ưu tiên cao hơn được gán giá trị gần bằng 0 và giá trị ưu tiên thấp hơn gần 255 (hoặc ngược lại, tùy thuộc vào cách bạn đang so sánh chúng).
Chúc may mắn!
-Adam
Nếu chiều dài chuỗi cố định, va chạm là điều không thể tránh khỏi? bạn có thể giải thích dùm không? – Swamy