Tôi có thể sử dụng các thư viện Python trong lập trình cạnh tranh không?

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

Tôi có thể sử dụng thư viện Python trong lập trình cạnh tranh không?

Python là một trong những ngôn ngữ ưa thích của các lập trình viên cho hầu hết các thử thách lập trình cạnh tranh . Hầu hết các vấn đề được tính toán dễ dàng trong khung thời gian hợp lý bằng python.

Chúng tôi có thể sử dụng Python trên Codeforces không?

Python là một ngôn ngữ lập trình tuyệt vời. đơn giản, biểu cảm, cô đọng. Trong Codeforces, Python thường là lựa chọn tốt nhất cho các vấn đề của Div 2 A và B .

Chủ Đề