-
Fototrend
Új hozzászólás Aktív témák
-
dabadab
titán
válasz bambano #15548 üzenetére
nagy mátrixot elég gáz lehet tárolni egy ilyen feladatra...
Nyilván vmi sparse reprezentációban.
a probléma még mindig az, hogy gagyi véletlenszámgenerátor esetén nem tudod kizárni a végtelen ciklust.
Ez az, ami tényleg teljesen elméleti kérdés. Azt lehet mondani, hogy nincs garancia a válaszidő nagyságára, de végtelen ciklustól tartani az nem igazán életszerű.
[ Szerkesztve ]
DRM is theft
-
Silεncε
őstag
válasz bandi0000 #15549 üzenetére
Én is ezen gondolkoztam, de ez meg tárhelyben sok (+ egy csomó időt elvesz a lista menedzselése)
A leggyorsabb az, amit axioma ír (Knuth), meg gondolom bambano is arra gondol (nem magamtól vagyok ilyen okos, hogy rájöttem (bárcsak), csak axioma korábbi kommentje után utánakerestem )
[ Szerkesztve ]
-
kovisoft
őstag
válasz dabadab #15551 üzenetére
Erre a véletlenszám-generátorra gondolhatott.
-
t256
őstag
válasz Drizzt #15539 üzenetére
Köszönöm a sok sok választ!
Szóval a "jatekter" egy for ciklussal fel van töltve. Minden sorban és oszlopban '_' van.
Elvileg elég lenne ennyi:
static void egyJeletVeletlenLerak()
{
int bekertSor = rnd.Next(0, 3);
int bekertOszlop = rnd.Next(0, 3);
char jel = rnd.NextDouble() > 0.5 ? 'X' : 'O';
if (jatekter[bekertSor, bekertOszlop] == '_')
{
jatekter[bekertSor, bekertOszlop] = jel;
}
}
?Beleraktam egy elágazást, ami megvizsgálja, hogy a tömb indexének értéke '_'-e, ha igen tovább megy. Így is elég ritka esetben rak le 5 jelet. Ahol nem talál '_' karaktert, ott egyszerűen kihagyja?
Kéne egy else ág, ami megmondja, hogy mit csináljon, ha 'O' vagy 'X' jel van ott? Pl, rakja a sorban következő indexbe. Ezt, hogy fogalmazom meg programnyelven?else { jatekter[bekertSor+1, bekertOszlop+1] = jel; }
?Szeptember óta tanulom ezt munka mellett. Nehezen érzek rá a logikára.
[ Szerkesztve ]
Spock says, “Logic clearly dictates that the needs of the many outweigh the needs of the few.” Captain Kirk answers, “Or the one.”
-
Drizzt
nagyúr
Ez nem lesz jó:
else { jatekter[bekertSor+1, bekertOszlop+1] = jel; }
, mert oda kellene figyelned arra, hogy nehogy a 4. sorba, vagy 4. oszlopba próbáld rakni a jelet.
Legegyszerűbb, ha meghívod újra a egyJeletVeletlenLerak függvényt, rekurzívan. Ezzel azt érnéd el, hogy amikor már foglalt helyet választott ki, akkor megpróbál egy másikat választani helyette.
(Amúgy nem eleve 3 X - 2 O-t, vagy 3 O - 2 X-et kellene lerakni? Ez így eléggé "cinkelt" amőba lesz.)I am having fun staying poor.
-
kovisoft
őstag
Azt is csinálhatod, hogy az eredeti megoldásodat annyiban módosítod, hogy a bekertSor és bekertOszlop értékadást ismételgeted, ha olyan értékeket kaptál, hogy az adott helyen a jatekter-ben van már valami. Pl.:
int bekertSor;
int bekertOszlop;
do {
bekertSor = rnd.Next(0, 3);
bekertOszlop = rnd.Next(0, 3);
} while (jatekter[bekertSor, bekertOszlop] != '_');Itt lehetne ugye végtelen ciklus akkor, ha már minden mező ki van töltve (vagy ha annyira rossz a véletlenszám-generátor, hogy bizonyos kombinációt soha nem dob ki). A korrekt megoldáshoz ezt az esetet is le kellene kezelned valahogy (pl. megnézed, van-e még egyáltalán üres mező, vagy csak szimplán kilépsz kellően sok lépés után, stb.).
De mivel ez egy beadandó, és a legegyszerűbb megoldás elkészítése is gondot okoz, ezért szerintem a korábbi értekezést a tökéletes megoldásról most javarészt figyelmen kívül hagyhatod, feltéve, hogy nem hívod meg a függvényedet azután is, hogy már betelt a jatekter. De azért nem árt, ha tisztában vagy ennek a megoldásnak a buktatóival.
-
t256
őstag
Köszönöm Mindenkinek!
Mindkét megoldás nagyon jó. Nem is bonyolult, igazából adja magát csak nekem nem áll rá az agyam.Spock says, “Logic clearly dictates that the needs of the many outweigh the needs of the few.” Captain Kirk answers, “Or the one.”
-
pmonitor
aktív tag
Igazából ide írom, mert általános algoritmus(ok)ról van szó. És keveredik az oktatással is. Az ismétléses permutáció algoritmusát ez alapján csináltam meg. A napokban próbáltam optimalizálni. Míg végül a C# topic-ban joysefke ezt a linket adta meg. Ez egyszerűbb is, és kb 4-5-ször gyorsabb.
Az első könyv egy egyetemi jegyzet. Ebben kevéssé érthető és sokkal lassabb algoritmus van. Egy kicsit merész kijelentést teszek ezzel kapcsolatban. Mégpedig azt, hogy lehet csodálkozni, hogy az egyetemeken a nem gyakorlati(hatékony) dolgokat oktatják. Ezért sztem nem lehet csodálkozni, hogy amikor a nebulók kikerülnek az 'oskolából, akkor gyakorlati tudásuk zéró. Nektek mi a véleményetek ezzel kapcsolatban?
Egyébként az ismétléses permutációval kapcsolatos teszteket itt meg lehet nézni.http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
sztanozs
veterán
Én nyomnék egy sima sort-by-random-ot és kiválasztanám az első N elemet... Főleg egy kis elemszámú lista esetében (illetve ha egy nagy elemszámú listából sok elemet kell sorban kiválasztani).
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
dabadab
titán
REST API-ra csinálok egy webes felületet, ami elég sok adatot kezel. Dolgozáshoz lesz, vagyis elsődleges szempont az, hogy gyors legyen és mindent meg lehessen csinálni csak billentyűzettel.
Mit javasoltok hozzá? (Angularral van tapasztalatom, de az ilyesmihez túl nagy késleltetést produkál)
DRM is theft
-
-
K1nG HuNp
őstag
válasz dabadab #15561 üzenetére
react + next.js csak hogy mondjak valamit amit meg én, és a devek legtöbbje preferál.
illetve mi az, amihez egy frontend framework tul nagy kesleltetest general? ezt kifejthetned mert nem kellene ilyennek lennie ha normalisan van megirva, barmiben.
[ Szerkesztve ]
(raw_item.get("pk").unwrap().as_s().unwrap().to_string()).split("#").collect::<Vec<&str>>()[1].to_string()
-
dabadab
titán
válasz K1nG HuNp #15564 üzenetére
Néhány ezernyi számla listában, bennük kb 5-10 sor, ezek között kellene navigálni, kinyitni, becsukni, osztályozni, szűrni, kipipálni, ilyenek
És gyorsaság alatt nem a mostani mobilok gyorsaságát értem, ahol 100-200 ms után történik valami, addig meg eljátszik az átmenetekkel, hanem a hardcore, 386-oson futó Foxpro stílust, ahol az ember nyom egy gombot és a következő frame-en már megtörtént
DRM is theft
-
-
dabadab
titán
Hát akkor jön a puding, meg a próbája.
Aztán ha mégsem válik be, akkor B tervnek ott a svelte, az is tök jól néz ki.
Köszi mindenkinek a tanácsokat!
[ Szerkesztve ]
DRM is theft
-
K1nG HuNp
őstag
válasz dabadab #15565 üzenetére
ne haragudj de továbbra sem értem a dolgot. Ha egy API-ról szedi bármilyen frontend megoldás az adatokat akkor nem tudsz gyorsabb lenni a http kéréseknél, vagy itt most nem apival dolgoznál hanem valami lokális fájlokkal?
Meg amúgy optimistic UI, Reactben nagyon gyakori pattern az, hogy az user interakciókra frontenden azonnal válaszolonk, a frontend oldali cache-t mutáljuk pontosan úgy mint ahogy azt tennénk amint visszajön a 200as http valasz, viszont közben paralell elküldjük a http kérést is. Ergó arra optimalizálunk hogy minden küldött kérésünk 200al tér vissza és ebben az esetben teljesen 0ra visszuk le a valaszidot..
Nem latom hogy a flutter most miert jobb vagy..? Ha valami akkor bloated szar es 16 megas frontend oldali bundlejeid lesznek, nekem egy macbookon laggol a belinkelt oldal ..Szoval hogy nem teljesen vagom a koncepciodat es ha gondolod irhatsz meg rola, de ezek a megoldasok ha nem nezzuk az elso betoltest (ahol szamit a bundle size) akkor pontoan olyan gyorsak, marmint itt konkretan sub nanosec browser re-renderekrol beszelunk..
(raw_item.get("pk").unwrap().as_s().unwrap().to_string()).split("#").collect::<Vec<&str>>()[1].to_string()
-
dabadab
titán
válasz K1nG HuNp #15580 üzenetére
Semmi gond, ha elég sokat magyarázom, akkor lehet, hogy a végén én is megértem
Alapvetően read-only lesz, szóval az a terv, hogy ami adat kell, azt beolvasom a memóriába és utána már csak azzal dolgozom, szóval a REST onnantól kezdve tulajdonképpen játszik.
Akkor tulajdonképpen azt mondod, hogy ne aggódjam túl a dolgot?
DRM is theft
-
pmonitor
aktív tag
válasz pmonitor #15559 üzenetére
Ezen az oldalon elkészítettem a permutációk, kombinációk és a variációk kódjait/tesztjeit is. Aki tud valamelyiknél hatékonyabb kódot(vagy algoritmusra mutató linket), őt kérem, hogy ossza meg velünk.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
K1nG HuNp
őstag
válasz pmonitor #15582 üzenetére
senki sem fogja az i, j, k valtozonevekkel ellatott kododat ordo csekkolni hogy van e erre jobb megoldas, de roviden, igen, mindig van egy robosztus, teljesen tesztelt open source lib ami ezt es tobbet is tud jobban
(raw_item.get("pk").unwrap().as_s().unwrap().to_string()).split("#").collect::<Vec<&str>>()[1].to_string()
-
kovisoft
őstag
válasz pmonitor #15582 üzenetére
Még régebben írtam egy rövid függvényt, ami kiírja a N szám permutációit rendezett formában. Most sehol sem találom, de emlékeim alapján megpróbáltam újra lekódolni C-ben:
int a[50];
int n=5;
int i, j, temp;
// az 1 2 3 ... n sorozatbol indulunk ki
for (i=0; i<n; i++)
a[i] = i+1;
for (;;)
{
// kiirjuk az aktualis permutaciot
for (i=0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
// megkeressuk, hol kezdodik az utolso monoton csokkeno reszsorozat
for (i=n-2; i>=0 && a[i]>a[i+1]; i--);
// ha a teljes sorozat monoton csokkeno, akkor vegeztunk
if (i < 0)
break;
// a csokkeno reszsorozat elotti elemet ki kell cserelnunk a reszsorozatban nagysag szerint rakovetkezovel
for (j=n-1; a[j]<a[i]; j--);
temp=a[i]; a[i]=a[j]; a[j]=temp;
// tovabbra is monoton csokkeno a reszsorozatunk, forditsuk meg, hogy monoton novekedo legyen
for (j=i+1; j<n+i-j; j++)
{
temp=a[j]; a[j]=a[n+i-j]; a[n+i-j]=temp;
}
}Nem teszteltem a sebességét, nem állítom, hogy ez a létező leggyorsabb módszer, de viszonylag rövid és egyszerű. Egyébként most, hogy jobban megnézem, ez majdnem az a módszer, mint amiben a quicksort van. Az igazat megvallva soha nem értettem, hogy miért kell itt meghívni egy quicksortot, hiszen amikor ide érünk, akkor a sorozat vége már rendezve van, csak éppen csökkenő sorrendben, tehát elég szimplán megfordítani.
[ Szerkesztve ]
-
axioma
veterán
válasz pmonitor #15582 üzenetére
En egy dolgot megneztem benne: mar amikor nekem tanitottak a "tiszta" rendezesi algoritmusokat, akkor mondtak hogy a valosagban nem ilyet hasznalnak (letezo library-k), hanem egy kevert algot: ha a hossz ma'r <=5, akkor a rekurziv hivas koltsege tobb, mint az nlogn es n^2 kozotti kulonbseg, ezert azokat a darabokat egy sima buborekkal/kivalasztasossal vagy barmi ilyesmivel lerendezik, es csak felette jon a felezes. Ha szeretsz ilyenekkel jatszani, probald ki. Azota lehet hogy van tobb mas trukk is.
Amugy a mar leglevo algoritmusoknal celhoz kototten tudsz jobb algoritmust irni (felteve ha nem annyira altalanos hogy van ra lib ), vagyis ha barmi tobbet tudsz az adataidrol. Peldaul ha csupa 1000 es 10000 kozotti szamok 10ezres nagysagrendben (adatbazisban amcsi iranyitoszamok volt a pelda, az me'g egy kb. 80-as evekben irt konyvben), akkor jobban jarsz ha egy masik tombben megszamolod melyikbol mennyi van/bevodrozod hogy hol (indexek), es utana vegigfutsz rajta vissza-flatten-elni, igy van linearis megoldas. -
pmonitor
aktív tag
válasz kovisoft #15584 üzenetére
Átírtam C#-ra a kódod. Ez nagyon hasít! Az én kódom, meg az egyetemi jegyzetben szereplő algoritmus n=12 esetén eljátszik vele 80 sec-ig, a Tied végez vele ~2 sec alatt. A Tiéd n=13-at megcsinálja 23 sec alatt. n=14-et 5.5 perc alatt. Miért van az, hogy egyetemi jegyzetben is az ócska kód szerepel? Ha 1 ilyen hasító kódot valaki meg tudna írni ismétléses permutációra, ő elég nagy számokra meg tudná oldani a hátizsák problémától kezdve az 1D vágás problémáján keresztül sok mindent!
@K1nG HuNp: légyszíves keress nekem egy robosztus, teljesen tesztelt open source libet, ami tobbet is tud jobban kovisoft kódjánál. Egyébként hasonlítsd össze a te postodat és kovisoft-ét. Szted melyik ér többet? És érdekes, kovisoft is i, j-t használ.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
pmonitor
aktív tag
válasz kovisoft #15584 üzenetére
Megnéztem az eredeti kódod C-ben. Itt n=13 esetén ~14, n=14 esetén ~200 sec. alatt fut le. Mint az oldalamra is írtam, azért a C# játékszer a C-hez képest.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
Ispy
veterán
-
Livius
őstag
válasz pmonitor #15587 üzenetére
Javaslom kezdj el dolgozni valami szoftveres multicégénél, és akkor egyből rájössz, hogy ha tegnapra kell valamit megcsinálni, akkor manapság az már nem fér bele, hogy C-ben Win32 API-val mindent a legalacsonyabb szinten csináljunk meg 4 év fejlesztés alatt, amikor ugyan az sokkal átláthatóbb kódolással, 3 hónap alatt kész van C# WPF-ben egy Windows 10 cél platformra fejlesztve. És itt most egy korszerű sok-sok magot kihasználó multiprocessinges progira gondolj GUI-val és mindennel, ne a command line szintű használhatatlan user-interfaces DOS korszakos programra.
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
pmonitor
aktív tag
válasz Livius #15593 üzenetére
Nem megyek el dolgozni 1 multihoz sem, mert én nem vagyok programozó, csak programoz(gat)ok. Ezen kívül teljesen igaz, amit írsz, szóról-szóra. Viszont attól a C# nem fog begyorsulni(főleg, ha ragaszkodik valaki az OOP-hoz). Egyébként én azt az utat szoktam választani, hogy ha valamit nem tudok megoldani(vagy kritikus helyen lassú) C#-ban, akkor C/C++-ban készítek 1 natív .dll-t, és azt használom a C# programommal. Ilyen pl. ez a programom is. Ugyanis egy másik alkalmazásnak nem minden adatához enged hozzáférni .Net-ben. De a fő programom C#-ban készült. A C# nagy előnye, hogy nagyon sok mindent meg lehet csinálni 1-2 kattintással, meg hogy áttekinthetőbb kódot lehet benne írni. De ez a sebesség rovására megy. Assembly és C esetén meg pont fordítva van.
@Ispy: Fordítsuk meg a dolgot: szerinted az igazi programozók csak C#-ban programoznak? De a tény az tény.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
martonx
veterán
válasz pmonitor #15587 üzenetére
Hm, most jól értem, hogy ez a C# játékszer, és a C mennyire hasít, ezen bődületes nagy eltérések alapján lett kijelentve?
C# C
n=13 23s 14s
n=15 330s 200sAkkor mondanám, hogy a C#-hoz képest a C hasít, és rohanjunk minél több, mindent C-be átrakni, ha tizedannyi idők alatt végezne.
Egyébként az is kérdéses, hogy a C#-ot mennyire mesterien optimalizáltad, minden struct és span<T>-e benne, meg ilyesmik.
A fentiekkel nem azt akarom bizonygatni, hogy a managed kód nem lassabb, mint egy natív kód, mert az butaság lenne, csak arra akartam rávilágítani, hogy a talán helyes eredményeidből, levont következtetésed helytelen: "C# játékszer a C-hez képest".Én kérek elnézést!
-
Ispy
veterán
válasz pmonitor #15594 üzenetére
Szerintem az egész melyik az igazi meg nem felvetésed egy baromság, mindegyiknek van előnye meg hátránya, a megfelelő feladathoz a megfelelő nyelvet kell választani. Persze más ha az ember csak programozgat, meg más amikor a munkájától függ sok-sok másik cég, ember munkája. Meg persze pénzt is kéne vele keresni, ami kb. azt jelenti, hogy a lehető leggyorsabban tud a legjobb minőséget előállítani, az hogy a user a gép előtt 2 mp-et vár valamire vagy 10-et az nem igazán szempont.
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
kovisoft
őstag
válasz pmonitor #15586 üzenetére
Említetted az ismétléses permutációt, az előző kódomat egy kis módosítással alkalmassá tehetjük ezeknek az előállítására is. Csupán ki kell cserélni a < és > jeleket <= ill. >=-re, hogy a megegyező elemeket is átugorják a ciklusok. Valamint a tömb inicializálásakor fel kell sorolni ismétlésekkel együtt növekvő sorrendben az elemeket (ha mindegyik elem különböző, akkor visszakapjuk az ismétlés nélküli permutációt). Valahogy így:
int a[] = {1,1,2,2,2,3};
int n=6;
...
// megkeressuk, hol kezdodik az utolso monoton csokkeno reszsorozat
for (i=n-2; i>=0 && a[i]>=a[i+1]; i--);
...
// a csokkeno reszsorozat elotti elemet ki kell cserelnunk a reszsorozatban nagysag szerint rakovetkezovel
for (j=n-1; a[j]<=a[i]; j--);
...Ennek a sebességét sem teszteltem, nem tudom, hogyan viszonyul más módszerekhez.
-
Livius
őstag
válasz pmonitor #15594 üzenetére
Jelenleg az igazi programozók ilyeneket használnak kb (nálunk legalábbis ez ami kell multicégnél): C#, C++, python, Matlab (C-ét pedig defaultból mindenki tudja, de nem ez a fő nyelv, ami kell)
C#-ban igen, tudsz használni C-és dll-t, de javaslom ezen a koncepciódon még alakíthatnál. Azzal, hogy Te magadnak írsz egy C dll-elt és 200 ms-vel lettél gyorsabb a C# eredeti MS-es megoldásához képest azt még igencsak a hajadra kenheted.
Ha még ezen a vonalon akarsz csiszolni, hogy a matematikai eljárások a lehető leggyorsabbak legyenek, úgy hogy adott esetben a C#-ból egy külsös nem .Net-es dll-ből egy sokkal gyorsabb implementációt használsz, akkor ajánlom figyelmedbe a BLAS és LAPACK szintű átportolását az Intel-nek, Intel oneAPI Math Kernel Library.
Előfordulhat hogy ez csak az Inteles gépeken fog működni, kb csak a Core 2 Duo és annál újabb CPU-kon, de jelenleg ennél optimálisabb numerikus lib nincs C/C++-ban szerintem (párhuzamosított vektor/mátrix művelteket alapból tudja), amit egy C# alatt tetszőlegesen használhatnál is.Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
pmonitor
aktív tag
válasz kovisoft #15598 üzenetére
Először is szeretnék elnézést kérni Tőled a múltkori miatt. Tudod miről van szó, de itt nem írhatom le, mert megint 1 7 pihenőre küldenének. Mindenesetre az látszik, hogy aki kódot ad, ő nem összehasonlítható a többiekkel. És még most is agyaltál rajt. Köszönöm.
Nagyon jelentősen gyorsítottál a kódon. Az eddigi leggyorsabb ~34 sec. után a Te kódod ~13 sec alatt végzett a megszokott karakterlánccal(mert átalakítottam a kódod. int helyett karaktertömböt permutál). Ezek után a megszokott karakterlánchoz hozzátettem egy darab 'a' karaktert. Az így módosított kód C#-ban 30.6 sec. alatt futott le. A C-ben pedig 26.6 sec alatt. Itt "csak" 4 sec. a különbség a C és a C# között a C javára. Érdekes, hogy láthatod mennyivel gyorsabb a kódod, mégis "csak" 1 karaktert tudtam a végére tenni a karaktertömbnek, hogy emberi idő alatt lefusson. Ez is mutatja a feladat nehézségét.
Az egészet Itt meg tudod nézni.Nagyon szépen köszönöm a segítséged.
Szerk.: megnéztem még 1 karakterrel 3 perc alatt fut le C-ben.
[ Szerkesztve ]
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Építő/felújító topik
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Mindent megtudtunk az új Nokia 3210-ről
- sziku69: Fűzzük össze a szavakat :)
- Sony MILC fényképezőgépcsalád
- Luck Dragon: MárkaLánc
- Xbox Series X|S
- Kerékpárosok, bringások ide!
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen