Как объединить два списка, чтобы найти минимальный коэффициент повторения? - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть два списка, например

A = ["spin", "dab", "dab", "moonwalk", "clap", "moonwalk"]
B = ["dab", "dab", "spin", "clap", "clap", "moonwalk"]

После объединения двух списков у меня может быть такой список

remix=["dab", "spin", "dab", "spin", "dab", "clap", "dab", "moonwalk", "clap", "moonwalk", "clap", "moonwalk"]

Мой вопрос заключается в том, как объединить два списка так, чтобы смежное повторение элементов было минимальным (все элементы в A и B должны появиться в списке ремиксов). повторение что-то вроде этого

remix=["spin", "dab", "spin", "dab", "dab", "clap", "dab", "moonwalk", "clap", "moonwalk", "clap", "moonwalk"]

смежное повторение здесь 2 * dab

Другой пример:

remix=["spin", "dab", "spin", "dab", "dab", "clap", "clap","dab", "moonwalk", "moonwalk", "clap", "moonwalk"]

смежный повтор 2 * dab + 2 * хлопок

ниже вводные данные для этого вопроса

A = ["spin", "dab", "dab", "moonwalk", "clap", "moonwalk"]
B = ["dab", "dab", "spin", "clap", "clap", "moonwalk"]
factor={"spin":1,"dab":2,"moonwalk":3,"clap":4}

список вывода:

["dab", "spin", "dab", "spin", "dab", "clap", "dab", "moonwalk", "clap", "moonwalk", "clap", "moonwalk"]

Причина в том, что повторения нет, поэтому смежное повторение любого элемента равно 0. Опять же, цель состоит в том, чтобы найти список с минимальным соседним повторением, конечно, коэффициент мог бы быть равен 0, если бы мы могли найти список без повторений вообще

Я думал о динамическом программировании, но я понятия не имею, как заставить его работать. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 апреля 2019

Я не слишком уверен с вашим ожидаемым результатом.Вы имеете в виду что-то вроде этого?

import random
A = ["spin", "dab", "dab", "moonwalk", "clap", "moonwalk"]
B = ["dab", "dab", "spin", "clap", "clap", "moonwalk"]

AB = A + B
elem = AB
while elem != []:
    random.shuffle(AB)
    elem = []
    for i in range(len(AB)-1):
        if AB[i] == AB[i+1]:
            elem.append([AB[i],AB[i+1]])
    print (AB)
    print (elem)
    print ("Repetition factor: ")
    for e in elem:
        print(str(len(e)) + "*" + e[0])
    print ("\n")

Вывод:

['spin', 'moonwalk', 'dab', 'dab', 'spin', 'dab', 'moonwalk', 'moonwalk', 'clap', 'clap', 'dab', 'clap']
[['dab', 'dab'], ['moonwalk', 'moonwalk'], ['clap', 'clap']]
Repetition factor: 
2*dab
2*moonwalk
2*clap

['spin', 'dab', 'clap', 'dab', 'moonwalk', 'dab', 'dab', 'clap', 'moonwalk', 'clap', 'moonwalk', 'spin']
[['dab', 'dab']]
Repetition factor: 
2*dab

['moonwalk', 'dab', 'clap', 'moonwalk', 'clap', 'dab', 'spin', 'dab', 'moonwalk', 'clap', 'dab', 'spin']
[]
Repetition factor: 
...