Xin chào, có lập trình viên. Tôi khá chắc rằng bạn đã quen thuộc với Lập trình cạnh tranh là gì. Nhưng có một số điều quan trọng người ta cần ghi nhớ khi viết mã trong python. Những điều nhỏ nhặt này có thể tạo ra sự khác biệt lớn trong mã của bạn
Lập trình cạnh tranh trong Python
Hãy lần lượt nghiên cứu một vài trong số chúng
1. Sử dụng máy phát điện
Việc sử dụng Trình tạo có thể giúp giảm cả sự phức tạp về không gian và thời gian và tốt hơn so với việc sử dụng các chức năng. Một minh họa về chức năng tạo được hiển thị bên dưới
Nó cũng hữu ích trong việc trả về nhiều giá trị lần lượt cùng một lúc
def FirstGen[]: yield 1 yield 2 yield 3 for i in FirstGen[]: print[i,end=" "]
2. Sử dụng chức năng tích hợp
Sử dụng các chức năng và thư viện tích hợp là cách tiếp cận tốt hơn so với cách tiếp cận thông thường. Chúng ta hãy xem xét một chương trình đơn giản dưới đây để có một danh sách mới chứa bình phương các phần tử của danh sách đầu tiên
Để minh họa sự khác biệt tốt hơn, chúng tôi sẽ tính toán thời gian thực hiện của các chương trình với sự trợ giúp của mô-đun thời gian
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = [] for i in l1: l2.append[get_square[i]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]1
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = [] for i in l1: l2.append[get_square[i]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]
Cách tiếp cận trên cho thấy đầu ra chính xác trong 12 giây, chắc chắn là đủ tốt
Bây giờ, hãy thử chương trình tương tự bằng cách sử dụng hàm có sẵn,
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = [] for i in l1: l2.append[get_square[i]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]3 và áp dụng trực tiếp hàm được khai báo vào danh sách
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = list[map[get_square,l1]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]
Ở đây, chúng tôi thấy rằng thời gian của cùng một danh sách là 10 giây, đây có vẻ là một sự khác biệt rất nhỏ nhưng đối với dữ liệu thậm chí còn lớn hơn, sự khác biệt này có thể có xu hướng lớn hơn
3. Sử dụng itertools
Các itertools mô-đun có thể thực sự hữu ích để giải quyết một số vấn đề phức tạp. Chẳng hạn, hãy xem chương trình dưới đây để tìm tất cả các hoán vị của một danh sách
import itertools x = list[itertools.permutations[[1,2,3]]] print[x]
Điều tương tự cũng có thể được thực hiện bằng cách tạo logic và chức năng của riêng bạn nhưng điều đó sẽ quá phức tạp và sẽ có độ phức tạp về thời gian tồi tệ hơn
4. Sử dụng chức năng bản đồ
Bất cứ khi nào chúng ta được yêu cầu lấy đầu vào của tất cả các phần tử của một mảng số nguyên trong một dòng duy nhất được phân tách bằng khoảng trắng, thì hàm map là cách tốt nhất để đạt được điều tương tự
l1 = list[map[int,input["Enter all the elements: "].split[]]] print[l1]
Việc sử dụng hàm
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = [] for i in l1: l2.append[get_square[i]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]3 giúp đơn giản hóa sự phức tạp của việc xử lý nhiều giá trị được nhập trong một dòng
5. nối chuỗi
Để nối nhiều chuỗi lại với nhau, chúng ta có thể sử dụng hai cách tiếp cận. Thêm chuỗi vào chuỗi hoặc sử dụng chức năng nối
Nên sử dụng hàm
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = [] for i in l1: l2.append[get_square[i]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]2 vì nó thực hiện toàn bộ quá trình nối trong một dòng và giảm độ phức tạp nếu không có chuỗi nào lớn
Hãy xem cách tiếp cận đầu tiên. Sử dụng thao tác cộng trên chuỗi. Chương trình đưa ra dưới đây kết thúc với thời gian thực hiện là 13 giây
________số 8
Trong khi đó, cách tiếp cận thứ hai. Việc sử dụng thao tác nối mang lại độ phức tạp về thời gian chỉ là
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = [] for i in l1: l2.append[get_square[i]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]4 giây, điều này rõ ràng là ít hơn
import time start_time = time.time[] def get_square[x]: return x**2 l1 = [i for i in range[100000]] l2 = [] for i in l1: l2.append[get_square[i]] print[len[l2]] print["Time taken by the code: %s seconds."% [time.time[] - start_time]]0
Phần kết luận
Xin chúc mừng. Hôm nay bạn đã học được một số điều rất cơ bản nhưng quan trọng cần ghi nhớ khi lập trình cạnh tranh bằng ngôn ngữ lập trình python
Các thủ thuật chắc chắn có thể giúp bạn tăng hiệu quả và độ chính xác của các giải pháp của chúng tôi lên rất nhiều