Tôi có một mảng chứa tên các mục. Tôi muốn cung cấp cho người dùng tùy chọn tạo mục mà không chỉ định tên của họ, vì vậy chương trình của tôi sẽ phải cung cấp tên mặc định duy nhất, như "Mục 1".Thuật toán hiệu quả để tìm tên có sẵn đầu tiên
Thách thức là tên phải là duy nhất vì vậy tôi phải kiểm tra tất cả các mảng cho tên mặc định đó, và nếu có một mục có cùng tên tôi phải đổi tên thành "Mục 2" và cho đến khi tôi tìm thấy một tên có sẵn.
Các giải pháp hiển nhiên sẽ là một cái gì đó như thế:
String name = "Item ";
for (int i = 0; !isAvailable(name + i) ; i++);
Vấn đề của tôi với thuật toán đó là nó chạy ở O (N^2).
Tôi tự hỏi nếu có một thuật toán được biết đến (hoặc mới) hiệu quả hơn để giải quyết trường hợp này.
Nói cách khác, câu hỏi của tôi là: Có bất kỳ thuật toán nào tìm thấy số lớn hơn 0 không có liều KHÔNG tồn tại trong một mảng nhất định và chạy ít hơn N^2 không?
Tên có phải là duy nhất không, hoặc nó có phải là chuỗi đầu tiên có sẵn trong chuỗi "Mục 1", "Mục 2", v.v ... không? Bạn có thể giảm đáng kể thời gian chạy dự kiến bằng cách chọn một tên mới một cách ngẫu nhiên ("Item xF3g7a"). Bạn cũng có thể cải thiện trên một mảng cho cấu trúc dữ liệu: nếu thứ tự không quan trọng không sử dụng một mảng, và nếu nó quan trọng có lẽ giữ một chỉ số thứ cấp của tên cũng như mảng. –
+1 câu hỏi về Ace! –