Multimnožina (multiset, množina s opakováním, bag) je datový typ vycházející z množiny. Multimnožina slouží jako kontejner na entity, jenž negarantuje pořadí uložených prvků, a který může obsahovat jednotlivé prvky (hodnoty) vícekrát.
Implementace
Nejjednodušším způsobem implementace je použít list a zapomenout na pořadí. Tento způsob je ovšem velmi neefektivní z hlediska použité paměti, pokud se prvky často opakují. Druhou možností je využití dvojice seznamů, z nichž ten první obsahuje hodnoty a druhý zaznamenává počty jejich výskytů. Tento postup je efektivnější, ale stále vyžaduje poměrně náročnou operaci průchodu seznamem pro přístup k jednotlivým položkám
(asymptotická složitost ). Z tohoto důvodu se pro efektivní implementaci využívá hashovací tabulka, která umožňuje přístup k položkám s očekávanou konstantní složitostí.
Kód
/**
* Multimnozina implementovana pomoci dvojice seznamu
* @author Pavel Micka
* @param <ENTITY> typovy parametr obsahu
*/
public class Multiset<VALUE> {
private List<VALUE> values;
private List<Integer> occurences;
/**
* Konstruktor
* @param initialCapacity kapacita, se kterou je inicializovan podrizeny seznam
*/
public Multiset(int initialCapacity) {
values = new ArrayList<VALUE>(initialCapacity);
occurences = new ArrayList<Integer>(initialCapacity);
}
/**
* Vlozi entitu do multimnoziny
* @param val dana entita
* @return pocet vyskytu entity po jejim pridani
*/
public int put(VALUE val) {
int index = values.indexOf(val);
if (index == -1) {
values.add(val);
occurences.add(1);
return 1;
} else {
int currCount = occurences.get(index);
occurences.set(index, currCount + 1);
return currCount + 1;
}
}
/**
* Vrati nahodne nejaky prvek z mnoziny (a snizi pocet jeho vyskytu o 1)
* @return prvek, @null pokud je mnozina prazdna
*/
public VALUE pick() {
if (values.size() == 0) {
return null;
}
if (occurences.get(0) == 1) {
VALUE v = values.remove(0);
occurences.remove(0);
return v;
} else {
VALUE v = values.get(0);
occurences.set(0, occurences.get(0) - 1);
return v;
}
}
/**
* Odstrani z mnoziny danou entitu (snizi pocet vyskytu o 1)
* @param val entita
* @return pocet vyskytu po odstraneni dane entity
*/
public int remove(VALUE e) {
int index = values.indexOf(e);
int curr = occurences.get(index);
if (curr != 1) {
occurences.set(index, curr - 1);
return curr - 1;
} else {
values.remove(index);
occurences.remove(index);
return 0;
}
}
/**
*
* Dotaz na pritomnost dane entity
* @param val entita
* @return pocet vyskytu dane entity
*/
public int contains(VALUE e) {
int index = values.indexOf(e);
if(index == -1) return 0;
return occurences.get(index);
}
/**
* Dotaz na velikost mnoziny (vcetne multiplicit)
* @return pocet prvku
*/
public int size() {
int count = 0;
for(Integer i : occurences){
count += i;
}
return count;
}
}
SEO od společnosti Digital Pylon
Online casino s algoritmem
České casino online online slot-vegas.cz
Hrajte nejlepší hry jako je GoodGame Empire.
Zajímavé články: Jak najít práci snů? Zvolte kariéru v IT!, Češi mají rádi hrací automaty online, Jak funguje algoritmické obchodování Casino, Online výuka Algoritmus a online marketing mají svá pravidla, Automaty, Matematický vliv, Ratings, Jak fungují algoritmy hazardních her online: více znalostí, více peněz, SYPWAI - nástroj pro vědecký vývoj, Vynikají na globálním trhu: Nejlepší vývojáři softwaru pro online výherní automaty, Jak si vybrat nejlepší české online casino, Proč byste měli hrát online casino VPN revoluce, Kde najdeme algoritmy v každodenním životě?, Čeká vás pracovní pohovor mimo město? Podívejte se, jak dokonale zvládnout včasný příchod, 5 úžasných technologií ze světa hazardních her, Mirror and access to Mostbet, Svou kancelář můžete mít stále po ruce, Jaké výhody má digitalizovaná firma oproti off-line konkurenci?, Jaký systém vybrat pro snadné řízení výroby?, Nahradí umělá inteligence ajťáky?, Důvody, proč používat SnapTik ke stahování videí TikTok, Dokonalý den na pláži: Co si vzít s sebou, aby byl výlet zábavný a bezpečný?, Jak přežít dlouhý let?, Go pay GoodGame Empire, Blockchain, Rozhovor, Umělá inteligence, Ochranná známka pre softvér: Prečo ju registrovať?, Role kryptografických algoritmů v zabezpečení online kasin, Jaké jsou náklady na nákup 3D tiskárny?, Jak algoritmy vylepšují online zážitky v roce 2025, Epilace laserem a péče o pokožku před a po ní, Byty k pronájmu Sokolov - výhody a rizika pronájmu bytu bez realitky, Filmy a seriály plné hádanek: kryptografie jako hlavní téma Kdy obnovit data z disku běžně dostupným softwarem a kdy už se obrátit na profesionály?>