Druh palačinky
Pancake sorting (z anglického pancake sorting ) - třídící algoritmus . Jedinou operací povolenou v algoritmu je obrátit prvky sekvence až k nějakému indexu. Na rozdíl od tradičních algoritmů, které minimalizují počet porovnávání, vyžaduje třídění palačinek co nejméně převrácení. Proces lze zobrazit jako stoh palačinek , který se zamíchá tak, že se vezme několik palačinek shora a převrátí se.
Algoritmus
Nejjednodušší algoritmus ( varianta seřazení výběru ) neposkytuje žádné další převrácení, ale vyžaduje nalezení největšího prvku [1] . V roce 1979 Bill Gates a Christos Papadimitriou představili svůj algoritmus a prokázali dostatečnost a nezbytnost flipů [2] . V roce 1997 Heidari a Sudborog vykazovali spodní hranici v . Poskytovaly přesné hodnoty až , což vyžaduje 15 překlopení [3] . Teprve v roce 2008 se skupině výzkumníků z Texaské univerzity v Dallasu pod vedením Sudboroga [4] [5] podařilo výrazně (až ) překonat výsledek Gatese a Papadimitrioua .
Problém s připálenou palačinkou
Složitější verzí je placka typu sekvence, jejíž prvky obsahují další binární parametr. Tento problém navrhli Bill Gates a Christos Papadimitriou v roce 1979 [2] . Stalo se to známé jako problém spálených
palačinek :
Každá palačinka ve stohu byla spálená na jedné straně. Placky je nutné třídit ve vzestupném (sestupném) průměru tak, aby všechny ležely na plechu připálenou stranou dolů.
V roce 2007 vytvořila skupina studentů biopočítač založený na geneticky modifikované E. coli , který vyřešil problém spálených palačinek . Roli palačinek sehrály úlomky deoxyribonukleové kyseliny (jejíž 3'- a 5'-konce označovaly různé strany palačinky). Bakterie, která vytvořila fragmenty ve správném pořadí, získala odolnost vůči antibiotiku a nezemřela. Čas strávený hledáním správné kombinace ukázal minimální požadovaný počet převrácení fragmentů [6] [7] .
Implementace
C#
public static void PancakeSort < T > ( IList < T > arr , int cutoffValue = 2 )
kde T : IComparable
{
for ( int i = arr . Count - 1 ; i >= 0 ; -- i )
{
int pos = i ;
// Zjištění pozice max. čísla mezi začátkem a i
for ( int j = 0 ; j < i ; j ++)
{
if ( arr [ j ]. CompareTo ( arr [ pos ]) > 0 )
{
pos = j ;
}
}
// je již ve správné poloze?
if ( pos == i )
{
pokračovat ;
}
// je na začátku pole? If not flip array section tak to je
if ( pos != 0 )
{
Flip ( arr , pos + 1 );
}
// Překlopte sekci pole pro získání maximálního čísla na správnou pozici
Flip ( arr , i + 1 );
}
}
private static void Flip < T >( IList < T > arr , int n )
kde T : IComparable
{
for ( int i = 0 ; i < n ; i ++)
{
-- n ;
Ttmp = arr [ i ] ; arr [ i ] = arr [ n ]; arr [ n ] = tmp ; } }
Poznámky
- ↑ Douglas B. West. Problémy s palačinkami (1975, 1979, 1973 ) Získáno 16. srpna 2009. Archivováno z originálu dne 5. dubna 2012.
- ↑ 1 2 William H. Gates; Christos H. Papadimitriou. Hranice pro řazení podle obrácení předpony // Diskrétní matematika. - 1979. - Iss. 27 . - str. 47-57 . Archivováno z originálu 10. června 2007.
- ↑ Mohammad H. Heydari; I. Hal Sudborough. O průměru palačinkové sítě (anglicky) // Journal of Algorithms. - Duluth : Academic Press, Inc, 1997. - Sv. 25 , iss. 1 . - str. 67-94 .
- ↑ Tým zvítězil nad mladým Billem Gatesem s vylepšenou odpovědí na takzvaný palačinkový problém v matematice ( 17. září 2008). Získáno 16. srpna 2009. Archivováno z originálu dne 5. dubna 2012.
- ↑ B. Chitturi, W. Fahle, Z. Meng, L. Morales, CO Shields, I. H. Sudborough, W. Voit. Horní hranice (18/11)n pro třídění podle obrácení předpon (anglicky) // Theoretical Computer Science. - Essex : Elsevier Science Publishers Ltd., 2009. - Sv. 410 , iss. 36 . - str. 3372-3390 .
- ↑ Karmella A. Haynes, Marian L. Broderick, Adam D. Brown a kol. Inženýrské bakterie k vyřešení problému spálených palačinek // Journal of Biological Engineering. - 2008. - Sv. 2 , iss. 8 .
- ↑ Animované video vysvětlující řešení problému biologickým počítačem (anglicky) . Získáno 16. srpna 2009. Archivováno z originálu dne 5. dubna 2012.
Viz také
Odkazy
- Weisstein, Eric W. Třídění palačinek . matematický svět. Staženo: 16. srpna 2009.
- Alexandr Bogomolnyj. Obracející palačinky . Získáno 16. srpna 2009. Archivováno z originálu dne 5. dubna 2012.