Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kita Boleh Mengira Kejadian Substring Bertindih dengan Cekap dalam Python?

Bagaimanakah Kita Boleh Mengira Kejadian Substring Bertindih dengan Cekap dalam Python?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 11:27:16416semak imbas

How Can We Efficiently Count Overlapping Substring Occurrences in Python?

Mengira Kejadian Rentetan Bertindih Dengan Berkesan

Mengenal pasti bilangan kejadian subrentetan dalam rentetan boleh menjadi rumit, terutamanya apabila pertindihan dibenarkan. Perpustakaan seperti rentetan Python menyediakan kaedah terbina dalam seperti 'kira' untuk tujuan ini, tetapi mereka tidak menganggap kejadian bertindih.

Pengiraan Aksara Bertindih

Pertimbangkan pendekatan berikut :

def overlapping_count(string, substring):
    count = 0
    for i in range(len(string) - len(substring) + 1):
        if string[i:i+len(substring)] == substring:
            count += 1
    return count

Di sini, fungsi itu berulang melalui rentetan, memeriksa subrentetan panjang yang ditentukan dan menambah kiraan apabila perlawanan ditemui. Kaedah ini mudah tetapi boleh menjadi agak perlahan untuk rentetan yang besar.

Pengoptimuman Berpotensi

Atas sebab prestasi, adalah berbaloi untuk meneroka pendekatan berbeza yang melibatkan penggunaan keupayaan Cython:

import cython

@cython.boundscheck(False)
def faster_occurrences(string, substring):
    cdef int count = 0
    cdef int start = 0
    while True:
        start = string.find(substring, start) + 1
        if start > 0:
            count += 1
        else:
            return count

Dengan Cython, kami boleh memanfaatkan pengisytiharan jenis statik dan kompilasi Just-In-Time (JIT) untuk meningkatkan prestasi dengan melangkau pemeriksaan jenis dan pengoptimuman yang tidak perlu untuk kod Python. Fungsi yang dioptimumkan ini seharusnya jauh lebih pantas untuk set data yang lebih besar.

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Mengira Kejadian Substring Bertindih dengan Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn