Diskuze: Triediaca analýza
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 12 zpráv z 12.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nemá cenu vybírat vhodný algoritmus pro 100 prvků. Použij normálně ten co je implementovany v .NETu.
Btw, ani jeden ze tvých algoritmů bych rozhodně nepoužil. Insertion sort je jednoduše pomalý a na counting sort je to velký rozsah čísel. V dnešní době se používa QuickSort. Popřípadě jestli máš pole, které má velikost v řádek desítek a není uvnitř jazyku už nějaký uvnitř, tak si rychle naimplementuješ bubble sort.
Array.Sort, použiť nemôžem, pretože tie čísla ťahám zo
string poľa, kde sa jeden string skladá z 9 charov, ktoré rozdelím na 3
časti, naparsujem do int a sčítam. Následne s tým číslom pracujem.
Inak prečo práve Bubble, veď Insertion je rýchlejší než Bubble.
V jaké části toho celého procesu to pole sortuješ?
Príklad.:
pole[0] = "000051255";
...
string prvok = pole[0];
string memory = "";
int sucet = 0;
//tá 000 proste vyhodí 0, 051 - 51, 255 - 255
memory += prvok[0];
memory += prvok[1];
memory += prvok[2];
sucet += int.Parse(memory);
memory = "";
memory += prvok[3];
memory += prvok[4];
memory += prvok[5];
sucet += int.Parse(memory);
memory = "";
memory += prvok[6];
memory += prvok[7];
memory += prvok[8];
sucet += int.Parse(memory);
memory = "";
Ten kód hore, je funkcia pomocou ktorej, vytvorím v potrebný okamžik súčet tých troch čísel. A teda - triedim pole stringov, na základe súčtu troch čísel nachádzajúcich sa v danom stringu.
No jasně, ale v jaké části to sortuješ?
Jinak pár připomínek k tomu kódu.
Máš string, který se skládá z 9 číslic. Ty rozdělíš po 3 číslicích a ty sečteš. Kdybych se bavil o výkonu, tak tam vytváříš snad 10 instancí úplně zbytečně, protože string je immutable.
int soucet = int.Parse(pole.Substring(0, 3)) + int.Parse(pole.Substring(3, 3)) + int.Parse(pole.Substring(6, 3));
Máš pravdu, ale bol to len príklad. V skutočnosti som to do programu
ešte neimplementoval, ale každopádne dobrá pripomienka.:)
Inak prečo ten Bubble?
Z hlediska efektivity programování ho máš napsaný za pár minut. A při
třídění 100 prvků je to celkem jedno, proto Jinak co má být výsledkem? Ty
jednotlivé součty máš, které si vypočítal?
Robím tohto machra: http://www.itnetwork.cz/…198e32c9c602. To zotriedenie použijem na zotriedenie palety (poľa) farieb podľa sýtosti (tmavosti). Malo by platiť - čim menší súčet, tým tmavšia farba (čierná - 0,0,0).
Vytvoříš si normálně třídu, která reprezentuje ty 3 barvy. A pak máš několik možností, jak rozsortovat nějakou kolekci. Já osobně bych použil implementaci IComparable. Viz kód níže.
public sealed class Color : IComparable<Color>
{
public int R { get; private set; }
public int G { get; private set; }
public int B { get; private set; }
internal int Value
{
get { return this.R + this.G + this.B; }
}
public Color() : this(0, 0, 0) { }
public Color(int r, int g, int b)
{
this.R = r;
this.G = g;
this.B = b;
}
public int CompareTo(Color other)
{
int value = Value;
int otherValue = other.Value;
if (value > otherValue)
return 1;
else if (value < otherValue)
return -1;
else
return 0;
}
}
Použití
Color[] colors = new Color[]
{
new Color(0,100,200),
new Color(200,100,200),
new Color(200,200,200),
new Color(100,100,100),
new Color(0,0,0),
new Color(200,200,0)
};
for (int i = 0; i < colors.Length; i++)
Debug.Write(colors[i].Value + " ");
Debug.WriteLine(null);
Array.Sort(colors);
for (int i = 0; i < colors.Length; i++)
Debug.Write(colors[i].Value + " ");
Debug.WriteLine(null);
Mal som to už ako pole Stringov, tým pádom som to poriešil takto:
public string[] ZoradFarby()
{
string[] poleColor = new string[poleFarieb.Length];
Array.Copy(poleFarieb, poleColor, poleFarieb.Length);
string temp;
for (int i = 0; i < poleColor.Length; i++)
{
for (int j = i; j < poleColor.Length; j++)
{
if (int.Parse(poleColor[j].Substring (0, 3)) + int.Parse(poleColor[j].Substring(3, 3)) + int.Parse(poleColor[j].Substring(6,3)) < int.Parse(poleColor[i].Substring (0, 3)) + int.Parse(poleColor[i].Substring(3, 3)) + int.Parse(poleColor[i].Substring(6,3)))
{
temp = poleColor[j];
poleColor[j] = poleColor[i];
poleColor[i] = temp;
}
}
}
return poleColor;
}
Tvoje riešenie je však z programátorského hľadiska určite lepšie. Diki
Np
David Hartinger Podle čeho se určuje jestli dostanu bod nebo ne?
Zobrazeno 12 zpráv z 12.