Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2024 (pdf). V loňském roce NÚKIB evidoval dosud nejvíce kybernetických bezpečnostních incidentů s celkovým počtem 268. Oproti roku 2023 se však jedná pouze o drobný nárůst a závažnost dopadů evidovaných incidentů klesá již třetím rokem v řadě. V minulém roce NÚKIB evidoval pouze jeden velmi významný incident a významných incidentů bylo zaznamenáno 18, což oproti roku 2023 představuje pokles o více než polovinu.
Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie). Servo mimo jiné nově zvládne animované obrázky APNG a WebP.
Na chytré telefony a počítačové tablety v Rusku bude od začátku příštího měsíce povinné předinstalovávat státem podporovanou komunikační aplikaci MAX, která konkuruje aplikaci WhatsApp americké společnosti Meta Platforms. Oznámila to dnes ruská vláda. Ta by podle kritiků mohla aplikaci MAX používat ke sledování uživatelů. Ruská státní média obvinění ze špehování pomocí aplikace MAX popírají. Tvrdí, že MAX má méně oprávnění k přístupu k údajům o uživatelích než konkurenční aplikace WhatsApp a Telegram.
Společnost PINE64 stojící za telefony PinePhone nebo notebooky Pinebook publikovala na svém blogu srpnový souhrn novinek. Kvůli nedostatečnému zájmu byla ukončena výroba telefonů PinePhone Pro.
Po pěti měsících vývoje byla vydána nová verze 0.15.1 programovacího jazyka Zig (GitHub, Wikipedie). Verze 0.15.0 byla přeskočena. Přispělo 162 vývojářů. Přehled novinek v poznámkách k vydání.
Před sedmi lety společnost Valve představila fork projektu Wine s názvem Proton umožňující v Linuxu přímo ze Steamu hrát počítačové hry do té doby běžící pouze ve Windows. Aktuální přehled podporovaných her na stránkách ProtonDB
Společnost DuckDuckGo rozšířila svůj AI chat Duck.ai o GPT-5 mini (𝕏). Duck.ai umožňuje anonymní přístup bez vytváření účtů k několika modelům umělé inteligence. Aktuálně k GPT-4o mini, GPT-5 mini, Llama 4 Scout, Claude Haiku 3.5 a Mistral Small 3.
Marek Tóth v příspěvku DOM-based Extension Clickjacking: Data ve správcích hesel v ohrožení na svém blogu popsal novou clickjacking techniku s několika variantami útoků a otestoval ji proti 11 správcům hesel. Výsledkem bylo nalezení několika 0-day zranitelností, které mohly ovlivnit uložená data desítek milionů uživatelů. Jedno kliknutí kdekoliv na webové stránce kontrolované útočníkem umožňovalo ukrást uživatelská data ze
… více »Na dnešní akci Made by Google 2025 (YouTube) byly představeny telefony Pixel 10 s novým čipem Google Tensor G5 a novými AI funkcemi, hodinky Pixel Watch 4 a sluchátka Pixel Buds 2a.
The Document Foundation oznámila vydání nové major verze 25.8 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs) a také na Youtube a PeerTube.
Ahoj,
nevím jak efektivně řešit tento problém. Mám pole bodů, a potřeboval bych funkci, která by co nejefektivněji našla nejkratší vzdálenost pro danou pozici. Naprosto triviálně to lze řešit lineárním prohledáváním, ale to je z hlediska výkonu nepoužitelné. Pro lepší porozumění předložím malý prototyp, kterým bych chtěl lépe vysvětlit, o co mi jde:
struct DistancePoint { double x, y; }; struct DistanceFinder { DistanceFinder(); ~DistanceFinder(); bool init(const DistancePoint* p, int count); void free(); double find(double inX, double inY); void findSpan(double x, double y, int count, double* results); DistancePoint* _data; int _count; }; DistanceFinder::DistanceFinder() : _data(NULL) { } DistanceFinder::~DistanceFinder() { free(); } bool DistanceFinder::init(const DistancePoint* p, int count) { free(); if (!count) return false; _data = (DistancePoint*)malloc(count * sizeof(DistancePoint)); if (!_data) return false; memcpy(_data, p, count * sizeof(DistancePoint)); return true; } void DistanceFinder::free() { if (_data) { ::free(_data); _data = NULL; } } double DistanceFinder::find(double x, double y) { double dist = fabs((_data[0].x - x) * (_data[0].y - y)); for (int i = 1; i < _count; i++) { double d = fabs((_data[i].x - x) * (_data[i].y - y)); if (dist > d) dist = d; } return sqrt(dist); }
a teď stručně charakteristiku a pár typů k optimalizaci:
void DistanceFinder::findSpan(double x, double y, int count, double* results) { for (int i = 0; i < count; i++, x += 1.0) results[i] = find(x, y); }
Tak co, věděl by někdo, jakým směrem mám jít? Potřeboval bych vědět, jaké nejlepší datové struktury a algoritmy volit pro vytvoření dat, které použiju k efektivnímu vyhledání. Budu používat metodu findSpan(), takže samotná find() není vůbec důležitá.
Chtěl bych to použít na generování podobných obrázků jako tyto.
Jako trivialni reseni se mi jevi, ze bych si nad mnozinou bodu vytvoril dva indexy dle souradnic x a y a s jejich pouzitim pak hledal metodou okenka. Napr. nejprve v kruznici o polomeru a, pak a*1,5 apod. Inspiraci pro lepsi reseni mohou byt struktury jako quadtree nebo R-tree.
Matice sousednosti vytvoří kvadratické množství hran. Dijkstra má složitost O(E+V.log(V)), tedy složitost by byla kvadratická. To naivní prohledání je lineární ;)
Navíc Dijkstra je moc obecný. Tady si můžeme dovolit počítat s tím, že vzdálenosti bodů respektují topologii (tedy pokud se pohybujeme v Euklidovském prostoru). Například navržené kvarterní stromy jsou použitelné (používá to třeba Google na svých mapách).
Ono obecně hledání ve vícerozměrných strukturách je ošklivé a moc se toho nedá ulehčit. Většina GISových algoritmů předpokládá nějaké zjednodušení, které umožní preferovat jeden směr (třeba autor říká, že bude hledat jen ve směru osy), na kterém se vybuduje efektivní vyhledávací struktura a vedlejší veličiny se pak už neohrabaným způsobem navěsí na její listy.
Nevím, jestli jsem to dobře pochopil. Máš neprázdnou množinu bodů M a úsečku mezi body [a, y] a [b, y], kde a<b. A pro určité body úsečky [z, y] chceš určit vzdálenost k nejbližšímu bodu z množiny M?
Budu předpokládat (možná špatně), že tě zajímají pouze vybrané hodnoty y např. 0, 1, 2, 3, ... A těch hodnot, které tě zajímají není mnoho. Potom pro každé y, které tě zajímá, můžeš spočítat intervaly na ose x [u1, u2], [u2, u3], [u3, u4],... takové, že pro každý bod [x,y], kde x je z intervalu [u(i), u(i+1)], bude nejbližší bod p(i).
Příklad: Tedy pokud máš množinu M se dvěma body p(1)=[0, 1] a p(2)=[2, 1], a zajímá tě y=0, pak si předem spočítáš intervaly [-nekonečno, 1], [1, nekonečno] a pro každou úsečku mající y=0 víš, že pro každý bod s x <= 1 je nejbližší bod p(1) a pro x >= 1 je nejbliží bod vždy p(2).
Tedy časová složitost je pro celou úsečku O(log n +count). Předzpracování nepočítám.
Podle me by mohl pomoci vyvazeny BSP strom. Liche body budou rezat 2d prostor horizontalne, sude vertikalne. Find potom bude traverzovat podle uzlu, vzdy vybere tu polovinu prostoru na ktere sedi hledany bod (a zapamatuje nejkratsi vzdalenost) - body v druhe polovine prostoru jsou urcite dal.
Jde jen o to vyvazit ten BSP strom, aby v kazdem uzlu byla velikost obou vetvi srovnatelna.
A sakra, jak ted o tom premyslim tak by to nefungovalo. Ty delici primky musi byt v polovine mezi dvema body, nikoli skrze body samotne...
BSP podľa osí ma tiež napadlo ako prvé, ale nerieši to podmienku najmenšej vzdialenosti od hľadaného bodu.
Dotaz ma ale inšpiroval do tej miery, že idem kúpiť pravítko, trojuholník, ceruzky, kružidlo a papiere a večer nad tým budem bádať
Hodne stesti :)
Podle me to podle os nepujde, ale pujde to jako kolmice na spojnici dvou bodu v jejim stredu (ekvidistanta tech dvou bodu). Ta primka potom opravdu deli prostor na body blize bodu A a/nebo B. To vyvazovani by slo bud brute-force, tim ze se najde takova dvojice, jejiz delici cara produkuje pomer bodu na obou stranach co nejblizsi jednicce, nebo by mozna sel ten strom i zoptimalizovat po naivnim vybudovani - to vyvazovani bude obecne vetsi problem nez vystaveni toho stromu jako takoveho - coz je celkem jednoducha operace.
Co se tyce toho dotazu, tam je zajimave ze by mozna slo snadno zoptimalizovat prochazeni tim, ze se bude predavat cela mnozina bodu (ve forme usecky). Usecka se potom bude delit ve dvi v kazdem uzlu - vzniknou segmenty se stejnou prislusnosti k nejblizsimu bodu po protlaceni vsech segmentu do listu :)
Operácia zistenia toho, na ktorej strane priamky leží bod je (ak si dobre pamätám) triviálna - dosadia sa súradnice bodu do rovnice priamky ax+by+c a ak je výsledok kladný, tak to leží na jednej strane (ľavý podstrom), ak záporný tak na druhej (pravý podstrom) a ak rovný nule, tak bod leží na priamke (to by sa priradilo ku jednému z podstromov). Takže by z hľadiska výpočtovej zložitosti ani veľmi nevadilo, že priestor nebude delený podľa osí X a Y...
Tak po dalsim zamysleni musim odvrhnout myslenku ze to jde po segmentech - kazdy bod se musi resit zvlast. Podle os to samozrejme lze taky resit (kd-tree), ten prohledavaci algoritmus zkratka hleda nejkratsi bod do hloubky a neprechazi prez rozdelujici primku co je dal nez aktualni nejlepsi kandidat...
Tu nižšie v diskusii je odkaz na wikipediu (Voronoi diagram) a sú k tomu aj algoritmy. Spomína sa tam zložitosť O(n.log(n)), čo mi pripadá o dosť lepšie než to nad čím som uvažoval ja ... ale aspoň som sa trochu precvičil v rysovaní a som zásobený písacími pomôckami na 10 rokov dopredu!
Hmm nevim jestli je to pro tvoji ulohu optimalni alg. Ale predtav si nasledujici situaci:
1. mame nakonecne veliky ctverec(koren stromu)
2. Vlozime do nej jeden bod -> ctverec se rozdeli na 4 pod-ctverce. Tyto pod-ctvrce jsou synove korene.
3. Mame dalsi bod. Projdeme koren, najdeme spravneho syna, a do nej vlozime dalsi bod a rozdelime ho na 4 syny
Pokud svoje body rozume nahodne zamichas, tak dostanes strom, ktery projdes log. case. Podobny alg. se pouziva pro reprezentaci map, akorat se misto bodu pouzivaji usecky.
Ivan
A není právě řešení toho problému to co je na tom nejlepší, nejzáživnější? ... samotné naprogramování už je pak nuda.
Tiskni
Sdílej: