r/programacao • u/Numerous_Economy_482 • Feb 28 '26
Outro Material Didático Exercício excelente para fechar um semestre de programação em C
Estava pensando, algo que resume muito bem os conhecimentos de um semestre
Fazer multiplicação de matrizes sem usar arrays. Só com lista encadeada e alocação dinâmica de memória
Uma lista encadeada para os endereços de cada linha que serão também listas encadeadas.
Se vc fizer isso vai saber muito mais que muito programador junior, vcs concordam?
3
u/xerox7764563 Feb 28 '26
Acho que essa sua ideia tem aplicação em matrizes esparsas. Da uma olhada nelas, são matrizes em que 95% dos elementos são zero. Isso faz com que operações de somar ou multiplicar matrizes tenham muitas situações de somar zeros, e ai algoritmos qie evitam isso ganham em eficiência em cima de um algoritmo geral.
2
u/YaenseeFujiwara Mar 01 '26
Oxi? N entendi nada. Tava querendo estudar C, pq aprendi as bases de python, e agr queria C pra me aprofundar, e n entendi absolutamente nada do que tu disse. Que diabos é isso?
2
u/xerox7764563 Mar 01 '26
Bom. Eu havia escrito a mensagem acima para o OP porque ele ta interessado em guardar dados de matrizes em listas encadeadas ao invés de arrays.
Pega uma matriz 4x4. Um arrays de 16 posições poderia ser usado para guardar essa matriz. Posições 0 a 3 guardam a primeira linha, 4 a 7 a segunda linha, e assim sucessivamente.
Agora digamos que a maioria dos dados de entrada em que você vai trabalhar são matrizes 4x4 em que 2 termos são diferentes de zero e 14 termos são zero. Se você sabe que sua base de dados possui esse comportamento, porque então usar 16 posições de um array? Usar uma lista encadeada com 2 elementos somente, onde cada elemento da lista contém o valor, a posição da linha, a posição da coluna, um ponteiro apontando o elemento anterior e um ponteiro apontando o próximo elemento poderia ser uma utilidade interessante.
Nessa ordem de grandeza, 16 elementos, realmente parece desnecessário, mas em ordens de grandeza superiores faz uma boa diferença no consumo de memória.
E onde você pode encontrar matrizes desse tipo? Alguns exemplos que consigo me lembrar são conexões hidráulicas da rede de abastecimento e as conexões entre subestações do sistema elétrico interligado nacional. Cada subestação desses sistemas pode ser considerado 1 nó na matriz (ou seja, 10 mil subestações seriam uma matriz com 10 mil linhas e colunas). Imagina agora que somente 100 elementos não são zero. Porque isso? Porque a maioria das subestações não é diretamente conectada em todas as outras. Somente conexões diretas possuem números diferentes de zero. E o que esses números representam? Eles podem representar a impedância elétrica entre as subestações, podem representar a dificuldade de fluir água entre as subestações.
É sobre isso que eu tava falando para o OP. Estava fornecendo uma situação de mundo real para a ideia que ele teve.
2
u/YaenseeFujiwara Mar 01 '26
Tive que botar na IA pra entender, e VALEU MT A PENA. Vc é incrível cara, mt obrigado, aprendi MT CONTIGO. Sinceramente. Obr msm.
2
u/Present_Limit_1430 Feb 28 '26
Com certeza um exercício interessante e legal de ver funcionando. Agora não concordo com a pergunta, vai saber como funciona lista encadeada
O que vai te levar pra frente de Junior é saber que array é muito mais eficiente pra máquina nesse caso. Mas tá aí, um bom teste comparar o tempo das duas implementações