Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Metodo de submatriz #10

Closed
Sekva opened this issue Jan 16, 2019 · 6 comments
Closed

Metodo de submatriz #10

Sekva opened this issue Jan 16, 2019 · 6 comments
Assignees
Labels
enhancement New feature or request

Comments

@Sekva
Copy link
Owner

Sekva commented Jan 16, 2019

Tem 2 grupos de funções que fazem a mesma coisa, elimina uma linha e uma coluna de uma matriz.
Tem que decidir qual usar, e abstrair mais ainda.
No meu grupo de funções eu tinha feito uma chamada "pegar_submatriz", depois de decidirmos qual
grupo, deveriamos usar ela no calculo da determinte e da adjunta.

@Sekva Sekva added the enhancement New feature or request label Jan 16, 2019
@Sekva
Copy link
Owner Author

Sekva commented Jan 16, 2019

Determinante

@MBaltz
Copy link
Collaborator

MBaltz commented Jan 16, 2019

No meu caso, é necessário apenas a função de remoção das colunas, pois a remoção da linha é feita de forma implícita: calcula (x:xs) sendo x a linha removida.

Entre os nossos dois códigos, ambos fazem a mesma coisa.
No entanto, como o teu tem um comentário indicando necessidade de refatoração, poderíamos usar o meu. Já que no fim, dará a mesma coisa.

Minha implementação
removerColuna :: Int -> [[a]] -> [[a]]
removerColuna indice = map(removerIndice indice)
--
removerIndice :: Int -> [a] -> [a]
removerIndice 0 (x:xs) = xs
removerIndice n (x:xs) = x : removerIndice (n-1) xs
removerIndice _ [] = []

No entanto, tem que observar que a tua implementação remove a (n+1)ª coluna, a minha remove a n.

@mrjonio
Copy link
Collaborator

mrjonio commented Jan 16, 2019

Não entendi, é pra tirar qual?

@Sekva
Copy link
Owner Author

Sekva commented Jan 16, 2019

Nop, elas fazem exatamente a mesma coisa, erro de documentação meu, esqueci de dizer que as linhas são contadas do zero :)

-- Remove a (n+1)ª linha da matriz
remover_nesima_linha :: Int -> [a] -> [a]
remover_nesima_linha n matriz = do
    -- Pega os elementos até o nº excluido ele
    let pt1 = take n matriz
    -- Pega os elementos a partir do nº, excluindo ele
    let pt2 = snd (splitAt (n+1) matriz)
    -- Concatena tudo, ou seja, uma lista sem o nº elemento
    pt1 ++ pt2

Acho que o melhor seria usar tua implementação de remover coluna, e a minha de remover linha. Nesse caso não, mas se for reutilizar, tenho medo de estourar a pilha de recursão.

@Sekva
Copy link
Owner Author

Sekva commented Jan 16, 2019

Não entendi, é pra tirar qual?

Tamo vendo ainda

@MBaltz
Copy link
Collaborator

MBaltz commented Jan 16, 2019

Discutimos pessoalmente e decidimos quais funções iremos utilizar


A minha implementação está bem resumida, é uma forma mais compacta de fazer, no entanto, exige mais alocação na pilha.
A implementação de @Sekva está mais fácil de entender e utiliza menos espaço na pilha, no entanto, é mais estença

Decidimos utilizar a função removerColuna implementada @MBaltz e utilizar a função remover_nesima_linha implementada por @Sekva, sendo necessário fazer a substituição da função removerIndice por a remover_nesima_linha. Pois caso precisarmos utilizar o mesmo código futuramente para estruturas que exigem mais pilhas, não precisamos nos preocupar com o estouro da mesma.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants