Không có một định nghĩa thống nhất nào về "thuật toán nhanh hơn" là gì. Không có một cơ quan quản lý nào quyết định liệu một thuật toán có nhanh hơn thuật toán khác hay không.
Để chỉ ra lý do tại sao, tôi muốn đưa ra hai kịch bản khác nhau thể hiện khái niệm mờ ám này.
Ví dụ đầu tiên là một thuật toán tìm kiếm một danh sách liên kết các dữ liệu không được sắp xếp. Nếu tôi có thể thực hiện thao tác tương tự với một mảng, tôi không có thay đổi nào về số đo hiệu suất Oh lớn. Cả hai tìm kiếm là O (n). Nếu tôi chỉ nhìn vào các giá trị Oh lớn, tôi có thể nói rằng tôi đã không cải thiện gì cả. Tuy nhiên, người ta biết rằng việc tra cứu mảng nhanh hơn so với việc đi theo danh sách được liên kết trong phần lớn các trường hợp, do đó người ta có thể quyết định rằng điều đó làm cho thuật toán "nhanh hơn", mặc dù Oh lớn không thay đổi.
Nếu tôi có thể sử dụng ví dụ truyền thống về lập trình robot để làm bánh sandwich PBJ, tôi có thể chỉ ra ý tôi là cách khác. Hãy xem xét điểm mà người ta đang mở lọ bơ đậu phộng.
Pick up the jar
Grab the lid
Unscrew the lid
Đấu với
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Grab the lid
Unscrew the lid
Ngay cả trong môi trường lý thuyết hàn lâm nhất mà tôi có thể nghĩ ra, bạn sẽ thấy rằng mọi người chấp nhận rằng thuật toán đầu tiên nhanh hơn thuật toán thứ hai, mặc dù kết quả ký hiệu Oh lớn là như nhau.
Ngược lại, chúng ta có thể xem xét một thuật toán để phá vỡ mã hóa RSA. Hiện tại, người ta nhận thấy rằng quá trình này có thể là O (2 ^ n), trong đó n là số bit. Hãy xem xét một thuật toán mới chạy nhanh hơn n ^ 100 Điều này có nghĩa là quy trình mới của tôi chạy trong O (2 ^ n / n ^ 100). Tuy nhiên, trong thế giới của mật mã học, việc tăng tốc đa thức cho một thuật toán theo cấp số nhân theo truyền thống không được coi là một tốc độ lý thuyết tăng tốc cả. Khi làm bằng chứng bảo mật, người ta cho rằng kẻ tấn công có thể phát hiện ra một trong những cách tăng tốc này và nó sẽ không có hiệu lực.
Vì vậy, trong một trường hợp, chúng ta có thể thay đổi O (n) thành O (n) và gọi nó nhanh hơn. Trong một trường hợp khác, chúng ta có thể thay đổi O (2 ^ n) thành O (2 ^ n / n ^ 100) và khẳng định không có sự tăng tốc có ý nghĩa nào cả. Đây là lý do tại sao tôi nói không có một định nghĩa thống nhất cho một "thuật toán nhanh hơn". Nó luôn luôn phụ thuộc vào ngữ cảnh.