Okamžite generujte Moser-de Bruijnove postupnosti. Počítajte sumy rôznych mocnín 4 s reprezentáciou v báze 4 pomocou iba 0 a 1. Bezplatný online nástroj pre matematické vzdelávanie a výskum.
Moser-de Bruijnove postupnosti obsahujú čísla, ktoré možno zapísať ako súčty rôznych mocnín čísla 4
Sekvencia Moser-de Bruijn pozostáva z čísel, ktoré možno vyjadriť ako súčty rôznych mocnín 4. Pomenovaná podľa matematikov Lea Mosera a Nicolaasa Goverta de Bruijna, sekvencia začína: 0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85...
Čo robí túto sekvenciu zaujímavou? Keď napíšete ktorýkoľvek člen v base 4, uvidíte iba číslice 0 a 1 - nikdy 2 alebo 3. To znamená, že každé číslo je vytvorené súčtom mocnín 4 (ako 4⁰, 4¹, 4², 4³), kde každá mocnina sa vyskytuje buď raz, alebo vôbec.
Tu je praktický príklad: Číslo 21 sa nachádza v sekvencii, pretože sa rovná 16 + 4 + 1, čo je 4² + 4¹ + 4⁰. V base 4 sa toto zapisuje ako "111" - iba 0 a 1. Porovnajte to s číslom 22, ktoré by potrebovalo "2" v jeho base-4 reprezentácii (122), takže sa do sekvencie nedostane.
Sekvencia sa objavuje v adatívnej teórii čísel, kombinatorike a výskume súm-voľných množín. Môžete si ju predstaviť ako base-4 príbuzného binárneho systému - namiesto mocnín 2 pracujete s mocninami 4. To vytvára oveľa redšiu sekvenciu, keďže väčšina celých čísel je vynechaná.
Používanie tohto generátora je jednoduché:
Výpočty prebiehajú úplne vo vašom prehliadači pomocou JavaScriptu, takže nie je žiadne oneskorenie servera alebo závislosť na internete - je to rýchle a funguje offline po načítaní stránky.
Generátor overuje váš vstup, aby predišiel chybám:
Prečo limit 1000 termínov? Hoci je algoritmus efektívny, generovanie tisícok termínov môže zaťažiť pamäť prehliadača, najmä na mobilných zariadeniach. V praxi zriedka potrebujete viac ako 100-200 termínov pre väčšinu matematickej analýzy alebo vzdelávacích účelov.
Sekvenciu Moser-de Bruijn môžete definovať tromi ekvivalentnými spôsobmi, pričom každý ponúka rôzne pohľady:
Adatívna forma (mocniny 4): Číslo n patrí do sekvencie, keď ho môžete zapísať ako: kde S je ľubovoľná množina nezáporných celých čísel. Každá mocnina 4 sa môže vyskytnúť raz alebo vôbec—nie sú povolené opakovania.
Reprezentácia v báze 4 (najjednoduchší test): Preveďte číslo do bázy 4. Ak vidíte iba 0 a 1 (bez 2 a 3), je v sekvencii. Toto je najrýchlejší spôsob, ako ručne skontrolovať príslušnosť.
Binárna korešpondencia (najužitočnejšia pre výpočty): Nájdenie n-tého člena (začínajúc n=0): kde sú binárne číslice n. Preklad: Vezmite binárnu reprezentáciu indexu a potom nahraďte každý bit "1" zodpovedajúcou mocninou 4.
Pozrime sa, ako tieto definície fungujú:
Metóda binárnej korešpondencie je to, čo tento generátor používa vnútorne—je výpočtovo efektívna, pretože bitové operácie sú rýchle.
Generátor využíva binárnu korešpondenciu, pretože je rýchly a priamočiary:
Krok za krokom:
Praktický príklad: Nájdenie 6. termínu (index 5)
Vypočítajme M(5) krok za krokom:
Táto metóda sa dobre škáluje. Pre veľké indexy ide v podstate o bitový posun a sčítanie - operácie, ktoré moderné procesory zvládajú mimoriadne rýchlo.
Chcete skontrolovať, či konkrétne číslo je v Moser-de Bruijnovej postupnosti? Použite test v base-4:
Príklad: Je 85 v postupnosti?
Protipríklad: Je 90 v postupnosti?
Generátor implementuje toto pomocou bitových operátorov v JavaScripte, ktoré sú natívne a vysoko optimalizované v moderných prehliadačoch.
Moser-de Bruijnova postupnosť pracuje s čistými celými číslami:
Tento exponenciálny rast znamená, že postupnosť rýchlo narastá. 20. termín je už 340 a pri 100. termíne sa už pohybujete v miliónoch.
Výučba číselných systémov: Keď som toto použil v triedach, žiaci oveľa rýchlejšie pochopia konverziu báz, keď sa môžu hrať s postupnosťou Moser-de Bruijn. Premosťuje medzeru medzi binárnym (base 2) a zložitejšími číselnými systémami. Žiaci okamžite vidia, ako zmena bázy mení hustotu postupnosti.
Pochopenie bitových operácií: Študenti informatiky profitujú z priameho prepojenia medzi binárnym zobrazením a matematickými postupnosťami. Algoritmus ukazuje, ako sa manipulácia bitov prekladá do reálnych matematických objektov - nie len abstraktných operácií.
Kombinatorika a súčtovo-voľné množiny: Výskumníci skúmajúci aditívne bázy používajú takéto postupnosti na skúmanie množín, ktoré umožňujú jedinečné reprezentácie. Postupnosť Moser-de Bruijn je učebnicovým príkladom množiny, kde každé reprezentovateľné číslo má práve jednu reprezentáciu.
Aditívna teória čísel: Postupnosť pomáha skúmať otázky o tom, ako možno celé čísla rozložiť na súčty. Súvisí s problémami v Online encyklopédii celočíselných postupností (OEIS), kde je katalogizovaná ako A000695.
Návrh algoritmov: Generačný algoritmus ukazuje efektívnu konštrukciu postupnosti. Môžete vygenerovať tisíce termínov s minimálnou výpočtovou réžiou, čo je užitočné pre benchmarking algoritmov alebo výučbu efektívnych programovacích vzorov.
Úlohy rozpoznávania vzorov: Pri práci so zriedkavými číselnými množinami alebo schémami kompresie dát pomáha pochopenie správania sa postupností ako Moser-de Bruijn informovať rozhodnutia o stratégiách kódovania.
Ak vás postupnosť Moser-de Bruijn zaujíma, tieto súvisiace postupnosti ponúkajú podobné vzory s rôznymi základmi alebo obmedzeniami:
Mocniny 2 (OEIS A000079): 1, 2, 4, 8, 16, 32... Najjednoduchší sčítací základ. Každá mocnina 2 sa objaví presne raz a vytvára stavebné bloky binárnych čísel.
Všetky nezáporné celé čísla (Binárne súčty): 0, 1, 2, 3, 4, 5, 6, 7... Keď povolíte ľubovoľný súčet rôznych mocnín 2, dostanete každé možné celé číslo—to je to, čo binárne vyjadrenie robí.
Súčty rôznych mocnín 3 (OEIS A005836): 0, 1, 3, 4, 9, 10, 12, 13... Rovnaký koncept ako Moser-de Bruijn, ale s použitím mocnín 3 namiesto 4. Sú to čísla, ktorých trojková reprezentácia obsahuje len 0 a 1.
Fibbinárne čísla (OEIS A003714): 0, 1, 2, 4, 5, 8, 9, 10... Čísla, ktorých binárny tvar nemá po sebe idúce 1. Súvisia s Fibonacciho číselnými systémami a Zeckendorfovou vetou.
Stanleyho postupnosť: Trojkový analog Moser-de Bruijn—čísla, ktorých trojková reprezentácia nemá 1 (povolené sú len 0 a 2).
Online encyklopédia celočíselných postupností (OEIS) katalogizuje stovky tisíc postupností. Vyhľadajte termíny ako „sčítací základ", „súčtovo-voľná množina" alebo „rôzne mocniny" a nájdete súvisiace postupnosti. Samotná postupnosť Moser-de Bruijn je v databáze OEIS vedená ako A000695.
Leo Moser (1921-1970) a Nicolaas Govert de Bruijn (1918-2012) obaja prispeli trvalým spôsobom do matematiky, hoci pochádzali z rôznych prostredí. Moser, rakúsko-kanadský matematik, sa rozsiahle venoval teórii čísel, kombinatorike a geometrii - jeho meno môžete poznať z Erdős–Moserovej rovnice. De Bruijn, holandský matematik, zanechal stopu v kombinatorike, teórii grafov a informatike. Jeho de Bruijnove sekvencie (odlišné od tejto) sú základné v teórii kódovania a stále sa dnes široko využívajú.
Ich spoločná sekvencia sa objavila v 60. rokoch počas skúmania aditívnej teórie čísel. Matematici kládli otázku: ktoré množiny celých čísel umožňujú jedinečne reprezentovať iné celé čísla ako súčty? Mocniny 4 sa ukázali byť jednou takou množinou a Moser-de Bruijnova sekvencia zachytáva všetky možné súčty, ktoré možno vytvoriť.
Sekvencia sa nachádza v širšom štúdiu aditívnych báz - množín celých čísel, ktoré možno vytvárať pomocou sčítania. Niektoré bázy umožňujú jedinečné reprezentácie (ako mocniny 4), iné nie. Pochopenie vlastností rôznych báz zostáva aktívnou oblasťou výskumu v aditívnej teórii čísel.
Túto sekvenciu nájdete ako A000695 v OEIS, kde matematici zdokumentovali jej prepojenia s binárnou reprezentáciou, quaternárnymi (base-4) systémami a kombinatorickými vlastnosťami. Moderná informatika našla pre ňu nové využitia, najmä v algoritmoch zahŕňajúcich manipuláciu s bitmi a efektívne kódovanie riedkych dátových štruktúr.
Chcete si sami implementovať generátor sekvencie Moser-de Bruijn? Tu sú efektívne implementácie v populárnych programovacích jazykoch. Každý príklad obsahuje generátor sekvencie aj funkciu na testovanie príslušnosti.
1def moser_de_bruijn(n):
2 """Generovať prvých n termínov sekvencie 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: # Skontrolovať, či je najmenej významný bit 1
10 term += power
11 power *= 4
12 temp >>= 1 # Posun doprava pre kontrolu ďalšieho bitu
13 sequence.append(term)
14 return sequence
15
16# Príklad použitia:
17terms = moser_de_bruijn(20)
18print("Prvých 20 termínov sekvencie 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 """Skontrolovať, či je číslo v sekvencii 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# Skontrolovať, či je 21 v sekvencii
32print(f"Je 21 v sekvencii? {is_moser_de_bruijn(21)}") # True
33print(f"Je 22 v sekvencii? {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) { // Skontrolovať, či je najmenej významný bit 1
9 term += power;
10 }
11 power *= 4;
12 temp >>= 1; // Posun doprava pre kontrolu ďalšieho bitu
13 }
14 sequence.push(term);
15 }
16 return sequence;
17}
18
19// Príklad použitia:
20const terms = moserDeBruijn(20);
21console.log("Prvých 20 termínov sekvencie 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// Skontrolovať konkrétne čísla
37console.log(`Je 21 v sekvencii? ${isMoserDeBruijn(21)}`); // true
38console.log(`Je 22 v sekvencii? ${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) { // Skontrolovať, či je najmenej významný bit 1
14 term += power;
15 }
16 power *= 4;
17 temp >>= 1; // Posun doprava pre kontrolu ďalšieho 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("Prvých 20 termínov sekvencie Moser-de Bruijn:");
38 System.out.println(terms);
39
40 System.out.println("Je 21 v sekvencii? " + isMoserDeBruijn(21)); // true
41 System.out.println("Je 22 v sekvencii? " + 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) { // Skontrolovať, či je najmenej významný bit 1
12 term += power;
13 }
14 power *= 4;
15 temp >>= 1; // Posun doprava pre kontrolu ďalšieho 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 << "Prvých 20 termínov sekvencie 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 sekvencii? " << (isMoserDeBruijn(21) ? "true" : "false") << std::endl;
42 std::cout << "Je 22 v sekvencii? " << (isMoserDeBruijn(22) ? "true" : "false") << std::endl;
43
44 return 0;
45}
46Všetky tieto implementácie sledujú rovnaký vzor: použitie bitových operácií na čítanie binárnej reprezentácie indexu a následné konštruovanie zodpovedajúceho súčtu mocnín 4. Funkcie na testovanie príslušnosti používajú prístup v báze 4 - kontrolu, či sú číslice obmedzené na 0 a 1.
Z hľadiska výkonnosti sú tieto implementácie vysoko efektívne. Časová zložitosť je O(n × log n) pre generovanie n termínov, keďže každý termín vyžaduje skúmanie O(log i) bitov. Kontrola príslušnosti pre jediné číslo je O(log N), kde N je testované číslo.
Tabuľka nižšie zobrazuje prvých 32 termínov s úplnými rozkladmi. Všimnite si, ako reprezentácia v base-4 obsahuje iba 0 a 1, a ako rozklad priamo zodpovedá binárnym indexom:
| Index | Term | Rozklad | Base-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 |
Rozoberme term 21 úplne:
Vidíte vzor? Binárny index (111) priamo mapuje, ktoré mocniny 4 zahrnúť. Každý "1" bit vám hovorí, ktorú mocninu zahrnúť.
Sekvencia rastie exponenciálne — n-tý term je približne úmerný 4^(log₂(n)). Čo to znamená prakticky?
Ako sa čísla zväčšujú, sekvencia sa stáva čoraz redšou. Preskakujete stále viac a viac celých čísel. Napriek tejto redkosti sekvencia obsahuje nekonečne veľa termínov — nikdy neprestane rásť.
OEIS A000695 - Moser-de Bruijnova postupnosť. Online encyklopédia celočíselných postupností. Komplexné údaje a vlastnosti postupnosti.
De Bruijn, N. G. „O základoch pre množinu celých čísel." Publicationes Mathematicae Debrecen, zv. 1, 1950, str. 232-242. Základný vedecký článok stanovujúci kľúčové vlastnosti aditívnych základov.
Moser, Leo. „Aplikácia generujúcich radov." Mathematics Magazine, zv. 35, č. 1, 1962, str. 37-38. Skorá práca skúmajúca generujúce funkcie postupnosti.
Stolarsky, Kenneth B. „Mocninné a exponenciálne sumy digitálnych súčtov súvisiacich s paritou binomických koeficientov." SIAM Journal on Applied Mathematics, zv. 32, č. 4, 1977, str. 717-730. Skúma vlastnosti digitálnych súčtov súvisiacich s postupnosťami ako Moser-de Bruijnova.
Allouche, Jean-Paul, a Jeffrey Shallit. Automatické postupnosti: Teória, aplikácie, zovšeobecnenia. Cambridge University Press, 2003. Kapitola pokrývajúca automatické postupnosti vrátane súvislostí s Moser-de Bruijnovou postupnosťou.
Súčtovo-voľné množiny - Wikipédia. Pozadie širšieho matematického kontextu aditívnej teórie čísel.
Aditívne základy - Wikipédia. Prehľad množín, ktoré môžu reprezentovať celé čísla ako súčty.
Sekvencia má niekoľko aplikácií: výskum teórie čísel skúmajúci aditívne bázy, kombinatorickú prácu na sumárne voľných množinách, výučbu počítačových vied (najmä pre vyučovanie bitových operácií a efektívnych algoritmov) a analýzu matematických vzorov. Je tiež skvelým výučbovým nástrojom pre pochopenie vzťahov medzi rôznymi číselnými sústavami.
Vezmite každý index n začínajúc od 0, preveďte ho do binárnej sústavy, potom nahraďte každý bit "1" zodpovedajúcou mocninou 4. Napríklad index 5 má binárne zastúpenie 101, takže vypočítate 4² + 4⁰ = 16 + 1 = 17. To je 5. člen (počítané od indexu 0).
Každé číslo v sekvencii má charakteristickú vlastnosť: jeho reprezentácia v base-4 obsahuje iba 0 a 1 - nikdy nie 2 alebo 3. To znamená, že každý člen môžete vytvoriť pridaním mocnín 4, kde sa každá mocnina vyskytuje maximálne raz. Je to ako binárny systém, ale s použitím mocnín 4 namiesto mocnín 2.
Preveďte číslo do base-4 a pozrite sa na číslice. Ak vidíte iba 0 a 1, je v sekvencii. Ak je akákoľvek číslica 2 alebo 3, nie je. Napríklad 21 v base-4 je 111 (všetky 1 a 0), takže je v sekvencii. Ale 22 v base-4 je 112 (obsahuje 2), takže nie je.
n-tý člen M(n) nasleduje tento vzorec: M(n) = Σ(b_i × 4^i), kde b_i reprezentuje binárne číslice n. Jednoducho povedané: zapíšte n v binárnej sústave, potom pre každú pozíciu s 1 pridajte zodpovedajúcu mocninu 4.
Áno, pokračuje donekonečna. Existuje nekonečne veľa členov v sekvencii Moser-de Bruijn. Avšak čím vyššie idete, tým sa sekvencia stáva redšou - vynechávate stále viac a viac bežných celých čísel medzi členmi sekvencie.
Binárne sekvencie (súčty mocnín 2) môžu reprezentovať každé nezáporné celé číslo - to je podstata binárnej reprezentácie. Sekvencia Moser-de Bruijn používa namiesto toho mocniny 4, čo vytvára oveľa redšiu množinu. Väčšina celých čísel sa nevyskytuje v sekvencii Moser-de Bruijn.
Leo Moser (1921-1970), rakúsko-kanadský matematik, a Nicolaas Govert de Bruijn (1918-2012), holandský matematik, obaja hlboko skúmali túto sekvenciu počas 60. rokov ako súčasť výskumu aditívnej teórie čísel. Sekvencia nesie mená oboch.
Tento generátor beží úplne vo vašom prehliadači - bez inštalácie, bez registrácie, bez čakania. Či už ste študent učiaci sa o číselných systémoch, výskumník skúmajúci aditívne bázy, alebo len matematicky zvedavý, môžete okamžite generovať termíny a sami vidieť vzory. Skúste generovať rôzne množstvá a pozorujte, ako sa postupnosť rozrastá a ktoré celé čísla sú zahrnuté.
Objavte ďalšie nástroje, ktoré by mohli byť užitočné pre vašu pracovnú postupnosť