Quando un codice è considerato stretto e in che modo aumenta l'efficienza del codice?

3

Ho letto molte volte che l'ordinamento di inserimento ha un codice limitato e quindi il fattore costante nascosto nella sua complessità asintotica è minore. Ho appena letto ieri che l'ordinamento rapido ha un codice ristretto proprio come l'ordinamento degli inserimenti, quindi ha anche un fattore costante nascosto più piccolo. È uno dei motivi per cui è considerato il migliore tra gli algoritmi di ordinamento O(n lg n) .

Non capisco cosa significa quando qualcuno dice che il codice di questo algoritmo è stretto. Che cosa significa esattamente e in che modo porta al miglioramento dell'efficienza dell'algoritmo (il fattore costante nascosto più piccolo nella complessità asintotica)?

    
posta Aseem Bansal 30.08.2013 - 19:18
fonte

2 risposte

10

Quando a un algoritmo viene assegnata una designazione Big O come O(n log n) , viene indicato come verrà ridimensionato l'algoritmo; cioè, quanto bene si produrrà aumentando la dimensione di n a un numero elevato.

Diciamo che ho un algoritmo che è O(n) su un set di dati. Ciò significa che c'è un ciclo nel codice da qualche parte che esegue n volte, una volta per ogni elemento nel set di dati. Quanto ci vorrà per eseguire? Supponendo che ogni iterazione del ciclo richieda circa lo stesso tempo, ci vorrà

m * n

Dove m è la quantità di tempo necessaria per elaborare un elemento del set di dati.

È chiaro che ci vorrà più tempo per elaborare il set di dati se m è più alto. Big O non si rivolge a quel momento; afferma solo che (in questo caso), l'algoritmo verrà scalato linearmente in funzione della dimensione del set di dati.

Quindi un "ciclo stretto" è semplicemente uno che ha un m più piccolo.

Questo è il "fattore costante nascosto" di cui parla il libro. Ridurre m migliora l'efficienza perché qualsiasi miglioramento in m sarà moltiplicato per l'intero set di dati.

    
risposta data 30.08.2013 - 19:40
fonte
4

Il codice tight è un codice sorgente molto efficiente in quanto svolge un'attività con un minimo di risorse e nessun codice superfluo.

Voglio visualizzare la somma di 1 e 3 in C #. Il programma 1 svolge questa attività con un codice limitato. Il programma 2 non lo è.

Programma 1:

class Program
{
    static void Main(string[] args)
    {
        Console.Write(4);
    }
}

Programma 2:

class Program
{
    static void Main(string[] args)
    {
        var myAdder = new Adder();
        Console.Write(myAdder.GetSum());
    }
}

class Adder
{
    public Adder()
    {
        this.FirstOperand = 1;
        this.SecondOperand = 3;
    }

    public int FirstOperand { get; set; }
    public int SecondOperand { get; set; }

    public int GetSum()
    {
        return this.FirstOperand + this.SecondOperand;
    }
}
    
risposta data 30.08.2013 - 20:00
fonte

Leggi altre domande sui tag