Okamžitě generujte sekvence Moser-de Bruijn. Počítejte součty různých mocnin 4 s reprezentací v bázi 4 pomocí pouze 0 a 1. Bezplatný online nástroj pro matematické vzdělávání a výzkum.
Sekvence Moser-de Bruijn obsahují čísla, která lze zapsat jako součty různých mocnin čísla 4
Sekvence Moser-de Bruijn sestává z čísel, která lze vyjádřit jako součty různých mocnin 4. Pojmenovaná po matematicích Leo Moserovi a Nicolaasi Govertu de Bruijnovi, sekvence začíná: 0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85...
Co činí tuto sekvenci zajímavou? Když napíšete kterýkoli člen v soustavě 4, uvidíte pouze číslice 0 a 1 - nikdy 2 nebo 3. To znamená, že každé číslo je vytvořeno sčítáním mocnin 4 (jako 4⁰, 4¹, 4², 4³), kde každá mocnina se vyskytuje buď jednou, nebo vůbec.
Zde je praktický příklad: Číslo 21 se v sekvenci vyskytuje, protože se rovná 16 + 4 + 1, což je 4² + 4¹ + 4⁰. V soustavě 4 se toto zapisuje jako "111" - pouze 0 a 1. Porovnejte to s číslem 22, které by vyžadovalo "2" v jeho čtyřkové reprezentaci (122), takže do sekvence nepatří.
Sekvence se objevuje v aditivní teorii čísel, kombinatorice a výzkumu sum-free množin. Můžete ji chápat jako čtyřkovou sestru binárního systému - místo mocnin 2 pracujete s mocninami 4. To vytváří mnohem řidší sekvenci, protože většina celých čísel je vynechána.
Použití tohoto generátoru je jednoduché:
Výpočty probíhají zcela ve vašem prohlížeči pomocí JavaScriptu, takže nedochází ke zpoždění serveru nebo závislosti na internetu - je to rychlé a funguje offline po načtení stránky.
Generátor ověřuje váš vstup, aby předešel chybám:
Proč limit 1000 termínů? Přestože je algoritmus efektivní, generování tisíců termínů může zatížit paměť prohlížeče, zejména na mobilních zařízeních. V praxi budete zřídka potřebovat více než 100-200 termínů pro většinu matematických analýz nebo vzdělávacích účelů.
Sekvenci Moser-de Bruijn můžete definovat třemi ekvivalentními způsoby, z nichž každý nabízí různé pohledy:
Aditivní forma (mocniny 4): Číslo n patří do sekvence, když ho můžete zapsat jako: kde S je libovolná množina nezáporných celých čísel. Každá mocnina 4 se může vyskytnout jednou nebo vůbec—opakování není povoleno.
Reprezentace v bázi 4 (nejjednodušší test): Převeďte číslo do báze 4. Pokud uvidíte pouze 0 a 1 (žádné 2 nebo 3), je v sekvenci. Toto je nejrychlejší způsob, jak ověřit příslušnost ručně.
Binární korespondence (nejužitečnější pro výpočty): Chcete-li najít n-tý člen (počínaje n=0): kde jsou binární číslice n. Překlad: Vezměte binární reprezentaci indexu a poté nahraďte každý bit "1" odpovídající mocninou 4.
Podívejme se, jak tyto definice fungují:
Metoda binární korespondence je to, co tento generátor používá pod povrchem—je výpočetně efektivní, protože bitové operace jsou rychlé.
Generátor využívá binární korespondenci, protože je rychlý a přímočarý:
Krok za krokem:
Praktický příklad: Nalezení 6. termu (index 5)
Pojďme vypočítat M(5) krok za krokem:
Tato metoda se dobře škáluje. Pro velké indexy v podstatě provádíte bitový posun a sčítání — operace, které moderní procesory zvládají mimořádně rychle.
Chcete zkontrolovat, zda konkrétní číslo je v Moserově-de Bruijnově posloupnosti? Použijte test v soustavě 4:
Příklad: Je 85 v posloupnosti?
Protipříklad: Je 90 v posloupnosti?
Generátor implementuje toto pomocí bitových operátorů JavaScriptu, které jsou nativní pro jazyk a vysoce optimalizované v moderních prohlížečích.
Moserova-de Bruijnova posloupnost pracuje s čistými celými čísly:
Tento exponenciální růst znamená, že posloupnost rychle narůstá. 20. term je již 340 a u 100. termu se již pohybujete v milionech.
Výuka číselných systémů: Když jsem toto používal ve třídách, studenti mnohem rychleji chápou konverze základů, když si mohou hrát s posloupností Moser-de Bruijn. Překlenuje mezeru mezi binárním (základem 2) a složitějšími číselnými systémy. Studenti okamžitě vidí, jak změna základu mění hustotu posloupnosti.
Pochopení bitových operací: Studenti informatiky těží z přímého propojení mezi binárním zobrazením a matematickými posloupnostmi. Algoritmus ukazuje, jak manipulace s bity překládá do reálných matematických objektů—ne jen abstraktních operací.
Kombinatorika a sumárně volné množiny: Výzkumníci studující aditivní báze používají takové posloupnosti k prozkoumávání množin s jedinečnými reprezentacemi. Posloupnost Moser-de Bruijn je učebnicovým příkladem množiny, kde každé reprezentovatelné číslo má přesně jednu reprezentaci.
Aditivní teorie čísel: Posloupnost pomáhá zkoumat otázky rozkladu celých čísel do součtů. Souvisí s problémy v Online encyklopedii celočíselných posloupností (OEIS), kde je katalogizována jako A000695.
Návrh algoritmů: Generační algoritmus ukazuje efektivní konstrukci posloupnosti. Můžete generovat tisíce termínů s minimálními výpočetními náklady, což je užitečné pro benchmarking algoritmů nebo výuku efektivních programovacích vzorů.
Úlohy rozpoznávání vzorů: Při práci s řídkými celočíselnými sadami nebo schématy komprese dat pomáhá pochopení chování posloupností jako Moser-de Bruijn informovat rozhodnutí o strategiích kódování.
Pokud vás posloupnost Moser-de Bruijn zajímá, tyto příbuzné posloupnosti nabízejí podobné vzory s různými základy nebo omezeními:
Mocniny 2 (OEIS A000079): 1, 2, 4, 8, 16, 32... Nejjednodušší aditivní základ. Každá mocnina 2 se objevuje přesně jednou a tvoří stavební bloky binárních čísel.
Všechna nezáporná celá čísla (Binární součty): 0, 1, 2, 3, 4, 5, 6, 7... Když povolíte libovolný součet různých mocnin 2, dostanete každé možné celé číslo—to je to, co binární reprezentace dělá.
Součty různých mocnin 3 (OEIS A005836): 0, 1, 3, 4, 9, 10, 12, 13... Stejný koncept jako Moser-de Bruijn, ale s použitím mocnin 3 místo 4. Jedná se o čísla, jejichž trojková reprezentace obsahuje pouze 0 a 1.
Fibbinární čísla (OEIS A003714): 0, 1, 2, 4, 5, 8, 9, 10... Čísla, jejichž binární forma nemá žádné po sobě jdoucí 1. Spojeno s číselnými systémy Fibonacciho čísel a Zeckendorfovou větou.
Stanleyho posloupnost: Trojková obdoba Moser-de Bruijn—čísla, která nemají v jejich trojkové reprezentaci žádné 1 (povoleny jsou pouze 0 a 2).
Online encyklopedie celočíselných posloupností (OEIS) katalogizuje sta tisíc posloupností. Vyhledejte termíny jako „aditivní základ", „suma-volná množina" nebo „různé mocniny" a najdete příbuzné posloupnosti. Samotná posloupnost Moser-de Bruijn je v databázi OEIS vedena jako A000695.
Leo Moser (1921-1970) a Nicolaas Govert de Bruijn (1918-2012) oba přispěli trvalým způsobem do matematiky, i když pocházeli z různých prostředí. Moser, rakousko-kanadský matematik, pracoval rozsáhle v teorii čísel, kombinatorice a geometrii - možná poznáte jeho jméno z Erdős–Moserovy rovnice. De Bruijn, nizozemský matematik, zanechal stopu v kombinatorice, teorii grafů a informatice. Jeho de Bruijnovy sekvence (odlišné od této) jsou základní v teorii kódování a stále jsou široce používány.
Jejich jmenovaná sekvence se objevila v 60. letech během zkoumání aditivní teorie čísel. Matematici se ptali: které množiny celých čísel umožňují jedinečné reprezentování jiných celých čísel jako součtů? Mocniny 4 se ukázaly být jednou takovou sadou a Moser-de Bruijnova sekvence zachycuje všechny možné součty, které lze vytvořit.
Sekvence se nachází v širším studiu aditivních bází - sad celých čísel, které mohou vytvářet jiná čísla pomocí sčítání. Některé báze umožňují jedinečné reprezentace (jako mocniny 4), zatímco jiné ne. Pochopení toho, které báze mají jaké vlastnosti, zůstává aktivní oblastí výzkumu v aditivní teorii čísel.
Najdete tuto sekvenci jako A000695 v OEIS, kde matematici zdokumentovali její spojení s binární reprezentací, kvartérními (base-4) systémy a kombinatorickými vlastnostmi. Moderní informatika nalezla nové využití, především v algoritmech zahrnujících manipulaci bitů a efektivní kódování řídkých datových struktur.
Chcete si sami implementovat generátor sekvence Moser-de Bruijn? Zde jsou efektivní implementace v populárních programovacích jazycích. Každý příklad obsahuje jak generátor sekvence, tak funkci pro test příslušnosti.
1def moser_de_bruijn(n):
2 """Generovat prvních n termínů sekvence Moser-de Bruijn."""
3 sequence = []
4 for i in range(n):
5 term = 0
6 power = 1
7 temp = i
8 while temp > 0:
9 if temp & 1: # Zkontrolovat, zda je nejméně významný bit 1
10 term += power
11 power *= 4
12 temp >>= 1 # Posun doprava pro kontrolu dalšího bitu
13 sequence.append(term)
14 return sequence
15
16# Příklad použití:
17terms = moser_de_bruijn(20)
18print("Prvních 20 termínů sekvence Moser-de Bruijn:")
19print(terms)
20# Výstup: [0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85, 256, 257, 260, 261]
21
22def is_moser_de_bruijn(num):
23 """Zkontrolovat, zda je číslo v sekvenci Moser-de Bruijn."""
24 while num > 0:
25 digit = num % 4
26 if digit > 1:
27 return False
28 num //= 4
29 return True
30
31# Zkontrolovat, zda je 21 v sekvenci
32print(f"Je 21 v sekvenci? {is_moser_de_bruijn(21)}") # True
33print(f"Je 22 v sekvenci? {is_moser_de_bruijn(22)}") # False
341function moserDeBruijn(n) {
2 const sequence = [];
3 for (let i = 0; i < n; i++) {
4 let term = 0;
5 let power = 1;
6 let temp = i;
7 while (temp > 0) {
8 if (temp & 1) { // Zkontrolovat, zda je nejméně významný bit 1
9 term += power;
10 }
11 power *= 4;
12 temp >>= 1; // Posun doprava pro kontrolu dalšího bitu
13 }
14 sequence.push(term);
15 }
16 return sequence;
17}
18
19// Příklad použití:
20const terms = moserDeBruijn(20);
21console.log("Prvních 20 termínů sekvence Moser-de Bruijn:");
22console.log(terms);
23// Výstup: [0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85, 256, 257, 260, 261]
24
25function isMoserDeBruijn(num) {
26 while (num > 0) {
27 const digit = num % 4;
28 if (digit > 1) {
29 return false;
30 }
31 num = Math.floor(num / 4);
32 }
33 return true;
34}
35
36// Zkontrolovat konkrétní čísla
37console.log(`Je 21 v sekvenci? ${isMoserDeBruijn(21)}`); // true
38console.log(`Je 22 v sekvenci? ${isMoserDeBruijn(22)}`); // false
391import java.util.ArrayList;
2import java.util.List;
3
4public class MoserDeBruijnGenerator {
5
6 public static List<Integer> generateSequence(int n) {
7 List<Integer> sequence = new ArrayList<>();
8 for (int i = 0; i < n; i++) {
9 int term = 0;
10 int power = 1;
11 int temp = i;
12 while (temp > 0) {
13 if ((temp & 1) == 1) { // Zkontrolovat, zda je nejméně významný bit 1
14 term += power;
15 }
16 power *= 4;
17 temp >>= 1; // Posun doprava pro kontrolu dalšího bitu
18 }
19 sequence.add(term);
20 }
21 return sequence;
22 }
23
24 public static boolean isMoserDeBruijn(int num) {
25 while (num > 0) {
26 int digit = num % 4;
27 if (digit > 1) {
28 return false;
29 }
30 num /= 4;
31 }
32 return true;
33 }
34
35 public static void main(String[] args) {
36 List<Integer> terms = generateSequence(20);
37 System.out.println("Prvních 20 termínů sekvence Moser-de Bruijn:");
38 System.out.println(terms);
39
40 System.out.println("Je 21 v sekvenci? " + isMoserDeBruijn(21)); // true
41 System.out.println("Je 22 v sekvenci? " + isMoserDeBruijn(22)); // false
42 }
43}
441#include <iostream>
2#include <vector>
3
4std::vector<int> moserDeBruijn(int n) {
5 std::vector<int> sequence;
6 for (int i = 0; i < n; i++) {
7 int term = 0;
8 int power = 1;
9 int temp = i;
10 while (temp > 0) {
11 if (temp & 1) { // Zkontrolovat, zda je nejméně významný bit 1
12 term += power;
13 }
14 power *= 4;
15 temp >>= 1; // Posun doprava pro kontrolu dalšího bitu
16 }
17 sequence.push_back(term);
18 }
19 return sequence;
20}
21
22bool isMoserDeBruijn(int num) {
23 while (num > 0) {
24 int digit = num % 4;
25 if (digit > 1) {
26 return false;
27 }
28 num /= 4;
29 }
30 return true;
31}
32
33int main() {
34 std::vector<int> terms = moserDeBruijn(20);
35 std::cout << "Prvních 20 termínů sekvence Moser-de Bruijn:" << std::endl;
36 for (int term : terms) {
37 std::cout << term << " ";
38 }
39 std::cout << std::endl;
40
41 std::cout << "Je 21 v sekvenci? " << (isMoserDeBruijn(21) ? "true" : "false") << std::endl;
42 std::cout << "Je 22 v sekvenci? " << (isMoserDeBruijn(22) ? "true" : "false") << std::endl;
43
44 return 0;
45}
46Všechny tyto implementace sledují stejný vzor: použití bitových operací pro čtení binárního vyjádření indexu a následné konstruování odpovídajícího součtu mocnin 4. Funkce pro test příslušnosti používají přístup v bázi 4 - kontrolu, zda jsou číslice omezeny na 0 a 1.
Z hlediska výkonu jsou tyto implementace vysoce efektivní. Časová složitost je O(n × log n) pro generování n termínů, protože každý termín vyžaduje prozkoumání O(log i) bitů. Kontrola příslušnosti pro jediné číslo je O(log N), kde N je testované číslo.
Tabulka níže ukazuje prvních 32 termínů s úplnými rozklady. Všimněte si, jak reprezentace v bázi 4 obsahuje pouze 0 a 1, a jak rozklad přímo mapuje na binární indexy:
| Index | Termín | Rozklad | Báze-4 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 4⁰ | 1 |
| 2 | 4 | 4¹ | 10 |
| 3 | 5 | 4¹ + 4⁰ | 11 |
| 4 | 16 | 4² | 100 |
| 5 | 17 | 4² + 4⁰ | 101 |
| 6 | 20 | 4² + 4¹ | 110 |
| 7 | 21 | 4² + 4¹ + 4⁰ | 111 |
| 8 | 64 | 4³ | 1000 |
| 9 | 65 | 4³ + 4⁰ | 1001 |
| 10 | 68 | 4³ + 4¹ | 1010 |
| 11 | 69 | 4³ + 4¹ + 4⁰ | 1011 |
| 12 | 80 | 4³ + 4² | 1100 |
| 13 | 81 | 4³ + 4² + 4⁰ | 1101 |
| 14 | 84 | 4³ + 4² + 4¹ | 1110 |
| 15 | 85 | 4³ + 4² + 4¹ + 4⁰ | 1111 |
| 16 | 256 | 4⁴ | 10000 |
| 17 | 257 | 4⁴ + 4⁰ | 10001 |
| 18 | 260 | 4⁴ + 4¹ | 10010 |
| 19 | 261 | 4⁴ + 4¹ + 4⁰ | 10011 |
| 20 | 272 | 4⁴ + 4² | 10100 |
| 21 | 273 | 4⁴ + 4² + 4⁰ | 10101 |
| 22 | 276 | 4⁴ + 4² + 4¹ | 10110 |
| 23 | 277 | 4⁴ + 4² + 4¹ + 4⁰ | 10111 |
| 24 | 320 | 4⁴ + 4³ | 11000 |
| 25 | 321 | 4⁴ + 4³ + 4⁰ | 11001 |
| 26 | 324 | 4⁴ + 4³ + 4¹ | 11010 |
| 27 | 325 | 4⁴ + 4³ + 4¹ + 4⁰ | 11011 |
| 28 | 336 | 4⁴ + 4³ + 4² | 11100 |
| 29 | 337 | 4⁴ + 4³ + 4² + 4⁰ | 11101 |
| 30 | 340 | 4⁴ + 4³ + 4² + 4¹ | 11110 |
| 31 | 341 | 4⁴ + 4³ + 4² + 4¹ + 4⁰ | 11111 |
Pojďme úplně rozebrat termín 21:
Vidíte vzor? Binární index (111) přímo mapuje, které mocniny 4 zahrnout. Každý bit "1" vám říká, zda máte danou mocninu zahrnout.
Sekvence roste exponenciálně — n-tý termín je přibližně úměrný 4^(log₂(n)). Co to znamená prakticky?
Jak čísla rostou, sekvence se stává stále řidší. Přeskakujete stále více celých čísel. Navzdory této řídkosti sekvence obsahuje nekonečně mnoho termínů — nikdy nepřestane růst.
OEIS A000695 - Moserova-de Bruijnova sekvence. Online encyklopedie celočíselných sekvencí. Komplexní data a vlastnosti sekvence.
De Bruijn, N. G. „O základech pro množinu celých čísel." Publicationes Mathematicae Debrecen, sv. 1, 1950, str. 232-242. Základní práce stanovující klíčové vlastnosti aditivních bází.
Moser, Leo. „Aplikace generujících řad." Mathematics Magazine, sv. 35, č. 1, 1962, str. 37-38. Raná práce zkoumající generující funkce sekvence.
Stolarsky, Kenneth B. „Mocninné a exponenciální sumy digitálních součtů související s paritou binomických koeficientů." SIAM Journal on Applied Mathematics, sv. 32, č. 4, 1977, str. 717-730. Zkoumá vlastnosti digitálních součtů související s sekvencemi jako Moserova-de Bruijnova.
Allouche, Jean-Paul, a Jeffrey Shallit. Automatické sekvence: Teorie, aplikace, zobecnění. Cambridge University Press, 2003. Kapitola pojednávající o automatických sekvencích včetně spojení s Moserovou-de Bruijnovou sekvencí.
Sumově volné množiny - Wikipedie. Pozadí širšího matematického kontextu aditivní teorie čísel.
Aditivní báze - Wikipedie. Přehled množin, které mohou reprezentovat celá čísla jako součty.
Sekvence má několik aplikací: výzkum teorie čísel zkoumající aditivní báze, kombinatorické práce na sumárně volných množinách, výuka informatiky (především pro výuku bitových operací a efektivních algoritmů) a analýza matematických vzorů. Je také skvělým výukovým nástrojem pro pochopení vztahů mezi různými číselnými soustavami.
Vezměte každý index n počínaje 0, převeďte ho do binární soustavy a poté nahraďte každý bit "1" odpovídající mocninou 4. Například index 5 má binární reprezentaci 101, takže vypočítáte 4² + 4⁰ = 16 + 1 = 17. To je 5. člen (počítáno od indexu 0).
Každé číslo v sekvenci má charakteristickou vlastnost: jeho reprezentace v soustavě 4 obsahuje pouze 0 a 1 - nikdy ne 2 nebo 3. To znamená, že každý člen můžete vytvořit sčítáním mocnin 4, kde se každá mocnina vyskytuje maximálně jednou. Je to jako binární soustava, ale s použitím mocnin 4 místo mocnin 2.
Převeďte číslo do soustavy 4 a podívejte se na číslice. Pokud vidíte pouze 0 a 1, je v sekvenci. Pokud je jakákoli číslice 2 nebo 3, není. Například 21 v soustavě 4 je 111 (samé 1 a 0), takže je v sekvenci. Ale 22 v soustavě 4 je 112 (obsahuje 2), takže není.
n-tý člen M(n) následuje tento vzorec: M(n) = Σ(b_i × 4^i), kde b_i reprezentuje binární číslice n. Jednoduše řečeno: zapište n v binární soustavě a pro každou pozici s 1 přičtěte odpovídající mocninu 4.
Ano, pokračuje donekonečna. V sekvenci Moser-de Bruijn existuje nekonečně mnoho členů. Čím výše jdete, tím řidší sekvence bude - přeskakujete stále více běžných celých čísel mezi členy sekvence.
Binární sekvence (součty mocnin 2) mohou reprezentovat každé nezáporné celé číslo - to je podstata binární reprezentace. Sekvence Moser-de Bruijn používá místo toho mocniny 4, což vytváří mnohem řidší množinu. Většina celých čísel se v sekvenci Moser-de Bruijn nevyskytuje.
Leo Moser (1921-1970), rakousko-kanadský matematik, a Nicolaas Govert de Bruijn (1918-2012), nizozemský matematik, oba studovali tuto sekvenci do hloubky v 60. letech jako součást výzkumu aditivní teorie čísel. Sekvence nese jména obou těchto matematiků.
Tento generátor běží zcela ve vašem prohlížeči – bez instalace, bez registrace, bez čekání. Ať už jste student, který se učí o číselných systémech, výzkumník zkoumající aditivní báze, nebo jen matematicky zvědavý, můžete okamžitě generovat termíny a sami pozorovat vzorce. Zkuste generovat různé množství a sledujte, jak sekvence roste a které celé číslo jsou zahrnuty.
Objevte další nástroje, které by mohly být užitečné pro vaši pracovní postup.