Use o botão abaixo para reportar erros ou dar sugestões.
Cálculo Numérico - Versão Scilab
Nesta seção, discutiremos um importante conceito em teoria de algoritmos, a complexidade, isto é, uma medida do custo ou eficiência do algoritmo.
Dados dois algoritmos diferentes para resolver o mesmo problema, como podemos escolher qual desses algoritmos é o melhor? Se pensarmos em termos de eficiência (ou custo computacional), queremos saber qual desses algoritmos consome menos recursos para realizar a mesma tarefa.
Em geral podemos responder esta pergunta de duas formas: em termos de tempo ou de espaço.
Quando tratamos de eficiência espacial, queremos saber quanta memória (em geral RAM) é utilizada pelo algoritmo para armazenar os dados, sejam eles matrizes, vetores ou escalares.
Quando tratamos de eficiência temporal, queremos saber quanto tempo um algoritmo demanda para realizar determinada tarefa. Vamos nos concentrar neste segundo conceito, que em geral é o mais difícil de tratar.
Naturalmente o tempo vai depender do tipo de computador utilizado. É razoável pensar que o tempo vai ser proporcional ao número de operações de ponto flutuante (flops) feitas pelo algoritmo (observe que o tempo total não depende apenas disso, mas também de outros fatores como memória, taxas de transferências de dados da memória para o cpu, redes,...). Entretanto vamos nos concentrar na contagem do número de operações (flops) para realizar determinada tarefa.
No passado (antes dos anos 80), os computadores demoravam mais tempo para realizar operações como multiplicação e divisão, se comparados à adição ou à subtração. Assim, em livros clássicos eram contados apenas o custo das operações e . Nos computadores atuais as quatro operações básicas demandam aproximadamente o mesmo tempo. Não obstante, como na maioria dos algoritmos de álgebra linear, o número de multiplicações e divisões é proporcional ao número somas e subtrações (pois a maioria dessas operações podem ser escritas como a combinações de produtos internos), é justificável dizer que o tempo de computação continua podendo ser estimado pelo número de multiplicações e divisões. Desta forma, na maior parte deste material, levaremos em conta somente multiplicações e divisões, a não ser que mencionado o contrário.
Teremos em mente que a ideia é estimar o custo quando lidamos com vetores e matrizes muito grande, isto é, o custo quando estas dimensões crescem infinitamente.
Solução. Seja e , temos que
| (4.56) |
usando multiplicações, ou seja, um custo computacional, , de
| (4.57) |
Solução. Sejam , temos que
| (4.58) |
São realizadas multiplicações (cada produto por ) e somas, ou seja, o custo total de operações é de
| (4.59) |
Solução. Sejam e , temos que
| (4.60) |
Para obter o primeiro elemento do vetor do lado direito, devemos multiplicar a primeira linha de pelo vetor coluna . Note que esse é exatamente o custo do produto vetor-vetor do exemplo anterior. Como o custo para cada elemento do vetor do lado direito é o mesmo e temos elementos, teremos que o custo para multiplicar matriz-vetor é1
| (4.62) |
À medida que , temos
| (4.63) |
Solução. Sejam temos que
| (4.64) |
onde o elemento é o produto da linha de pela coluna de ,
| (4.65) |
Note que este produto tem o custo do produto vetor-vetor, ou seja, . Como temos elementos em , o custo total para multiplicar duas matrizes é2
| (4.67) |
Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:36:32.