Executando verificação de segurança...
0

Dúvida de um principiante: Conjuntos com Vetores ou com Hashmaps. Qual a finalidade ?

Estou estudando um curso de programação na internet e me deparei com o estudo de conjutos (sets). A linguagem que utilizamos é Python, e fiquei muito confuso na forma pela qual o curso implementa um conjunto.

O exemplo que ele usa é usando POO, mais ou menos o seguinte:

# Conjunto de Vetores:
set_de_vetores = [False, True, False, True]

# isso significa que no index 0: False, 1: True, 0: False, 1: True
# Aí depois o curso explica o por que não devemos usar esse exemplo, cita espaço na memória, distancia entre valores no set ... blablabla ... e apresenta outro tipo de conjuntos

# Conjunto de HashMaps (Dicts em Python):
set_de_hasmaps = {1: True, 3: True}

# Mas aí o curso deu a entender que essa implementação faria sentido, pq o valor da chave é um booleano que ocupa pouco espaço

Beleza.

Agora vamos entender qual é a minha dúvida...

Eu não achei que fez sentido nenhuma das duas formas e queria entender o por que não pode ser mais fácil usar a seguinte implementação

conjunto_x = [1, 3]

# Fim de Papo

Carregando publicação patrocinada...
1

O melhor lugar pra se buscar informações sobre python é na documentação dele (https://docs.python.org/pt-br/3/library/stdtypes.html?highlight=hash%20map#set-types-set-frozenset).

Set's e Map's (em python eles são do tipo hash) estão relacionados a estrutura de dados.
O Set é uma lista de elementos onde a ordem é importante e os elementos não podem repetir.
Já o Map é uma lista chave -> valor onde a chave não se repete, mas o valor pode se repetir, e a ordenação não definido pela ordem em que foram inserido e sim definida pelo algoritimo utilizado, que no caso do python utiliza arvore binária baseada no hash da chave.

Quanto aos exemplos eles estão fora de contexto, então não dá pra entender muito bem o que quer dizer esses comentarios.
Mas set_de_vetores na posição 0 temos False, na posição 1 temos True, na posição 2 temos False e na posição 3 temos True. E o tipo Boolean é um subtipo do int, ou seja, ocupa o mesmo espaço em memória que um int.
set_de_hashmaps é um dict com 2 elementos e chaves 1 e 3, e ambas tem o valor True, ou pode ter ocorrido um erro de digitação e a intenção era { True: 1, False: 3} onde as chaves são True e False, e os respectivos valores 1 e 3. Mas dado as caracteristicas do dict do python, para a mesma quantidade de elementos, um dict ocupa mais espaço na memória.

Se a sua dúvida for relacionada ao { True: 1, False: 3}, na verdade o dict não é limitado a chaves sempre do mesmo tipo e você pode ter um dict de mensagens pra um retornos de uma API, você poderia ter um dict assim: msgs = {True: 'Sucesso', False: 'Não atualizado', 404: 'Cadastro não encontrado', 'error': 'Erro desconhecido'} ai você poderia simplesmente pegar a mensagem usando msgs[result] onde result pode ser True, False, 404 ou error, sem ter que fazer um if pra cada um.

1
1

Ok, dado o exemplo incompleto, vamos lá.

O exercício quer que retorne True or False, se você fizer conjunto_x = [1, 3], ao pesquisar pelo conjunto_x[0] (primeiro índice), ele retornará 1 ao invés de False, que é o valor no índice em questão.

Agora pense que ao invés de ter um índice de 0 a 9 numa lista de 10 itens, você dá um apelido para esses índices, um exemplo:
dict_y = {"beterraba": True, "laranja": True}Neste exemplo beterraba é o índice, True é o valor dentro dele

Se você pesquisar por dict_y["abacaxi"] ou QUALQUER outra coisa vai dar False, pois não existe este índice/chave.


Por que o desempenho é diferente? O valor False ocupa espaço na memória. Imagine uma mesa como um espaço da memória, se você escrever em uma folha de papel "nada" e a colocar na mesa, em cima da mesa vai ter a folha de papel escrito "nada" ao invés de simplesmente não ter nada, entende? O fato de você falar que não vai responder algo em si já é uma resposta (decore e fixe isso, pois existe em todo lugar, é a mesma lógica que se aplica pra "Null" em Banco de Dados Relacionais ou a biblioteca do Python Pandas, é um valor existente que ocupa espaço na memória para falar que não existe nada ali)


O objetivo da questão é buscar índice x, y, z e ter um retorno específico de True ou False, mas os índices num Set automaticamente são de forma numérica e não dá pra pular, pra conseguir o índice 19 você PRECISA criar 20 itens, mesmo que alguns seja simplesmente pra dizer que não existe algo ali naquele espaço, já em Dict você declara apenas o que existe.

1

Não entendi nada. A ideia é saber quais índices são True?

Qual o contexto disso? Sem saber qual problema de fato está sendo resolvido, não dá pra saber o que faz mais sentido.


Nem vou entrar no mérito de não ter nada de POO neste exemplo, mas enfim...

0
1

Rapaz, eu li três vezes, e não entendi a explicação dada no curso nem a sua pergunta.

Eu realmente estou empenhado em entender. Você poderia esclarecer.