Byla vydána beta verze Linux Mintu 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.
GNU Project Debugger aneb GDB byl vydán ve verzi 17.1. Podrobný přehled novinek v souboru NEWS.
Josef Průša oznámil zveřejnění kompletních CAD souborů rámů tiskáren Prusa CORE One a CORE One L. Nejsou vydány pod obecnou veřejnou licenci GNU ani Creative Commons ale pod novou licencí OCL neboli Open Community License. Ta nepovoluje prodávat kompletní tiskárny či remixy založené na těchto zdrojích.
Nový CEO Mozilla Corporation Anthony Enzor-DeMeo tento týden prohlásil, že by se Firefox měl vyvinout v moderní AI prohlížeč. Po bouřlivých diskusích na redditu ujistil, že v nastavení Firefoxu bude existovat volba pro zakázání všech AI funkcí.
V pořadí šestou knihou autora Martina Malého, která vychází v Edici CZ.NIC, správce české národní domény, je titul Kity, bity, neurony. Kniha s podtitulem Moderní technologie pro hobby elektroniku přináší ucelený pohled na svět současných technologií a jejich praktické využití v domácích elektronických projektech. Tento knižní průvodce je ideální pro každého, kdo se chce podívat na současné trendy v oblasti hobby elektroniky, od
… více »Linux Foundation zveřejnila Výroční zprávu za rok 2025 (pdf). Příjmy Linux Foundation byly 311 miliónů dolarů. Výdaje 285 miliónů dolarů. Na podporu linuxového jádra (Linux Kernel Project) šlo 8,4 miliónu dolarů. Linux Foundation podporuje téměř 1 500 open source projektů.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.12.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
OpenZFS (Wikipedie), tj. implementace souborového systému ZFS pro Linux a FreeBSD, byl vydán ve verzi 2.4.0.
Kriminalisté z NCTEKK společně s českými i zahraničními kolegy objasnili mimořádně rozsáhlou trestnou činnost z oblasti kybernetické kriminality. V rámci operací OCTOPUS a CONNECT ukončili činnost čtyř call center na Ukrajině. V prvním případě se jednalo o podvodné investice, v případě druhém o podvodné telefonáty, při kterých se zločinci vydávali za policisty a pod legendou napadeného bankovního účtu okrádali své oběti o vysoké finanční částky.
Na lepší pokrytí mobilním signálem a dostupnější mobilní internet se mohou těšit cestující v Pendolinech, railjetech a InterPanterech Českých drah. Konsorcium firem ČD - Telematika a.s. a Kontron Transportation s.r.o. dokončilo instalaci 5G opakovačů mobilního signálu do jednotek Pendolino a InterPanter. Tento krok navazuje na zavedení této technologie v jednotkách Railjet z letošního jara.
Kevin je právě na horách a lyžuje. Stojí na vrcholu sjezdovky před svou poslední jízdou, za chvíli půjde na chatu opékat párky. Sjezdovku už dobře zná, každé místo projel snad stokrát a pamatuje si, jak se mu které líbí. Všechna jsou podle toho ohodnocená celými čísly.
1
2 3
4 1 1
2 5 0 2
Kevin by tedy chtěl, aby součet ohodnocení míst, přes která při poslední jízdě projede, byl co největší.
Na travních lyžích se dá jezdit z kopce a přitom zatáčet doleva nebo doprava. Z každé pozice na svahu se tak dá dostat na nejvýše dvě další pozice ležící pod ní.
Tvar vstupu: Pro jednoduchost bude kopec zadán po řádcích. Na prvním řádku bude číslo N udávající výšku kopce. Na dalších N řádcích bude vždy na i-tém řádku i celých čísel udávajících ohodnocení míst na kopci na i-té hladině od vrcholu, čísla budou oddělena mezerami.
Jízda doleva je v našem zápisu svahu ekvivalentní sestupu na další řádek a jízda doprava sestupu na další řádek a posunutí o pozici doprava.
Tvar výstupu: Na výstup vypište jedno celé číslo udávající maximální součet ohodnocení poslední Kevinovy jízdy z prvního řádku na libovolné místo na spodním řádku.
Program posílám v příloze. Problém je, že si poradí s kopcem vysokým 10 řádků, ale s kopcem vysokým 40 řádků už ne. A to by měl zvládnout i vstup 1000 řádků. Vstupy zapíše do pole správně, ale vrátí výsledek 0. Chyba tak musí být v rekurzivní funkci
Všem předem děkuji za tipy.
Řešení dotazu:
Mam pocit ze i bez kouknuti na program si dovolim tvrdit ze sis sam odpovedels v posledni, teda vlastne predposledni vete.
Tim samozrejme myslim tu rekurzi. Pokud chces aby to zvladalo vetsi vstupy tak urcite nepouzivej rekurzi.
JJ to je mozne, jak jsem psal kod jsem nestudoval, ale jen jsme vychazel s predpokladu ze rekurze je sice velmi dobre citelna, ale casto to neni idealni reseni.
Tak on je problem ze rekurze se i hure optimalizuje s pohledu kompilatoru(optimalizatoru), dalsi problem s rekurzi je ze vyuziva zasobnik, ktery ma vetsinou nejak omezenou velikost. Samozrejme citelnost je velmi dulezita, takze pokud rekurze dostacuje tak bych ji zvolil taky. Bohuzel si nevzpominam na moc pripadu, kde bych rekurzi vyuzil, teda krom pripadu, kde jsme potreboval nazorne ukazat nejakej algoritmus.
Moc jsem ten program nezkoumal, ale při výšce kopce > 31 ti přeteče ten výpočt mocniny, takže bych to tipoval na problém tady. K tomu 2 poznámky - počítat mocninu dvou násobenim je šílenost, podívej se na bitové posuvy.
A za druhé - i kdyby si měl tu proměnnou 64bit a mohl alokovat tolik paměti pro to pole (což je samozřejmě nesmysl), tak stejně končíš u výšky 64... Tzn takto to opravdu řešit principielně nelze.
počítat mocninu dvou násobenim je šílenost, podívej se na bitové posuvy.Slušný optimalizátor v překladači z násobení dvěma udělá bitový posun tak jak tak. Násobení dvěma je čitelnější pro programátora.
for(int i = 0; i < exponent; i++)
{
vysledek *= 2;
}
Lze napsat jen toto:
vysledek <<= exponent;
Coz moderni optimalizator dokaze taky :), ale kazdopadne tady uz bych nemluvil o tom ze to je citelnejsi a nebo ze se na to da zcela spolehnout.
Pokud muzu neco doporucit, tak asi toto: cti to radek po radku, hodnotu po hodnote. Vzdy si pamatuj predchozi radek a ten pricitej k tomu dalsimu co ctes tak jak je treba dle zadani a u posledniho radku vyber maximum.
dnes jsem unavenej zitra poslu pseudo kod
Tak nakonec misto pseudo jsem to napsal v jazyku D. Jsem uz unaveny takze nerucim zcela za spravnost:
import std.stdio;
import std.algorithm;
import std.conv;
enum MAX_ROW_COUNT = 1000;
enum BUF_SIZE = 65535;
void main(string[] args)
{
int[MAX_ROW_COUNT] row;
char[] buf = new char[BUF_SIZE];
auto f = File("test.txt");
size_t len, rowCount;
while((len = f.readln(buf)) != 0) {
int lastVal = row[0];
char[] rowData = buf[0 .. len];
size_t index = 0;
foreach (val; rowData.splitter(' ').map!(a=>parse!int(a))) {
int tmp = row[index];
row[index] = lastVal + val;
lastVal = tmp;
++index;
}
++rowCount;
}
writeln(minCount!("a > b")(row[0 .. rowCount])[0]); // seems wierd but minCount return maximum :)
}
import std.stdio;
import std.algorithm;
import std.conv;
enum MAX_ROW_COUNT = 1000;
enum BUF_SIZE = 65535;
void main(string[] args)
{
int[MAX_ROW_COUNT] row;
char[] buf = new char[BUF_SIZE];
auto f = File("test.txt");
size_t len, rowCount;
int[2] lastVal;
while((len = f.readln(buf)) != 0) {
char[] rowData = buf[0 .. len];
size_t index = 0;
foreach (val; rowData.splitter(' ').map!(a=>parse!int(a))) {
lastVal[index%2] = row[index];
row[index] = max(lastVal[0] + val, lastVal[1] + val);
++index;
}
++rowCount;
}
writeln(reduce!("max(a,b)")(row[0 .. rowCount]));
}
Děkuji všem za rady. Jsem ještě začátečník, a abych pravdu řekl, tak jsem z Vašich odpovědí pořád nepochopil, proč mi program nefunguje :) Kód, který napsal Kozzi nemůžu použít, protože pracuji v c++ a ani mu pořádně nerozumím, abych ho přepsal.
brát vždy maximum z dvou možných hodnot na předchozím řádkuToto nechápu. Vždyť na posledním řádku můžu dostat hodnotu, která bude větší, než všechny ostatní součty, tzn. že bude největší právě tato cesta. Těmto algoritmům nerozumím, ale ten svůj jsem přepracoval, takže hodnoty neukládá do pole. Nyní dělá toto: Prochází cesty úplně vlevo a sčítá. Až dojde na konec rozhodne, zda je součet větší, než zatím největší nalezení, případně ho zapíše. Následně se vrátí o vrstvu výš a vezme cestu vpravo, atd. atd. Pokud můžu mít dotaz, tak pořád nemůžu pochopit, proč mám číst vstup po řádcích. Původně jsem takový systém měl. Přečetl řádek, sečetl všechny kombinace, a ty zapsal do pole. Nakonec našel v poli největší hodnotu. Ten jsem ale přepracoval, protože se mi zdál zbytečně složitý. Díky za trpělivost a případné odpovědi :) V příloze posílám zdrojový kód.
1
2 3
4 1 1
2 5 0 2
Po zpracovani 1. radku [1]JJ presne, to je vice mene to co dela muj kod, teda on alokuje zbytecne protoze nevyuiva informace o tom kolik realne radku tam bude.
Mocnina dvojky je mocná
2^40 = 1 099 511 627 776 * sizeof(int) = 4TiB RAM pro druhé pole
maximum int = 2^31 -1 = 2 147 483 647 * sizeof(int) = 8GiB RAM pro druhé pole
ALE narveš tam jen třicetjedničku (to je daň za nulu
):
1 073 741 824 * sizeof(int) = 4GiB RAM pro druhé pole
¡31 je max! - na 64bit systému (omezení int) na 32 bit s PAE je to 29 bez PAE 29 nebo 28 (omezení systému) - zjednodušeněZadej si 32 je docela pravděpodobné, že ti to vyhodí std::bad_alloc, bo fce mocninaDvojky() vrátí -2147483648 a to jaksi alokovat nelze.
Tiskni
Sdílej: