Não tenho familiaridade com linhas de código, mas com a ajuda de IA obtive esse resultado.
Quais cursos de linguagem de programação devo iniciar para uma melhor compreensão desses exercícios?
import heapq
Classe Produto
class Produto:
def init(self, nome, categoria, prob_conversao):
self.nome = nome
self.categoria = categoria
self.prob_conversao = prob_conversao # valor entre 0 e 1
def __repr__(self):
return f"{self.nome} ({self.categoria}) - {self.prob_conversao:.2f}"
# Necessário para uso na fila de prioridade (heap)
def __lt__(self, other):
return self.prob_conversao > other.prob_conversao
Classe A* para recomendação
class AStarRecommendation:
def init(self, produtos):
self.produtos = produtos
# Grafo completo: todos os produtos conectados
def get_vizinhos(self, produto):
return [p for p in self.produtos if p != produto]
# Custo: quanto menor, melhor (inverso da probabilidade)
def custo(self, atual, vizinho):
return 1 - vizinho.prob_conversao
# Heurística baseada na probabilidade de conversão
def heuristica(self, produto, objetivo):
return 1 - produto.prob_conversao
# Implementação do algoritmo A*
def a_star(self, inicio, objetivo):
fila = []
heapq.heappush(fila, (0, inicio))
veio_de = {}
custo_ate_agora = {inicio: 0}
while fila:
_, atual = heapq.heappop(fila)
if atual == objetivo:
break
for vizinho in self.get_vizinhos(atual):
novo_custo = custo_ate_agora[atual] + self.custo(atual, vizinho)
if vizinho not in custo_ate_agora or novo_custo < custo_ate_agora[vizinho]:
custo_ate_agora[vizinho] = novo_custo
prioridade = novo_custo + self.heuristica(vizinho, objetivo)
heapq.heappush(fila, (prioridade, vizinho))
veio_de[vizinho] = atual
return self.reconstruir_caminho(veio_de, inicio, objetivo)
# Reconstrução do caminho final
def reconstruir_caminho(self, veio_de, inicio, objetivo):
caminho = []
atual = objetivo
while atual != inicio:
caminho.append(atual)
atual = veio_de.get(atual)
if atual is None:
return [] # não há caminho
caminho.append(inicio)
caminho.reverse()
return caminho
Teste do sistema
if name == "main":
# Criando produtos
p1 = Produto("Notebook", "Eletrônicos", 0.70)
p2 = Produto("Mouse Gamer", "Eletrônicos", 0.60)
p3 = Produto("Teclado Mecânico", "Eletrônicos", 0.65)
p4 = Produto("Cadeira Gamer", "Móveis", 0.80)
p5 = Produto("Headset", "Eletrônicos", 0.75)
produtos = [p1, p2, p3, p4, p5]
# Inicializando o sistema
sistema = AStarRecommendation(produtos)
# Definindo início e objetivo
inicio = p1
objetivo = p4
# Executando o algoritmo A*
caminho = sistema.a_star(inicio, objetivo)
# Exibindo o resultado
print("Melhor caminho encontrado:\n")
for produto in caminho:
print(produto)