|
|
|
 |
Hódító / Queosia forum
http://queosia.com
http://hodito.hu
|
|
| PC (hardver, szoftver, játékok stb.) Minden, ami számítógép. Kedvenc játékod megbeszélése, segítségkérés hardverügyben stb. |

11-12-2011, 18:30
|
 |
Member
|
|
Join Date: Jan 2007
Location: Budapest
Posts: 2,965
Activity: 0%
Longevity: 94%
|
|
egy forráskódot nekem is küldenél??? elsőre én is hasonló algoritmusban gondolkodtam csak nem volt időm még foglalkozni vele.
Még annyi a kérdés, hogy az eredeti feladatban használható-e rekurzió vagy nem?
__________________
Az élet olyan mint 1 simson, ha nem megy be kell rúgni
Last edited by Kutyuleee; 11-12-2011 at 18:33..
|

11-12-2011, 19:15
|
|
Junior Member
|
|
Join Date: Mar 2011
Posts: 47
Activity: 0%
Longevity: 74%
|
|
Gondolom igen, csak erősen nem ajánlott  Területvizsgálatnál egy rekurzió hamar elszabadulhat (pl. felezéses közelítéseknél ha nincs limit, akkor 2^n felé tart a lehetséges újrahívások száma, ami elég bizonytalan futási időt eredményez)
|

11-12-2011, 19:29
|
 |
Member
|
|
Join Date: Jan 2007
Location: Budapest
Posts: 2,965
Activity: 0%
Longevity: 94%
|
|
Quote:
Originally Posted by Cpt Balu
Gondolom igen, csak erősen nem ajánlott  Területvizsgálatnál egy rekurzió hamar elszabadulhat (pl. felezéses közelítéseknél ha nincs limit, akkor 2^n felé tart a lehetséges újrahívások száma, ami elég bizonytalan futási időt eredményez)
|
ezzel tisztában vagyok, de annyira nem vészes, ebben az esetben. csak mert szerintem megirnám rekurziv backtrack-kel is. ugyis kell gyakorolnom majd vizsgára, meg azért is, mert van olyan tételem, hogy rekurzív fügvényt kell átirni simára, és vissza.
__________________
Az élet olyan mint 1 simson, ha nem megy be kell rúgni
|

11-12-2011, 19:34
|
|
Junior Member
|
|
Join Date: Mar 2011
Posts: 47
Activity: 0%
Longevity: 74%
|
|
Az átírás gyakorlatilag annyi, hogy while ciklus helyett függvényt hívsz 
rekurziót akkor érdemes használni, ha egyébként túl sok köztes eredményt és állapotot kellene tárolni, ezt a függvény hívása megoldja nekünk, de pont ez a gyengéje is, a hívás és visszatérés sokszor lényegesen több mint maga a programkód futási ideje, ekkor kell választani, egy kis plusz programozásért cserébe gyorsíthatunk a kódon.
Elkezdem szép lassan írni az oldalra a jelenlegi progi algoritmusát is, remélem érdekesnek találjátok majd a gondolatmenetet 
|

11-14-2011, 18:12
|
|
Junior Member
|
|
Join Date: Mar 2011
Posts: 47
Activity: 0%
Longevity: 74%
|
|
Quote:
Originally Posted by Kutyuleee
egy forráskódot nekem is küldenél??? elsőre én is hasonló algoritmusban gondolkodtam csak nem volt időm még foglalkozni vele.
Még annyi a kérdés, hogy az eredeti feladatban használható-e rekurzió vagy nem?
|
Mivel a megoldás maga egyszerűbb, mint a magyarázkodás :P ezért itt postolom az algoritmust C# kódját:
Code:
public static class Searcher
{
public static int[,] Table;
static int Width, Height;<-- Tábla méretei
public static void SetTable(int W, int H)
{Adott méretű tábla generálása}
public static void Fill(double p)
{Feltöltés random szám segítségével, Rand<p?1:0 alapján}
public static void Search(ref int X, ref int Y, ref int W, ref int H)
{A kereső függvényünk}
}
Eddig a bevezetés, hogy hogy is néz ki a tábla, tehát int tömb, 1 és 0, ebben fogunk keresgélni.
A következő függvény adja a megoldást, az eredmények
X,Y,W,H változókba kerülnek (híváskor W értéke -1, a többi lényegtelen), amit a hívás helyén tudunk felhasználni:
Code:
public static void Search(ref int X, ref int Y, ref int W, ref int H)
{
int[,] Dists = new int[Width, Height];
int[] Stack1 = new int[Width];
int Stack1P = 0;
for (int i = Width - 1; i > -1; i--)
{
for (int j = Height - 1; j > -1; j--)
if (Table[i, j] == 1)
Dists[i, j] = (i == Width - 1 || Table[i + 1, j] == 0) ? 1 : Dists[i + 1, j] + 1;
else
Dists[i, j] = 0;
Stack1[i] = 0;
}
for (int i = 0; i < Width; i++)
if (W == -1 || (Width - i) * Height > W * H)
{
int C1 = 0;
int CF = 0;
while (C1 <= Height)
{
int N = C1 == Height ? 0 : Dists[i, C1];
if (N == 0)
CF = C1 + 1;
while (N != Stack1P)
{
if (N > Stack1P)
{
Stack1[Stack1P] = C1;
Stack1P++;
}
else if (N < Stack1P)
{
Stack1P--;
int newh = C1 - Stack1[Stack1P];
int neww = Stack1P + 1;
if (neww * newh > W * H)
{
W = neww;
H = newh;
X = i;
Y = Stack1[Stack1P];
}
Stack1[Stack1P] = -1;
if (Stack1[Stack1P] == CF)
Stack1P = N;
}
}
C1++;
}
}
}
Nem túl hosszú kód, de annál bonyolultabb értelmezni, kíváncsi vagyok ki jön rá mit is csinál pontosan  Lehet ötletelgetni!
Segítség: az első for ciklus (for (int i = Width - 1; i > -1; i--)) törzsének végéig az oldalon leírtak szerint működik.
|
|
The Following User Says Thank You to Cpt Balu For This Useful Post:
|
|

11-14-2011, 18:57
|
 |
Member
|
|
Join Date: Feb 2008
Location: widnes
Posts: 1,633
Activity: 0%
Longevity: 89%
|
|
__________________
"Holnapi előrejelzés: szitáló zsenialitás, heveny végítélet."
|
|
The Following User Says Thank You to csabi For This Useful Post:
|
|

11-14-2011, 19:16
|
|
Administrator
|
|
Join Date: Jan 2006
Posts: 25,255
Activity: 28%
Longevity: 100%
|
|
Más szerverről kell beilleszteni a képet. Valami olyanról, ami képként kezeli, és nem html oldalként, ami fölé muszáj fejlécet is tenni. Ott a Gugli fotóalbuma például, az korlátlan, ingyenes, gyors.
|
|
The Following User Says Thank You to Ati For This Useful Post:
|
|

11-15-2011, 20:10
|
|
Junior Member
|
|
Join Date: Mar 2011
Posts: 47
Activity: 0%
Longevity: 74%
|
|
Thx, akkor megpróbálkozok vele...
|

11-24-2011, 00:22
|
 |
Member
|
|
Join Date: Jan 2006
Posts: 1,146
Activity: 0%
Longevity: 99%
|
|
Nyilvános a Doom3 engine.
__________________
קפוד!
|

11-24-2011, 10:54
|
|
Junior Member
|
|
Join Date: Mar 2011
Posts: 47
Activity: 0%
Longevity: 74%
|
|
Lecsaptam rá, köszi 
már találtam is benne hasznos dolgokat, maya import stb. jobb ha nem magamnak feljesztem csak az időt viszi 
|
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
|
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT +1. The time now is 17:09.
 |
|
|
|
|
|
|