Tôi không thấy nó quan trọng ngoại trừ việc truyền đạt ý tưởng và tôi làm việc trong các lĩnh vực quan trọng về hiệu suất (raytracing, xử lý hình ảnh và lưới, hệ thống hạt, động cơ vật lý, v.v.) và đã phải nghĩ ra nhiều thuật toán và cấu trúc dữ liệu độc quyền khi làm việc trong R & D. Trong các lĩnh vực này, thường một số ít các cấu trúc dữ liệu và thuật toán rất hiệu quả có thể mang lại toàn bộ các sản phẩm tiên tiến mới trong khi các thuật toán của ngày hôm qua làm cho các sản phẩm hiện tại trở nên lỗi thời, vì vậy luôn có một mục tiêu là làm mọi thứ hiệu quả hơn. Như một lời cảnh báo, tôi chưa bao giờ xuất bản bất kỳ bài báo nào về các thuật toán mà tôi nghĩ ra. Họ đều là độc quyền. Nếu tôi đã làm, tôi cần sự trợ giúp của một nhà toán học để xây dựng các bằng chứng và vv.
Tuy nhiên, theo tôi, số lượng công việc tính toán trên mỗi lần lặp thường được quan tâm nhiều hơn so với khả năng mở rộng của thuật toán trừ khi thuật toán có tỷ lệ thực sự kém. Nếu ai đó nghĩ ra một kỹ thuật tiên tiến để raytracing, tôi quan tâm đến các kỹ thuật tính toán như cách họ thể hiện và truy cập dữ liệu hơn là độ phức tạp thuật toán vì khả năng mở rộng hợp lý đã được đưa ra trong kịch bản cạnh tranh và đổi mới này. Bạn không thể cạnh tranh với các thuật toán không mở rộng.
Tất nhiên nếu bạn so sánh độ phức tạp bậc hai với linearithmic, đó là một sự khác biệt rất lớn. Nhưng hầu hết mọi người trong lĩnh vực của tôi đều đủ năng lực để tránh áp dụng thuật toán phức tạp bậc hai trên một đầu vào sử thi. Vì vậy, khả năng mở rộng thường được ngụ ý sâu sắc và các câu hỏi thú vị và ý nghĩa hơn trở thành như: "Bạn đã sử dụng GPGPU? SIMD? Nó có chạy song song không? Làm thế nào bạn biểu diễn dữ liệu? Bạn đã sắp xếp lại nó cho các mẫu truy cập thân thiện với bộ đệm? Mất bao nhiêu bộ nhớ? Nó có thể xử lý mạnh mẽ trường hợp này không? Bạn có trì hoãn việc xử lý nhất định hoặc thực hiện tất cả trong một lần không? "
Ngay cả thuật toán tuyến tính cũng có thể vượt trội hơn thuật toán thời gian tuyến tính nếu trước đây truy cập bộ nhớ theo mẫu tối ưu hơn, ví dụ, hoặc phù hợp hơn cho đa luồng và / hoặc SIMD. Đôi khi, ngay cả một thuật toán tuyến tính cũng có thể vượt trội hơn thuật toán logarit vì những lý do này và thuật toán thời gian tuyến tính tự nhiên vượt trội hơn thuật toán logarit đối với các đầu vào thiếu niên.
Vì vậy, với tôi điều quan trọng hơn là một số người có thể gọi là "tối ưu hóa vi mô", như biểu diễn dữ liệu (bố cục bộ nhớ, mẫu truy cập với phân tách trường nóng / lạnh, v.v.), đa luồng, SIMD và đôi khi là GPGPU. Trong một lĩnh vực mà tất cả mọi người đều có đủ khả năng để sử dụng các thuật toán tiên tiến cho mọi thứ với các bài báo mới được xuất bản mọi lúc, lợi thế cạnh tranh của bạn trong việc đánh bại các thuật sĩ thuật toán không đến từ sự cải tiến về độ phức tạp thuật toán, trực tiếp hơn hiệu quả tính toán.
Lĩnh vực của tôi bị chi phối bởi các nhà toán học lỗi lạc nhưng không phải lúc nào cũng là những người biết chi phí tính toán cho những gì họ đang làm hoặc rất nhiều thủ thuật cấp thấp hơn để tăng tốc mã. Đó thường là lợi thế của tôi đối với họ trong việc đưa ra các thuật toán và cấu trúc dữ liệu nhanh hơn và chặt chẽ hơn mặc dù tôi kém tinh vi hơn rất nhiều. Tôi đang chơi những gì phần cứng thích, hướng tới bit và byte và làm cho mỗi lần lặp công việc rẻ hơn rất nhiều ngay cả khi tôi đang thực hiện một vài lần lặp công việc hơn thuật toán thực sự tinh vi - công việc trong trường hợp của tôi rẻ hơn rất nhiều. Mã tôi viết cũng có xu hướng đơn giản hơn rất nhiều. Nếu mọi người nghĩ rằng các phiên bản tối ưu hóa vi mô của các thuật toán và cấu trúc dữ liệu đơn giản là khó hiểu và duy trì,
Lấy ví dụ cơ bản, tôi đã đưa ra một cấu trúc lưới đơn giản, kết quả vượt trội so với cây KD tại công ty chúng tôi để phát hiện va chạm và loại bỏ điểm thừa. Lưới thô sơ ngu ngốc của tôi ít phức tạp hơn về mặt thuật toán và tôi ngu ngốc hơn về mặt toán học và thuật toán so với người thực hiện cây KD với cách tìm điểm trung bình mới lạ của mình, nhưng tôi chỉ điều chỉnh cách sử dụng và truy cập bộ nhớ của lưới và thế là đủ để vượt trội hơn một thứ gì đó tinh vi hơn nhiều.
Một khía cạnh khác mà tôi có cho phép tôi tồn tại trong một lĩnh vực bị chi phối bởi những người thông minh hơn tôi rất nhiều là tôi thực sự hiểu cách người dùng làm việc, vì tôi sử dụng phần mềm tôi phát triển theo cách tương tự. Điều đó cho tôi ý tưởng về các thuật toán thực sự phù hợp rất ngay lập tức với sở thích của người dùng. Như một ví dụ cơ bản ở đó, hầu hết mọi người đều cố gắng tăng tốc những thứ như phát hiện va chạm bằng cách sử dụng chỉ mục không gian. Tôi đã thực hiện một quan sát định hình nghề nghiệp đơn giản gần một vài thập kỷ trước cho các mô hình hữu cơ, ví dụ, nếu một nhân vật đặt tay lên mặt, một cấu trúc lập chỉ mục không gian sẽ muốn phải phân chia các nút và cập nhật đắt tiền nếu nhân vật đó rồi đưa tay ra khỏi mặt. Nếu, thay vào đó, bạn phân vùng dựa trên dữ liệu kết nối thay vì vị trí đỉnh, bạn có thể kết thúc với cấu trúc phân cấp ổn định, cập nhật rất nhanh và không bao giờ cần phải phân tách hoặc cân bằng lại cây (chỉ phải cập nhật các hộp giới hạn mỗi khung hình của hoạt hình) ... những thứ như thế này - thuật toán một đứa trẻ không có nền tảng toán học nặng nề có thể đưa ra nếu họ chỉ hiểu khái niệm cơ bản, nhưng những người đã lảng tránh các nhà toán học vì họ không nghĩ về mọi thứ theo cách gần với cách người dùng làm việc và nghĩ quá nhiều về các tính chất của hình học chứ không phải hình học đã được sử dụng phổ biến. Tôi rất hợp nhau bằng cách dựa nhiều hơn vào kiến thức tính toán chung và kiến thức cuối của người dùng hơn là thuật sĩ thuật toán. Vì vậy, dù sao, tôi thực sự thấy điều quan trọng là tập trung vào độ phức tạp thuật toán.