Algoritmo para encontrar menos número de negócios entre as pessoas

Gautham Rajesh:

Eu estive pensando sobre esta questão por um tempo agora.

Vamos dizer que há uma lista sque contém livros que as pessoas estão vendendo. Eu tenho um livro no s, e eu quero trocar por um livro que está em s(algo que eu não tenho).

Cada pessoa neste cenário está vendendo um livro no s, e também quer um livro que está em s.

Existe um algoritmo para descobrir o menor número de comércios necessária entre as pessoas a obter o livro que eu quero (e dar o meu livro para as pessoas que querem isso)?

Por favor me diga se isso parece confuso (porque provavelmente é).

Obrigado por responder a pergunta!

EDIT: Lista spode crescer a qualquer momento.

btilly:

Eu transformar isso em um gráfico a seguir. Os livros são os nós do grafo. Você tem uma aresta direcionada de um livro de ao livro B, se alguém em S está oferecendo livro B e quer livro A. Você está procurando o caminho mais curto a partir do livro que você tem que o livro que você realmente quer.

O caminho mais curto pode ser descoberto por uma busca em largura. Você pode implementar um como segue:

todo = [starting_book]
path = {starting_book: None}
while len(todo) and target_book not in path:
    book = list.pop(0)
    for next_book in neighbors(book):
        if next_book not in path:
            path[next_book] = book
            todo.append(next_book)
if target_book in path:
    solution = [target_book]
    while solution[-1] != starting_book:
        solution.append(path[solution[-1]])
else:
    solution = None

Note, a solução que eu estou oferecendo aqui dá o conjunto de comércios livro acontecer, mas não as pessoas. Transformar um livro de volta o comércio em particular na pessoa para falar pode ser feito tanto por busca sou com uma tabela de pesquisa.

Isso também não é uma solução online - manter o controle dos caminhos mais curtos como as coisas são adicionados / removidos do sque vai ser um monte de trabalho.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=201160&siteId=1
Recomendado
Clasificación