2011-12-29 42 views
6

Đây là câu hỏi rộng, nhưng muốn biết quan điểm của các chuyên gia. Tôi bắt gặp một tài liệu Suffix arrays – a contest approach, cũng tìm thấy một số nhận xét rằng người tham gia phải sẵn sàng với các cấu trúc dữ liệu đã có sẵn trong tay. bây giờ một ngày rất nhiều câu đố lập trình trực tuyến đang đến với thời gian bị ràng buộc. Vì vậy, tôi muốn biết các cấu trúc dữ liệu/thuật toán khác nên sẵn sàng với những gì.Cách tiếp cận cuộc thi lập trình

+0

Có thể phù hợp hơn với [codegolf.se]? – mac

Trả lời

1

Kiểm tra các featured articles @ TopCoder này. Họ rất tuyệt.

Khi bạn đang ở đó, tôi khuyên bạn nên tham gia vào các cuộc thi lập trình tại TopCoder. Bởi vì cách tốt nhất để cải thiện là thực hành & tiếp tục tham gia vào các cuộc thi như vậy.

Ngoài ra Project Euler cũng thực sự gây nghiện.

0

Ngoài ra, hãy xem cuốn sách Programming Challenges, đó là một tham khảo tuyệt vời về chủ đề - nó trình bày các chủ đề cần thiết để thành công trong cuộc thi lập trình, được hậu thuẫn bởi một thẩm phán online.

11

Tôi đã cạnh tranh được khoảng 10 năm nay và đã tự tạo một thư viện không quá tệ. Hầu hết các đối thủ cạnh tranh thực sự tốt có blog của họ ví dụ như các huyền thoại Petr Mitrichev và ở đó họ giải thích những ý tưởng họ nhận được trên một số vấn đề cạnh tranh. Đọc những điều này có thể giúp bạn - nếu bạn thấy một ý tưởng hay, hãy thực hiện nó và lưu trữ nó. Tôi thêm thuật toán vào thư viện của mình khi tôi thấy sự cố liên quan đến chúng. Bằng cách đó tôi có thể xác minh rằng việc triển khai của tôi là chính xác - tôi chỉ thêm một thuật toán nếu tôi đã vượt qua ít nhất một vấn đề với việc triển khai nó.

Dưới đây là một danh sách với một số các thuật toán tôi có:

  • Tôi có một thư viện geometrial khổng lồ với các lớp đại diện cho điểm, đường thẳng, đa giác, phân đoạn, vòng tròn và một số thao tác với họ (đối với ngã tư chẳng hạn, thân lồi của tập hợp các điểm vv)
  • Tarjan của algorithm cho các thành phần kết nối mạnh mẽ
  • Dinitz thuật toán dòng chảy
  • song phương phù hợp với thực hiện
  • Min chi phí lưu lượng thực hiện tối đa
  • Aho-Corasic chuỗi tìm kiếm thuật toán
  • Knuth-morris-pratt chuỗi tìm kiếm thuật toán
  • Rabin-Karp chuỗi tìm kiếm thuật toán
  • tuyến tính thời gian cây hậu tố sử dụng algorithm
  • nhanh lũy thừa ukonnen của
  • thực hiện Polynom
  • Triển khai số nguyên lớn
  • số Fractional thực hiện
  • lớp Matrix thực hiện
  • Thủ thừa
  • Eratosthenes Sieve
  • Segment Tree
  • Hungarian algorithm
  • 2-Sat thuật toán. Đối với điều này tôi sử dụng thuật toán Tarjan đã đề cập ở trên.

Bạn sẽ nhận thấy rằng một số thuật toán cơ bản nhất (như BFS, DFS, Dijkstra) không được đề cập ở trên và đó là vì tôi không triển khai chúng. Những thuật toán này không thể dễ dàng khái quát hóa theo cách mà bạn chỉ cần sao chép và dán chúng và mọi thứ sẽ hoạt động. Ngoài ra, tôi mất ít hơn 5 phút để viết chúng - tôi thường đưa vào thư viện của mình những thuật toán khó thực hiện hoặc dễ mắc lỗi khi triển khai chúng.

Các vấn đề liên quan