Подсчитать количество сравнений при сравнении двух списков строк Python - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть домашнее задание, которое я не могу сделать правильно и не уверен, что не так с кодом.

Упражнение таково: с помощью простого поиска или грубой силы найдите, сколько сравнений мы делаем:

Мыесть 2 списка, которые содержат буквы (строки), и мы сравниваем их. Распечатайте, сколько сравнений.

Пример:

pattern = ABABC

text = ABBABACABCBAC

как я пытался:

 def search(text,pattern):
    text=list(text)
    pattern=list(pattern)
    n=len(text)
    m=len(pattern)
    co=1
    l=0
    k=0
    while k<=m:
        if text[l] == pattern[k]:
            co+=1
            l+=1
            k+=1
        else:
            co+=1
            l+=1
            k=0
     c=co
    return "Simple matching made " + str(c) +" 
comparisons"

Должно быть 16, потому что мы сравниваем по буквам и тому подобное 3 + 1 + 1 + 4 + 1 + 2 + 1 + 3

Мы получаем 3: A = A означает +1, B = B означает 1,
B не A, поэтому мы добавляем +1, но смещаемся на единицу в тексте.

1 Ответ

0 голосов
/ 26 февраля 2019

Я написал что-то, что делает то, что я думаю, что вы ищете, но я думаю, что вы пропустите термин в конце, если я не сделал это неправильно.pattern = 'ABABC' text = 'ABBABACABCBAC'

def search(text, pattern):
    slices = len(text) - len(pattern)
    for i in range(0, slices + 1):
        count = 0
        text_to_compare = text[i:i + len(pattern)]
        for j in range(len(pattern)):
            count += 1
            if pattern[j] == text_to_compare[j]:
                continue
            else:
                break
        print("{} -> {}".format(text_to_compare, count))

search(text, pattern)

Это выводит

ABBAB -> 3

BBABA -> 1

BABAC -> 1

ABACA -> 4

BACAB -> 1

ACABC -> 2

CABCB -> 1

ABCBA -> 3

BCBAC -> 1

Его можно адаптировать для общего счета, например:

def search(text, pattern):
    total_count = 0
    slices = len(text) - len(pattern)
    for i in range(0, slices + 1):
        count = 0
        text_to_compare = text[i:i + len(pattern)]
        for j in range(len(pattern)):
            count += 1
            total_count += 1
            if pattern[j] == text_to_compare[j]:
                continue
            else:
                break
        print("{} -> {}".format(text_to_compare, count))
    print("Total count: {}".format(total_count))

, который выдает то же, что и раньше, но также с:

Общее количество: 17

Это то, что вы ищете?Я могу объяснить, какие части вы не понимаете:)

...