Generer Moser-de Bruijn sekvenser umiddelbart. Beregn summer av distinkte potenser av 4 med base-4 representasjoner som bruker kun 0-ere og 1-ere. Gratis online verktøy for matematisk utdanning og forskning.
Moser-de Bruijn sekvenser inneholder tall som kan skrives som summer av distinkte potenser av 4
Moser-de Bruijn-sekvensen består av tall som kan uttrykkes som summer av distinkte potenser av 4. Oppkalt etter matematikerne Leo Moser og Nicolaas Govert de Bruijn, starter sekvensen: 0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85...
Hva gjør denne sekvensen interessant? Når du skriver et hvilket som helst ledd i base 4, vil du bare se sifrene 0 og 1 - aldri 2 eller 3. Dette betyr at hvert tall bygges ved å legge sammen potenser av 4 (som 4⁰, 4¹, 4², 4³), hvor hver potens forekommer én gang eller slett ikke.
Her er et praktisk eksempel: Tallet 21 finnes i sekvensen fordi det tilsvarer 16 + 4 + 1, som er 4² + 4¹ + 4⁰. I base 4 skrives dette som "111" - kun 0-ere og 1-ere. Sammenlign dette med 22, som ville trenge et "2" i sin base-4-representasjon (122), så den kommer ikke med.
Sekvensen dukker opp i additiv tallteori, kombinatorikk og forskning på sumfrie sett. Tenk på den som en base-4-fetter til det binære systemet - i stedet for potenser av 2, arbeider du med potenser av 4. Dette skaper en mye glisnere sekvens siden de fleste heltall hoppes over.
Å bruke denne generatoren er enkelt:
Beregningene kjøres helt i nettleseren ved hjelp av JavaScript, så det er ingen serverforsinkelse eller internettavhengighet—det er raskt og fungerer frakoblet så snart siden er lastet.
Generatoren validerer inndata for å forhindre feil:
Hvorfor 1000-termers grensen? Selv om algoritmen er effektiv, kan generering av tusenvis av termer belaste nettleserminnet, spesielt på mobile enheter. I praksis trenger du sjelden mer enn 100-200 termer for de fleste matematiske analyser eller pedagogiske formål.
Du kan definere Moser-de Bruijn-sekvensen på tre ekvivalente måter, hver med forskjellige innsikter:
Additiv form (Potenser av 4): Et tall n tilhører sekvensen når du kan skrive det som: hvor S er et hvilket som helst sett av ikke-negative heltall. Hver potens av 4 kan forekomme én gang eller ikke i hele tatt—ingen gjentakelser er tillatt.
Base-4-representasjon (Enkleste test): Konverter et tall til base 4. Hvis du bare ser 0-ere og 1-ere (ingen 2-ere eller 3-ere), er det i sekvensen. Dette er den raskeste måten å sjekke medlemskap for hånd.
Binær korrespondanse (Mest nyttig for beregning): For å finne det n-te leddet (starter fra n=0): hvor er de binære sifrene til n. Oversettelse: Ta den binære representasjonen av indeksen din, og erstatt så hver "1"-bit med den tilsvarende potensen av 4.
La oss se hvordan disse definisjonene fungerer:
Den binære korrespondansemetoden er det denne generatoren bruker under panseret—den er beregningsmessig effektiv fordi bitoperasjoner er raske.
Generatoren bruker binær korrespondanse fordi den er rask og enkel:
Trinnvis prosess:
Eksempel: Finne den 6. termen (indeks 5)
La oss beregne M(5) trinn for trinn:
Denne metoden skalerer godt. For store indekser gjør du i hovedsak bitforskyvning og addisjon—operasjoner som moderne prosessorer håndterer ekstremt raskt.
Vil du sjekke om et bestemt tall er i Moser-de Bruijn-sekvensen? Bruk base-4-testen:
Eksempel: Er 85 i sekvensen?
Moteksempel: Er 90 i sekvensen?
Generatoren implementerer dette ved bruk av JavaScript's bitwise operatorer, som er innebygd i språket og høyt optimalisert i moderne nettlesere.
Moser-de Bruijn-sekvensen handler om rene heltall:
Denne eksponentielle veksten betyr at sekvensen blir stor raskt. Den 20. termen er allerede 340, og ved den 100. termen håndterer du tall i millionklassen.
Undervisning i Tallsystemer: Når jeg har brukt dette i klasserom, forstår elevene basekonverteringer mye raskere når de kan eksperimentere med Moser-de Bruijn-sekvensen. Den bygger bro mellom binær (base 2) og mer komplekse tallsystemer. Elevene ser umiddelbart hvordan endring av base påvirker sekvensens tetthet.
Forståelse av Bitwise-operasjoner: Datavitenskap-studenter har nytte av å se den direkte koblingen mellom binær representasjon og matematiske sekvenser. Algoritmen viser hvordan bitmanipulasjon oversettes til reelle matematiske objekter—ikke bare abstrakte operasjoner.
Kombinatorikk og Sumfrie Sett: Forskere som studerer additive baser bruker sekvenser som dette for å utforske hvilke sett som tillater unike representasjoner. Moser-de Bruijn-sekvensen er et klassisk eksempel på et sett hvor hvert representérbart tall har nøyaktig én representasjon.
Additiv Talltori: Sekvensen hjelper til med å undersøke spørsmål om hvordan heltall kan dekomponeres til summer. Den er relatert til problemer i Online Encyclopedia of Integer Sequences (OEIS), hvor den er katalogisert som A000695.
Algoritmedesign: Genereringsalgoritmen viser effektiv sekvenskonstruksjon. Du kan generere tusenvis av termer med minimal beregningsoverhead, noe som gjør den nyttig for algoritme-benchmarking eller undervisning i effektive kodingsmønstre.
Mønstergjenkjenningsoppgaver: Når man arbeider med glisne heltallssett eller datakompresjonsskjemaer, hjelper forståelsen av hvordan sekvenser som Moser-de Bruijn oppfører seg til å informere designbeslutninger om kodingsstrategier.
Hvis Moser-de Bruijn-sekvensen interesserer deg, tilbyr disse beslektede sekvensene lignende mønstre med forskjellige baser eller begrensninger:
Potenser av 2 (OEIS A000079): 1, 2, 4, 8, 16, 32... Den enkleste additive basen. Hver potens av 2 vises nøyaktig én gang, og danner byggesteinene til binære tall.
Alle ikke-negative heltall (Binære summer): 0, 1, 2, 3, 4, 5, 6, 7... Når du tillater enhver sum av distinkte potenser av 2, får du alle mulige heltall—det er det binær representasjon gjør.
Summer av distinkte potenser av 3 (OEIS A005836): 0, 1, 3, 4, 9, 10, 12, 13... Samme konsept som Moser-de Bruijn, men ved bruk av potenser av 3 i stedet for 4. Dette er tall hvis base-3-representasjon inneholder kun 0-ere og 1-ere.
Fibbinære tall (OEIS A003714): 0, 1, 2, 4, 5, 8, 9, 10... Tall hvis binære form ikke har påfølgende 1-ere. Forbundet med Fibonacci tallsystemer og Zeckendorfs teorem.
Stanley-sekvensen: Base-3-analogen til Moser-de Bruijn—tall uten 1-ere i deres base-3-representasjon (kun 0-ere og 2-ere er tillatt).
Online Encyclopedia of Integer Sequences (OEIS) katalogiserer hundretusenvis av sekvenser. Søk etter termer som "additiv base", "sum-fri mengde" eller "distinkte potenser" for å finne beslektede sekvenser. Moser-de Bruijn-sekvensen selv er A000695 i OEIS-databasen.
Leo Moser (1921-1970) og Nicolaas Govert de Bruijn (1918-2012) bidro begge varig til matematikken, selv om de kom fra forskjellige bakgrunner. Moser, en østerriksk-kanadisk matematiker, arbeidet grundig innen tallteori, kombinatorikk og geometri—du kjenner kanskje igjen hans navn fra Erdős–Moser-ligningen. De Bruijn, en nederlandsk matematiker, satte sine spor innen kombinatorikk, grafteori og datavitenskap. Hans de Bruijn-sekvenser (forskjellig fra denne) er grunnleggende i kodeteori og fortsatt mye brukt i dag.
Deres navngitte sekvens dukket opp på 1960-tallet under undersøkelser av additiv tallteori. Matematikere stilte spørsmålet: hvilke sett av heltall lar deg unikt representere andre heltall som summer? Potenser av 4 viste seg å være ett slikt sett, og Moser-de Bruijn-sekvensen fanger alle mulige summer du kan lage.
Sekvensen ligger innenfor studiet av additive baser—sett av heltall som kan bygge andre heltall gjennom addisjon. Noen baser tillater unike representasjoner (som potenser av 4), mens andre gjør ikke det. Å forstå hvilke baser som har hvilke egenskaper forblir et aktivt forskningsområde innen additiv tallteori.
Du vil finne denne sekvensen som A000695 i OEIS, hvor matematikere har dokumentert dens forbindelser til binær representasjon, kvarternær (base-4) systemer og kombinatoriske egenskaper. Moderne datavitenskap har funnet nye bruksområder for den, særlig i algoritmer som involverer bitmanipulasjon og effektiv koding av spredte datastrukturer.
Vil du implementere Moser-de Bruijn-sekvens-generatoren selv? Her er effektive implementasjoner i populære programmeringsspråk. Hver eksempel inkluderer både en sekvens-generator og en medlemskapstest-funksjon.
1def moser_de_bruijn(n):
2 """Generer de første n termene i Moser-de Bruijn-sekvensen."""
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: # Sjekk om minst signifikante bit er 1
10 term += power
11 power *= 4
12 temp >>= 1 # Høyre-shift for å sjekke neste bit
13 sequence.append(term)
14 return sequence
15
16# Eksempel på bruk:
17terms = moser_de_bruijn(20)
18print("Første 20 termer i Moser-de Bruijn-sekvensen:")
19print(terms)
20# Utdata: [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 """Sjekk om et tall er i Moser-de Bruijn-sekvensen."""
24 while num > 0:
25 digit = num % 4
26 if digit > 1:
27 return False
28 num //= 4
29 return True
30
31# Sjekk om 21 er i sekvensen
32print(f"Er 21 i sekvensen? {is_moser_de_bruijn(21)}") # Sant
33print(f"Er 22 i sekvensen? {is_moser_de_bruijn(22)}") # Usant
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) { // Sjekk om minst signifikante bit er 1
9 term += power;
10 }
11 power *= 4;
12 temp >>= 1; // Høyre-shift for å sjekke neste bit
13 }
14 sequence.push(term);
15 }
16 return sequence;
17}
18
19// Eksempel på bruk:
20const terms = moserDeBruijn(20);
21console.log("Første 20 termer i Moser-de Bruijn-sekvensen:");
22console.log(terms);
23// Utdata: [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// Sjekk spesifikke tall
37console.log(`Er 21 i sekvensen? ${isMoserDeBruijn(21)}`); // sant
38console.log(`Er 22 i sekvensen? ${isMoserDeBruijn(22)}`); // usant
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) { // Sjekk om minst signifikante bit er 1
14 term += power;
15 }
16 power *= 4;
17 temp >>= 1; // Høyre-shift for å sjekke neste bit
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("Første 20 termer i Moser-de Bruijn-sekvensen:");
38 System.out.println(terms);
39
40 System.out.println("Er 21 i sekvensen? " + isMoserDeBruijn(21)); // sant
41 System.out.println("Er 22 i sekvensen? " + isMoserDeBruijn(22)); // usant
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) { // Sjekk om minst signifikante bit er 1
12 term += power;
13 }
14 power *= 4;
15 temp >>= 1; // Høyre-shift for å sjekke neste bit
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 << "Første 20 termer i Moser-de Bruijn-sekvensen:" << std::endl;
36 for (int term : terms) {
37 std::cout << term << " ";
38 }
39 std::cout << std::endl;
40
41 std::cout << "Er 21 i sekvensen? " << (isMoserDeBruijn(21) ? "sant" : "usant") << std::endl;
42 std::cout << "Er 22 i sekvensen? " << (isMoserDeBruijn(22) ? "sant" : "usant") << std::endl;
43
44 return 0;
45}
46Alle disse implementasjonene følger samme mønster: bruke bitwise-operasjoner for å lese den binære representasjonen av en indeks, og deretter konstruere den tilsvarende summen av 4-potenser. Medlemskapstest-funksjonene bruker base-4-tilnærmingen—sjekker om sifre er begrenset til 0 og 1.
Ytelsesmessig er disse implementasjonene svært effektive. Tidskompleksiteten er O(n × log n) for å generere n termer, siden hver term krever å undersøke O(log i) bits. Å sjekke medlemskap for et enkelt tall er O(log N) hvor N er det testede tallet.
Tabellen nedenfor viser de første 32 termene med fullstendige nedbrytninger. Legg merke til hvordan base-4-representasjonen kun inneholder 0-ere og 1-ere, og hvordan nedbrytningen mapper direkte til binære indekser:
| Indeks | Term | Nedbrytning | 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 |
La oss bryte ned term 21 fullstendig:
Ser du mønsteret? Den binære indeksen (111) mapper direkte til hvilke potenser av 4 som skal inkluderes. Hver "1" bit forteller deg å inkludere den potensen.
Sekvensen vokser eksponentielt—den n-te termen er omtrent proporsjonal med 4^(log₂(n)). Hva betyr dette praktisk?
Ettersom tallene blir større, blir sekvensen stadig mer spredt. Du hopper over flere og flere heltall. Til tross for denne spredningen inneholder sekvensen uendelig mange termer—den slutter aldri å vokse.
OEIS A000695 - Moser-de Bruijn-sekvensen. The Online Encyclopedia of Integer Sequences. Omfattende data og egenskaper ved sekvensen.
De Bruijn, N. G. "Om baser for mengden av heltall." Publicationes Mathematicae Debrecen, vol. 1, 1950, s. 232-242. Grunnleggende artikkel som etablerer sentrale egenskaper ved additive baser.
Moser, Leo. "En anvendelse av genererende serier." Mathematics Magazine, vol. 35, nr. 1, 1962, s. 37-38. Tidlig arbeid som utforsker sekvensens genererende funksjoner.
Stolarsky, Kenneth B. "Kraft- og eksponentielle summer av digitale summer relatert til binomialkoeffisientparitet." SIAM Journal on Applied Mathematics, vol. 32, nr. 4, 1977, s. 717-730. Utforsker digitale sumegenskaper relatert til sekvenser som Moser-de Bruijn.
Allouche, Jean-Paul, og Jeffrey Shallit. Automatiske sekvenser: Teori, anvendelser, generaliseringer. Cambridge University Press, 2003. Kapitteldekkning av automatiske sekvenser, inkludert forbindelser til Moser-de Bruijn-sekvensen.
Sumfrie sett - Wikipedia. Bakgrunn for den bredere matematiske konteksten til additiv talteori.
Additive baser - Wikipedia. Oversikt over sett som kan representere heltall som summer.
Sekvensen har flere bruksområder: tallteori-forskning som utforsker additive baser, kombinatorikk om sumfrie sett, datavitenskap-undervisning (særlig for å lære bitwise operasjoner og effektive algoritmer), og matematisk mønsteranalyse. Det er også et flott verktøy for å forstå hvordan forskjellige tallbaser forholder seg til hverandre.
Ta hver indeks n som starter fra 0, konverter den til binær, og erstatt så hver "1" bit med den tilsvarende potensen av 4. For eksempel har indeks 5 binær representasjon 101, så du beregner 4² + 4⁰ = 16 + 1 = 17. Det er det 5. leddet (regnet fra indeks 0).
Hvert tall i sekvensen har en distinktiv egenskap: dets base-4 representasjon inneholder kun 0-ere og 1-ere—aldri 2-ere eller 3-ere. Dette betyr at du kan bygge hvert ledd ved å legge til potenser av 4 hvor hver potens forekommer høyst én gang. Det er som binær, men ved bruk av potenser av 4 i stedet for potenser av 2.
Konverter tallet til base 4 og se på sifrene. Hvis du kun ser 0-ere og 1-ere, er det i sekvensen. Hvis noe siffer er 2 eller 3, er det ikke det. For eksempel er 21 i base 4 111 (alle 1-ere og 0-ere), så det er med. Men 22 i base 4 er 112 (inneholder en 2), så det er ikke med.
Det n-te leddet M(n) følger denne formelen: M(n) = Σ(b_i × 4^i), hvor b_i representerer de binære sifrene til n. På vanlig språk: skriv n i binær, og for hver posisjon med en 1, legg til den tilsvarende potensen av 4.
Ja, den fortsetter for alltid. Det er uendelig mange ledd i Moser-de Bruijn-sekvensen. Men jo høyere du går, jo mer spredt blir sekvensen—du hopper over stadig flere vanlige heltall mellom sekvensens medlemmer.
Binære sekvenser (summer av potenser av 2) kan representere alle ikke-negative heltall—det er det binær representasjon gjør. Moser-de Bruijn-sekvensen bruker potenser av 4 i stedet, noe som skaper et mye mer spredt sett. De fleste heltall dukker ikke opp i Moser-de Bruijn-sekvensen.
Leo Moser (1921-1970), en østerriksk-kanadisk matematiker, og Nicolaas Govert de Bruijn (1918-2012), en nederlandsk matematiker, studerte begge denne sekvensen grundig på 1960-tallet som en del av forskning innen additiv tallteori. Sekvensen bærer begge deres navn.
Denne generatoren kjører fullstendig i nettleseren din—ingen installasjon, ingen registrering, ingen ventetid. Enten du er en student som lærer om tallsystemer, en forsker som utforsker additive baser, eller bare matematisk nysgjerrig, kan du generere termer umiddelbart og se mønstrene selv. Prøv å generere forskjellige mengder for å observere hvordan sekvensen vokser og hvilke heltall som inkluderes.
Oppdag flere verktøy som kan være nyttige for arbeidsflyten din