abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 1
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 26
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 788 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: PHP prieniky rozsahov hodnot

25.2.2012 23:12 adrinko | skóre: 22
PHP prieniky rozsahov hodnot
Přečteno: 349×
prosim o radu. mam nieco taketo

hodnota A ma min a max hodnotu 1000 - 1500

hodnota B ma min a max hodnotu 1200 - 1700

hodnota C ma min a max hodnotu 1600 - 2000

hodnota D ma min a max hodnotu 2500 - 3000

ako zistím prieniky A,B,C? malo by to vyhodit, ze prvy prienik je 1200-1500 pre A,B,

dalsi prienik 1600-1700 pre B,C

Řešení dotazu:


Odpovědi

26.2.2012 00:20 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
este by som dodal E s hodnotami 1200-1500, tak by to malo vyhodit, ze A,B,E sa prelinaju v 1200-1500. zjednodusene povedane, mam schodzky naplanovane v danych casoch a potreboval by sim zistit, v akych casoch od-do sa mi prekryvaju. Diky!
Řešení 1× (Jan Trávníček)
LangPa avatar 26.2.2012 01:31 LangPa | skóre: 12 | blog: LangPavel | Hradec Králové
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot

Návrh, mohlo by to fungovat... :-)

Převedl bych intervaly na 2 jakési "události" typu začátek(B) a konec(E). Ještě je třeba mít referenci na samotný interval.

Vše naskládat do pole a setřídit, takže z toho vyjde něco takového: (pro správnost třeba třídit i podle např ID události, zde je to abeceda A—E)

Vytvořit prázdný zásobník (nějaké pole)

Při iteraci každá událost začátek(B:) v poli způsobí uložení na zásobník. Pokud byl zásobník neprázdný, existuje zde průnik.
Kažká událost konec(E:) v poli způsoví odstranění prvku ze zásobníku; všechny intervaly na zásobníku se před vyzvednutím překrývají

  1. B:1000 (A) :: [] push A
  2. B:1200 (B) :: [A] push B == AB se protíná
  3. B:1200 (E) :: [AB] push E == ABE se protíná
  4. E:1500 (A) :: [ABE] remove A == BE se protíná
  5. E:1500 (E) :: [BE] remove E
  6. B:1600 (C) :: [B] push C == BC se protíná
  7. E:1700 (B) :: [BC] remove B
  8. E:2000 (C) :: [C] remove C
  9. B:2500 (D) :: [] push D
  10. E:3000 (D) :: [D] remove D

Doufám, že je to alespoň trochu k pochopení ;-) Důležité je pochopit že i když je to jeden interval jsou to v podstatě dvě skalární tříditelné hodnoty...

26.2.2012 09:47 Jan Trávníček | skóre: 10 | blog: ehonza | Existuje
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
Jen pro upřesnění jedná se o frontu a ne o zásohník ale je to hezké.
To mess up a Linux box, you need to work at it; to mess up your Windows box, you just have to work on it.
26.2.2012 09:49 Jan Trávníček | skóre: 10 | blog: ehonza | Existuje
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
I když jestliže budou různě dlouhé intervaly tak nějaký prvek budete odstraňovat i z prostředka...
To mess up a Linux box, you need to work at it; to mess up your Windows box, you just have to work on it.
LangPa avatar 26.2.2012 18:18 LangPa | skóre: 12 | blog: LangPavel | Hradec Králové
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
Pro nepřekrývající se a nebo vnořené intervaly se to chová skutečně jako zásobník. Vzhledem k tomu, že všechno, jak fronta (FIFO), tak zásobník (LIFO), je v PHP řešené pomocí funkcí nad Array, je to jedno.

Nevím jestli tady je rozvedené to moje řešení někde níže, ale samotný algoritmus (bez třídění) má ideálně lineární složitost (2*N --> 2 protože jeden interval má začátek a konec) a myslím, že to se se složitostí N^2 (bruteforce - dva vnořené forcykly) co do efektivity nedá srovnávat(... když se dělá milion na místo dvou tisíc iterací při tisíci záznamech).

Dále co mě napadlo, že by se mělo třídit podle třech kritérií {čas; (konec|začátek); ID} — prostřední kvůli rozlišení na sebe těsně navazujících intervalů; při nesprávném pořadí by algoritmus "náhodně" označoval dva intervaly se stejným začátkem a koncem za překrývající se, což zřejmě není žádoucí (pokud se pracuje s časem, je vhodné uvažovat o všech intervalech jako z prava otevřených (strart <= cas < konec) )

Pro lepší pochopení algoritmu je potřeba nepracovat s intervaly (pole nebo objekt s dvěma časy + vlasní data), ale rozbít tyto na dva údaje (objekt s jedním časem a typem začátek/konec + reference na vlastní data (ID)).
26.2.2012 12:31 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
vyzerá to super, akurát tomu nerozumiem :D Možno nejaký malý náčrt php príkazov by mi pomohol v orientácii, dikes
26.2.2012 00:28 Ash | skóre: 53
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
Hrubá síla by nestačila? Pro každou proměnnou X zkusím min hodnoty všech ostatních, pokud leží v intervalu Xmin - Xmax mám průnik na interlavu Ymin - min(Xmax, Ymax).

max hodnotami ostatních bych se asi nezabýval, tuto možnost by to mělo až budou v obráceném gardu.
26.2.2012 20:27 Ash | skóre: 53
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
Přidám kód, aby to bylo jasnější, omlouvám se za ten bastl s min-max, nějak mi to teď nemyslí.
#!/bin/bash

A=(1000 1500)
B=(1200 1700)
C=(1600 2000)

for x in A B C; do
  for y in A B C; do
    xmin=${!x}
    xmax=$(eval echo '$'{$x[1]})
    ymin=${!y}
    ymax=$(eval echo '$'{$y[1]})
    if [[ $ymin -gt $xmin && $ymin -lt $xmax ]]; then
      if [[ $imax -gt $ymax ]]; then
        echo "$x$y $ymin $ymax"
      else
        echo "$x$y $ymin $xmax"
      fi
    fi
  done
done
Výstup:
AB 1200 1500
BC 1600 1700
26.2.2012 11:30 Kit
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
<?php
$A=array(1000,1500);
$B=array(1200,1700);
$B=array(1600,2000);
$AB=array(max($A[0],$B[0]),min($A[1],$B[1]));
$BC=array(max($B[0],$C[0]),min($B[1],$C[1]));
?>
26.2.2012 12:37 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
vďaka, toto je zaujímavé, nájde to prieniky pre AB, BC, čo je fajn. Ako by sa to ale malo pozmeniť nejako univerzálne, aby to bolo schopné spraviť najväčšiu množinu tých prelínajúcich sa? mohlo by to byť tak, že by to spravilo množiny, a ukázalo by ich od množiny s najväčším výskytom prienikov (kde by bolo ABE), až po najmenšie prieniky.
26.2.2012 13:12 Kit
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
Asi bych vyrobil něco jako tabulku vzájemných zápasů ve fotbalu a každé políčko ohodnotil rozdílem mezi minimem a maximem. Políčko s nejvyšší hodnotou bude řešení.

Ta tabulka v principu může být 3D, 4D,... a může být trojúhelníková, aby se zbytečně nehodnotil průnik AA, BA apod. Pomocí rekurze by to mělo jít poměrně snadno.
26.2.2012 13:54 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
experimentujem s týmto:
$classes = array(
    array(
       'name' => 'A',
       'day'  => 'Monday',
       'start'=> '08:00AM',
       'end'  => '11:00AM',
    ),
    array(
       'name' => 'B',
       'day'  => 'Monday',
       'start'=> '10:00AM',
       'end'  => '11:30AM',
    ),
    array(
       'name' => 'C',
       'day'  => 'Monday',
       'start'=> '12:00PM',
       'end'  => '04:00PM',
    ),
    array(
       'name' => 'D',
       'day'  => 'Monday',
       'start'=> '03:00PM',
       'end'  => '06:00PM',
    ),
    array(
       'name' => 'E',
       'day'  => 'Monday',
       'start'=> '10:00AM',
       'end'  => '10:30AM',
    ),
    array(
       'name' => 'F',
       'day'  => 'Monday',
       'start'=> '11:00AM',
       'end'  => '11:30AM',
    ),    
);


$overlap = array();
foreach ($classes as $class1) {
    foreach ($classes as $class2) {
        if ($class1['day'] != $class2['day'] || $class1 == $class2) continue;
        if (strtotime($class1['start']) <  strtotime($class2['end']) &&
            strtotime($class1['start']) >= strtotime($class2['start']))
        {
            $array = array($class1['name'], $class2['name']);
            sort($array);
            if (!in_array($array, $overlap)) $overlap[] = $array;
        }
    }
}
print_r($overlap);
to mi dá výsledok:
Array
(
    [0] => Array
        (
            [0] => A
            [1] => B
        )
 
    [1] => Array
        (
            [0] => B
            [1] => E
        )
 
    [2] => Array
        (
            [0] => C
            [1] => D
        )
 
    [3] => Array
        (
            [0] => A
            [1] => E
        )
 
    [4] => Array
        (
            [0] => B
            [1] => F
        )
 
)
teraz by stacilo nejako vyselektovať kombinácie, kde sa vyskytuje na začiatku A, t.j. AB,AE a zároveň pole s BE (druhé hodnoty poľa so začiatočným A), takže dostanem výsledok ABE. nejaký nápad na toto? potom následne nájdem spoločný min max prienik ABE a malo by to byť hotové.
26.2.2012 13:55 Kit
Rozbalit Rozbalit vše Re: PHP prieniky rozsahov hodnot
Zkusil jsem si něco podobného v databázi, mělo by to jít rozšířit i na trojice, čtveřice,...
SELECT * FROM rozsah;                                                                                     

id|name|mi|ma                                                                                                     
1|A|1000|1500                                                                                                     
2|B|1200|1700                                                                                                     
3|C|1600|2000                                                                                                     
4|D|2500|3000

SELECT n,pmi,pma,pma-pmi AS pm
  FROM (SELECT r1.name||r2.name AS n,
      max(r1.mi,r2.mi) AS pmi,
      min(r1.ma,r2.ma) AS pma
    FROM rozsah AS r1, rozsah AS r2
    WHERE r1.id<r2.id AND pmi<=pma)
  ORDER BY pm DESC;
                       
n|pmi|pma|pm                                                                                                      
AB|1200|1500|300                                                                                                  
BC|1600|1700|100

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.