Khi tôi mã hóa trong động cơ, tôi thường chỉ quan tâm đến việc cố định n
: Tôi đã có một phân vùng spacial hạn chế số lượng đối tượng tiếp nhận update()
, physics()
và render()
đến khoảng những người trên màn hình và các vùng lân cận. Kích thước lô tối đa thường được xác định khá rõ trên mỗi trò chơi, mặc dù vậy, nó luôn lớn hơn một chút so với kế hoạch của bạn.
Trong trường hợp này, tôi không quan tâm nhiều đến big-O như tôi quan tâm đến hệ số nhân hệ số không đổi và các điều khoản bậc thấp hơn. Đối với một chức năng có thời gian chạy như a*n^2 + b*n + c
(đó là O(n^2)
), tôi thường quan tâm nhiều hơn đến việc giảm a
và có thể loại bỏ c
. Chi phí thiết lập hoặc chi phí c
có thể trở nên tương đối lớn so với nhỏ n
.
Tuy nhiên, điều này không có nghĩa là big-O (hay đặc biệt hơn là big-theta ) là một chỉ số mùi mã tuyệt vời. Xem một O(n^4)
nơi nào đó, hoặc tệ hơn là O(k^n)
thời gian hình học, và đó là thời gian để đảm bảo bạn đang xem xét các lựa chọn khác.
Tôi thường quan tâm nhiều hơn đến sự tối ưu của big-O và nhảy qua các vòng để tìm thuật toán với big-O thấp hơn khi tôi làm việc với các công cụ tạo dữ liệu. Mặc dù số lượng đối tượng trong một cấp độ / khu vực phát trực tuyến thường được xác định rõ, nhưng tổng số đối tượng / tài sản nghệ thuật / tệp cấu hình / vv trên toàn bộ trò chơi có thể không được. Đó cũng là một số lượng lớn hơn nhiều. Ngay cả khi chạy một dữ liệu song song, chúng tôi vẫn chờ theo thứ tự một phút (tôi biết, tiếng rên rỉ - dữ liệu tạo ra cho bảng điều khiển có thể mất hàng giờ - chúng tôi chủ yếu là các trò chơi cầm tay nhỏ) để trải qua một jam data-clean && jam data
chu kỳ.
Để đưa ra một ví dụ cụ thể: điều này thực sự vượt quá khả năng với thuật toán phát trực tuyến hình nền phát trực tiếp các ô xếp màu 8 x 8. Thật hữu ích khi chia sẻ bộ đệm phát trực tuyến giữa các "lớp" nền và chúng tôi có thể có tới 6 lớp trong một mức nhất định chia sẻ cùng một bộ đệm. Vấn đề là việc ước tính kích thước của bộ đệm cần thiết dựa trên các vị trí có thể có của cả 6 lớp - và nếu chúng là tốc độ cuộn / chiều cao / chiều cao của số nguyên tố, bạn sẽ nhanh chóng bắt đầu tìm kiếm toàn diện - bắt đầu tiếp cậnO(6^numTiles)
- trong danh mục "dài hơn vũ trụ sẽ ở xung quanh" trong nhiều trường hợp. May mắn thay, hầu hết các trường hợp chỉ là 2-3 lớp, nhưng ngay cả sau đó, chúng tôi đã chạy trên nửa giờ. Hiện tại, chúng tôi lấy mẫu một tập hợp con rất nhỏ của các khả năng này, tăng độ chi tiết cho đến khi một khoảng thời gian đã đặt (hoặc chúng tôi đã hoàn thành nhiệm vụ, điều này có thể xảy ra đối với các cấu hình hai lớp nhỏ). Chúng tôi tăng ước tính này lên một chút dựa trên số liệu thống kê trước về mức độ thường xuyên chúng tôi bị chứng minh là sai, và sau đó thêm một chút phần đệm thêm cho biện pháp tốt.
Một ví dụ thú vị khác: trên một trò chơi trên PC, một kỹ sư trưởng đã thử nghiệm một lúc với các danh sách bỏ qua . Chi phí bộ nhớ kết thúc gây ra nhiều hiệu ứng bộ đệm hơn, thêm một số nhân không liên tục cho toàn bộ sự việc - vì vậy chúng thực sự không phải là một lựa chọn tốt cho nhỏ n
. Nhưng đối với các danh sách được sắp xếp lớn hơn, nơi các tìm kiếm thường xuyên, chúng cung cấp một lợi ích.
. bộ dữ liệu.)