Algoritmizace prace s SD kartou

Pavel Kutina hw na prelude.cz
Pondělí Březen 30 16:54:34 CEST 2020


Chápu - a, tady je to nepochopení. Když použiju tvůj příklad, já přece ale 
nehledám B > 5, já vůbec nevím, větší než kolik to má být, protože nevím, 
který prvek z A bude ten rozhodující "dělicí". Primárně mi jde o zobrazení 
seznamu souborů, takže vám, kolik jich je na jedná stránce, ale nevím, jakým 
písmenem bude ten seznam třeba už na druhé stránce začínat.

Věta "Hledáme pole B[10], které obsahuje prvky nejbližší větší než je prvek 
B1 v uspořádaném stavu." je nesprávná, mělo by být "Hledáme pole B[10], 
které obsahuje prvky nejbližší větší než je pátý prvek A v uspořádaném 
stavu".

A[] 1 14 8 15 6 2 7 9 4 11

Tvojí metodou dostanu B 6, 7 8 (tři následující, větší než 5), ale já bych 
potřeboval setřídit A:

A[] 1 2 4 6 7 8 9 11 14 15

a z něj dostat tři prvky po pátém prvku, tedy 8, 9, 11.

Jinak ten algoritmus chápu. Leda ho protočit N-krát (kde N je číslo stránky 
při stránkování) - při prvním bude B>0, při druhém bude B větší než 
největší-poslední B z prvního průchodu, při třetím než ze druhého průchodu 
atd. Jo, bude to trvat a při dvacáté stránce se to bude třidit dvacetkrát a 
z toho devatenáctkrát zbytečně, ale zase je to daň za nízké využití paměti. 
Mimochodem - tak nějak to vypadá jako to, o čem tu psal kolega Sladký, jen 
jsem to původně nepochopil :)

Jestli jsem to teda nakonec pochopil správně, tak tohle je to správné 
řešení. Mimochodem, co si tak vybavuju, tak i ten původně zmiňovaný Norton 
Commander na slabších strojích s velkým počtem souborů v adresáři také 
znatelně zpomaloval, možná se k těm seznamům choval nějak podobně.

Pavel Kutina







----- Original Message ----- 
From: "Jindrich Fucik" <fulda na seznam.cz>
To: <hw-list na list.hw.cz>
Sent: Monday, March 30, 2020 1:42 PM
Subject: Re: Algoritmizace prace s SD kartou


> A=ha, po mne je chyba se dívat na A[] jako na pole, je to stream, 
> přichází, odchází.
> Hledáme pole B[10], které obsahuje prvky nejbližší větší než je prvek B1 v 
> uspořádaném stavu.
>
> Pro ilustraci příklad, kdy hledám 3 prvky, větší než B1=5:
> A[] obsahuje prvky v pořadí z leva doprava:
> 1 14 8 15 6 2 7 9 4 11
>
> Na začátku si naplním B[3]=[-1,-1,-1] - to jako že prvek o kterém vím, že 
> není v seznamu.
> První iterace A[]=1; B[3]=[-1,-1,-1]; B1=5;
> prvek 1<5, takže zahodím
>
> Druhá iterace A[]=14; B[3]=[-1,-1,-1]; B1=5;
> prvek 14>5, takže přidám; s prvkem -1 pracuji jako s neexistujícím a první 
> pozice v poli je neexistující prvek, takže přidám na začátek, všechny 
> ostatní prvky v poli posunu o jednu doprava, poslední logicky vypadne.
>
> Třetí iterace A[]=8; B[3]=[14,-1,-1]; B1=5;
> prvek 8>5, takže přidám. Prvek 8 je menší než první prvek (14), takže 
> přidám dopředu. Všechny ostatní prvky posunu.
>
> Čtvrtá iterace A[]=15; B[3]=[8,14,-1]; B1=5;
> prvek 15>5, takže přidám. Prvek 15 je menší než posldní prvek (-1), takže 
> přidám na konec. Všechny ostatní prvky bych posunul, ale jsem na konci, 
> takže jen zahodím poslední.
>
> Pátá iterace A[]=6; B[3]=[8,14,15]; B1=5;
> prvek 6>5, takže přidám. Prvek 6 je menší než první prvek (8), takže 
> přidám dopředu. Všechny ostatní prvky posunu.
>
> Šestá iterace A[]=2; B[3]=[6,8,14]; B1=5;
> prvek 2<5, takže zahodím
>
> Sedmá iterace A[]=7; B[3]=[6,8,14]; B1=5;
> prvek 7>5, takže přidám. Prvek 7 je menší než druhý prvek (8), takže 
> přidám na druhé místo. Všechny ostatní prvky posunu.
>
> Osmá iterace A[]=9; B[3]=[6,7,8]; B1=5;
> prvek 9>5, takže bych přidal, ale je větší než poslední (8), takže 
> zahodím.
>
> Devátá iterace A[]=4; B[3]=[6,7,8]; B1=5;
> prvek 4<5, takže zahodím.
>
> Desátá iterace A[]=11; B[3]=[6,7,8]; B1=5;
> prvek 11>5, takže bych přidal, ale je větší než poslední (8), takže 
> zahodím.
>
> Takže mám můj nový seznam B[3]=[6,7,8] a nikde jsem si nepotřeboval ani 
> uložit obsah streamu A[] a a ani nic sortovat.
>
> Chápeš?
>
> Dne 30.3.2020 v 10:39 Pavel Kutina napsal(a):
>> Tak jsem si myslel, že to, že se mi to v hlavě nerovná do nějakého 
>> pochopitelného algoritmu, je jen pokročilou hodinou - a mně se to tam 
>> nerovná ani teď, takže si fandím a bude to bude spíš demencí.
>>
>> Když to rozepíšu:
>>
>> Mám pole prvků na vstupu, dejme tomu A[], kde jsou hromady neuspořádaných 
>> položek. Mám pole B[] výstupu, kde potřebuju mít těch deset správně 
>> setříděných - s tím, že je to výřez setříděného pole Äsort[] , tedy při 
>> obrazení třeba čtvrté "stránky" z toho celku Asort[] bude platit, že pole 
>> B[] obsahuje položky Asort[30] - Asort39]".
>>
>> Buď jsme se úplně nepochopili, nebo to v tom řešení prostě nevidím - jak 
>> zjistím, který prvek je první (B[0]), tedy na pozici 30 toho setříděného 
>> pole (Asort[29])? Kdyby to bylo od nuly, tak jo, ale když chci najít 
>> třicátý, tak musím to pole stejně nějak přetřídit, abych zjistil, které 
>> jsou na těch pozicích před ním a které tedy mám zahodit jako podlimitní?
>>
>> Asi potřebuju flipchart, kafe, a programátora, kterej to umí :)
>>
>> Pavel Kutina
>>
>>
>> ----- Original Message ----- From: "Jindrich Fucik" <fulda na seznam.cz>
>> To: <hw-list na list.hw.cz>
>> Sent: Sunday, March 29, 2020 10:38 PM
>> Subject: Re: Algoritmizace prace s SD kartou
>>
>>
>>> Ty přímo vkládáš na správné místo.
>>> Tedy:
>>> Je aktuální menší něž poslední minulý? Ano = zahoď + konec
>>> Je aktuální větší než poslední v seznamu? Ano - je poslední v seznamu 
>>> větší než 9? ano = zahoď + konec, ne = dej na konec
>>> Jinak najdi pozici kam patří, posuň co je za pokud při posunu přeteklo 
>>> 10, ta zahoď poslední.
>>>
>>> Dne 29.3.2020 v 21:19 Pavel Kutina napsal(a):
>>>> Jakože pro každou stránku projdu ceý adresář a zahodím, co se mi 
>>>> nevejde do mezí, následně setřídím už jen těch deset zbylých? To zní 
>>>> hodně pěkně, díky, to asi bylo to správné nakopnutí, díky, tohle zkusím 
>>>> rozvinout.
>>>>
>>>> Pavel Kutina
>>>>
>>>>
>>>>
>>>> ----- Original Message ----- From: "Hynek Sladký" <econf na centrum.cz>
>>>> To: <hw-list na list.hw.cz>
>>>> Sent: Sunday, March 29, 2020 8:48 PM
>>>> Subject: Re: Algoritmiyace prace s SD kartou
>>>>
>>>>
>>>>> Napada me algoritmus, ktery si pamatuje jen 10 prvku pro zobrazeni a 1 
>>>>> jako posledni z minule stranky.
>>>>> Prochazi se vzdy cely adresar a do seznamu se pridava (tj. i vklada) 
>>>>> nazev, ktery je vetsi nez posledni z minule stranky a mensi nez jeden 
>>>>> z docasnych polozek seznamu. Po projiti celeho adresare by tam mely 
>>>>> byt pozadovane polozky.
>>>>> Tento postup se pak muze opakovat, dokud se nedojde na konec seznamu.
>>>>> Nevim, jestli se mi podarilo to popsat pochopitelne, vysvetlovani mi 
>>>>> nikdy neslo ;-)
>>>>>
>>>>> Hynek Sladky
>>>>>
>>>>>
>>>>> Dne 29.3.2020 v 13:35 Pavel Kutina napsal(a):
>>>>>> Zdravim,
>>>>>>
>>>>>> mam ted trochu cas na hrani, tak pro jednu svoji hracku chci dodelat 
>>>>>> nejaky rozumny filemanager. Hloupe je, ze je to sice na pomerne 
>>>>>> silnem procesoru (STM32F407VGT6 - 128kB RAM, 1MB flash), ale porad to 
>>>>>> neni jako na PC...
>>>>>>
>>>>>> Chtel bych udelat okno ve stylu poloviny Norton Commanderu, tedy 
>>>>>> vylistovani adresaru a souboru v danem adresari, prochazet soubory a 
>>>>>> dal s nimi neco delat. Hacek je, ze mne nenapada, jak vyresit trideni 
>>>>>> souboru - chci je mit srovnane abecedne (nebo treba podle data, 
>>>>>> velikosti atd.), ale zobrazuju jich v seznamu na displeji deset, na 
>>>>>> karte jich teoreticky muzou byt stovky, takze zobrazeni musim 
>>>>>> strankovat. Kdyz nactu seznam do nejakeho pole a to setridim, 
>>>>>> nasledne zobrazim vysek tech aktualne zobrazovanych deseti, je to 
>>>>>> vsechno OK - ovsem krome toho, ze sezeru vsechnu pamet, co mam, a 
>>>>>> jeste bych si musel nekde vypujcit :)
>>>>>>
>>>>>> Nenapadne nekoho, jak zmensit pametovou narocnost? Popravde mne nic 
>>>>>> rozumneho nenapada.
>>>>>>
>>>>>> Diky za kazdy rozumny tip.
>>>>>>
>>>>>> Pavel Kutina
>>>>> _______________________________________________
>>>>> HW-list mailing list - sponsored by www.HW.cz
>>>>> Hw-list na list.hw.cz
>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>
>>>>
>>>> _______________________________________________
>>>> HW-list mailing list - sponsored by www.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 



Další informace o konferenci Hw-list