Moser-de Bruijn sorozatok azonnali generálása. Számítsa ki a 4-es hatványok összegét kizárólag 0-k és 1-k használatával történő base-4 ábrázolással. Ingyenes online eszköz matematikaoktatáshoz és kutatáshoz.
A Moser-de Bruijn sorozatok olyan számokat tartalmaznak, amelyek 4 hatványainak különböző összegeiként írhatók fel
A Moser-de Bruijn sorozat olyan számokból áll, amelyek a 4 hatványainak különböző összegeiként fejezhetők ki. Leo Moser és Nicolaas Govert de Bruijn matematikusokról elnevezve a sorozat így kezdődik: 0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85...
Mi teszi érdekessé ezt a sorozatot? Ha bármely tagját 4-es alapú számrendszerben írjuk, csak 0 és 1 számjegyeket látunk - soha nem 2-t vagy 3-at. Ez azt jelenti, hogy minden szám úgy épül fel, hogy 4 hatványait (mint 4⁰, 4¹, 4², 4³) adjuk össze, ahol minden hatvány egyszer vagy egyáltalán nem szerepel.
Íme egy gyakorlati példa: A 21 szerepel a sorozatban, mert egyenlő 16 + 4 + 1-gyel, azaz 4² + 4¹ + 4⁰-val. 4-es alapú számrendszerben ez "111"-ként íródik - csak 0-k és 1-esek. Hasonlítsuk össze a 22-vel, amelyhez "2" kellene a 4-es alapú ábrázolásban (122), így nem felel meg a feltételeknek.
A sorozat additív számelméletben, kombinatorikában és összegmentesen halmazok kutatásában jelenik meg. Tekinthetjük úgy, mint a bináris rendszer 4-es alapú unokatestvérét - a 2 hatványai helyett 4 hatványaival dolgozunk. Ez egy sokkal ritkább sorozatot hoz létre, mivel a legtöbb egész szám kimarad.
A generátor használata egyszerű:
A számítások teljes egészében a böngészőben futnak JavaScript segítségével, így nincs szerver késleltetés vagy internetfüggőség - gyors és offline is működik, amint az oldal betöltődött.
A generátor ellenőrzi a bevitelt a hibák megelőzése érdekében:
Miért 1000 tag a korlát? Bár az algoritmus hatékony, ezernél több tag generálása megterhelné a böngésző memóriáját, különösen mobileszközökön. A gyakorlatban ritkán van szükség 100-200 tagnál többre a legtöbb matematikai elemzéshez vagy oktatási célhoz.
A Moser-de Bruijn sorozatot három egyenértékű módon lehet definiálni, amelyek különböző betekintéseket nyújtanak:
Additív forma (4 hatványai): Egy n szám akkor tartozik a sorozathoz, ha fel lehet írni: ahol S tetszőleges nem-negatív egész számok halmaza. Minden 4-es hatványa egyszer vagy egyáltalán nem szerepelhet - ismétlések nem megengedettek.
Négyes alapú ábrázolás (Legegyszerűbb teszt): Alakítsa át a számot négyes alapúvá. Ha csak 0-kat és 1-eseket lát (2-esek és 3-asok nélkül), akkor a sorozatban van. Ez a leggyorsabb módszer a tagság ellenőrzésére kézzel.
Bináris megfeleltetés (Számításhoz leginkább hasznos): Az n-edik tag megtalálásához (n=0-tól kezdve): ahol az n bináris számjegyei. Fordítás: Vegye az index bináris reprezentációját, majd cserélje le minden "1" bitet a megfelelő 4-es hatvánnyal.
Nézzük meg, hogyan működnek ezek a definíciók:
A bináris megfeleltetés módszere az, amit ez a generátor a motorháztető alatt használ - számítási szempontból hatékony, mert a bites műveletek gyorsak.
A generátor bináris megfeleltetést használ, mert gyors és egyszerű:
Lépésről lépésre:
Részletes példa: A 6. tag (index 5) meghatározása
Számoljuk ki M(5)-öt lépésről lépésre:
Ez a módszer jól skálázódik. Nagy indexeknél lényegében bitmozgatást és összeadást végzünk - olyan műveleteket, amelyeket a modern processzorok rendkívül gyorsan hajtanak végre.
Szeretné ellenőrizni, hogy egy adott szám benne van-e a Moser-de Bruijn sorozatban? Használja a 4-es alapú tesztet:
Példa: Benne van-e 85 a sorozatban?
Ellenpélda: Benne van-e 90 a sorozatban?
A generátor JavaScript bitenkénti operátorokat használ, amelyek natívak a nyelvben és rendkívül optimalizáltak a modern böngészőkben.
A Moser-de Bruijn sorozat tiszta egészeket kezel:
Ez az exponenciális növekedés azt jelenti, hogy a sorozat gyorsan nagyra nő. A 20. tag már 340, és a 100. tag millió nagyságrendű számokat tartalmaz.
Számrendszerek tanítása: Amikor ezt használtam tantermi környezetben, a diákok sokkal gyorsabban megértik a számrendszer-átváltásokat, amikor játszhatnak a Moser-de Bruijn sorozattal. Hidat képez a bináris (2-es alapú) és összetettebb számrendszerek között. A diákok azonnal látják, hogyan változtatja meg az alap a sorozat sűrűségét.
Bitműveletek megértése: Informatika szakos hallgatók számára hasznos látni a közvetlen kapcsolatot a bináris ábrázolás és a matematikai sorozatok között. Az algoritmus bemutatja, hogyan fordíthatók le a bitműveletek valós matematikai objektumokká - nem csupán absztrakt műveletekké.
Kombinatorika és összegmentes halmazok: Az additív bázisokat vizsgáló kutatók olyan sorozatokat használnak, mint ez, hogy feltárják, mely halmazok tesznek lehetővé egyedi reprezentációkat. A Moser-de Bruijn sorozat klasszikus példa egy olyan halmazra, ahol minden ábrázolható számnak pontosan egy reprezentációja van.
Additív számelmélet: A sorozat segít vizsgálni, hogyan bonthatók fel az egész számok összegekre. Kapcsolódik az Online Egész Számok Enciklopédiájának (OEIS) problémáihoz, ahol A000695 alatt van katalogizálva.
Algoritmus tervezés: A generáló algoritmus hatékony sorozat-konstruálást mutat be. Minimális számítási terheléssel lehet ezresével generálni a tagokat, ami hasznos algoritmus-teljesítményteszteléshez vagy hatékony kódminták oktatásához.
Mintafelismerési feladatok: Ritka egész számhalmazokkal vagy adattömörítési sémákkal dolgozva a Moser-de Bruijn sorozathoz hasonló sorozatok viselkedésének megértése segít a kódolási stratégiák tervezési döntéseiben.
Ha érdekel a Moser-de Bruijn sorozat, ezek a kapcsolódó sorozatok hasonló mintázatokat kínálnak különböző alapokkal vagy korlátozásokkal:
2 hatványai (OEIS A000079): 1, 2, 4, 8, 16, 32... A legegyszerűbb additív alap. Minden 2 hatványa pontosan egyszer jelenik meg, amelyek a bináris számok építőkövei.
Minden nem-negatív egész szám (Bináris összegek): 0, 1, 2, 3, 4, 5, 6, 7... Amikor megengedsz bármilyen különböző 2 hatványainak összegét, minden lehetséges egész számot megkapsz—ezt teszi a bináris ábrázolás.
Különböző 3 hatványainak összegei (OEIS A005836): 0, 1, 3, 4, 9, 10, 12, 13... Ugyanaz a koncepció, mint a Moser-de Bruijn sorozatnál, de 3 hatványait használva 4 helyett. Ezek azok a számok, amelyeknek a 3-as alapú ábrázolásában csak 0-k és 1-esek vannak.
Fibbináris számok (OEIS A003714): 0, 1, 2, 4, 5, 8, 9, 10... Olyan számok, amelyeknek bináris alakjában nincsenek egymás melletti 1-esek. Kapcsolódik a Fibonacci-szám rendszerekhez és Zeckendorf tételéhez.
Stanley sorozat: A Moser-de Bruijn sorozat 3-as alapú analógja—olyan számok, amelyeknek 3-as alapú ábrázolásában nincsenek 1-esek (csak 0-k és 2-esek megengedettek).
Az Egész Számok Szekvenciáinak Online Enciklopédiája (OEIS) több százezer sorozatot katalogizál. Keressen olyan kifejezésekre, mint „additív alap", „összegmentes halmaz" vagy „különböző hatványok" a kapcsolódó sorozatok megtalálásához. A Moser-de Bruijn sorozat maga A000695 az OEIS adatbázisban.
Leo Moser (1921-1970) és Nicolaas Govert de Bruijn (1918-2012) mindketten maradandó hozzájárulást tettek a matematikához, bár eltérő háttérrel rendelkeztek. Moser, egy osztrák-kanadai matematikus, kiterjedten dolgozott a számelmélet, kombinatorika és geometria területén - nevét talán az Erdős–Moser egyenletből ismerheti. De Bruijn, egy holland matematikus, nyomot hagyott a kombinatorikában, gráfelméletben és számítástudományban. A de Bruijn-sorozatai (amelyek eltérnek ettől a sorozattól) alapvető fontosságúak a kódolási elméletben, és ma is széles körben használatosak.
A névadó sorozat az 1960-as években merült fel az additív számelmélet vizsgálatai során. A matematikusok arra kerestek választ: milyen egészszám-halmazok teszik lehetővé más egészek egyedi összegként történő ábrázolását? A 4 hatványai bizonyultak az egyik ilyen halmaznak, és a Moser-de Bruijn sorozat megragadja az összes lehetséges összeget, amelyet létre lehet hozni.
A sorozat az additív bázisok szélesebb tanulmányozásába illeszkedik - olyan egészszám-halmazokéba, amelyekből más egészek összeadással felépíthetők. Egyes bázisok lehetővé teszik az egyedi reprezentációt (mint a 4 hatványai), míg mások nem. Annak megértése, hogy mely bázisoknak milyen tulajdonságaik vannak, továbbra is aktív kutatási terület az additív számelméletben.
A sorozat megtalálható az OEIS A000695 tételeként, ahol a matematikusok dokumentálták kapcsolatait a bináris reprezentációval, a quaterner (4-es alapú) rendszerekkel és kombinatorikai tulajdonságaival. A modern számítástechnika új felhasználási módokat talált számára, különösen a bitmű veletek és a ritka adatstruktúrák hatékony kódolása terén.
Szeretné saját maga implementálni a Moser-de Bruijn sorozat generátorát? Íme hatékony megvalósítások népszerű programozási nyelveken. Minden példa tartalmaz egy sorozatgenerátort és egy tagság-ellenőrző függvényt.
1def moser_de_bruijn(n):
2 """Generálja a Moser-de Bruijn sorozat első n tagját."""
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: # Ellenőrizze, hogy a legkevésbé jelentős bit 1-e
10 term += power
11 power *= 4
12 temp >>= 1 # Jobbra eltolás a következő bit ellenőrzéséhez
13 sequence.append(term)
14 return sequence
15
16# Példa használat:
17terms = moser_de_bruijn(20)
18print("A Moser-de Bruijn sorozat első 20 tagja:")
19print(terms)
20# Kimenet: [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 """Ellenőrizze, hogy egy szám benne van-e a Moser-de Bruijn sorozatban."""
24 while num > 0:
25 digit = num % 4
26 if digit > 1:
27 return False
28 num //= 4
29 return True
30
31# Ellenőrizze, hogy 21 benne van-e a sorozatban
32print(f"Benne van 21 a sorozatban? {is_moser_de_bruijn(21)}") # True
33print(f"Benne van 22 a sorozatban? {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) { // Ellenőrizze, hogy a legkevésbé jelentős bit 1-e
9 term += power;
10 }
11 power *= 4;
12 temp >>= 1; // Jobbra eltolás a következő bit ellenőrzéséhez
13 }
14 sequence.push(term);
15 }
16 return sequence;
17}
18
19// Példa használat:
20const terms = moserDeBruijn(20);
21console.log("A Moser-de Bruijn sorozat első 20 tagja:");
22console.log(terms);
23// Kimenet: [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// Specifikus számok ellenőrzése
37console.log(`Benne van 21 a sorozatban? ${isMoserDeBruijn(21)}`); // true
38console.log(`Benne van 22 a sorozatban? ${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) { // Ellenőrizze, hogy a legkevésbé jelentős bit 1-e
14 term += power;
15 }
16 power *= 4;
17 temp >>= 1; // Jobbra eltolás a következő bit ellenőrzéséhez
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("A Moser-de Bruijn sorozat első 20 tagja:");
38 System.out.println(terms);
39
40 System.out.println("Benne van 21 a sorozatban? " + isMoserDeBruijn(21)); // true
41 System.out.println("Benne van 22 a sorozatban? " + 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) { // Ellenőrizze, hogy a legkevésbé jelentős bit 1-e
12 term += power;
13 }
14 power *= 4;
15 temp >>= 1; // Jobbra eltolás a következő bit ellenőrzéséhez
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 << "A Moser-de Bruijn sorozat első 20 tagja:" << std::endl;
36 for (int term : terms) {
37 std::cout << term << " ";
38 }
39 std::cout << std::endl;
40
41 std::cout << "Benne van 21 a sorozatban? " << (isMoserDeBruijn(21) ? "true" : "false") << std::endl;
42 std::cout << "Benne van 22 a sorozatban? " << (isMoserDeBruijn(22) ? "true" : "false") << std::endl;
43
44 return 0;
45}
46Minden implementáció ugyanazt a mintát követi: bitműveletek használata egy index bináris reprezentációjának olvasásához, majd a megfelelő 4-es hatványok összegének előállítása. A tagság-ellenőrző függvények a 4-es alapú megközelítést használják - ellenőrizve, hogy a számjegyek 0 és 1 között vannak-e.
Teljesítmény szempontjából ezek az implementációk rendkívül hatékonyak. Az időbonyolultság O(n × log n) n tag generálásánál, mivel minden tag vizsgálata O(log i) bitet igényel. Egy adott szám tagságának ellenőrzése O(log N), ahol N a vizsgált szám.
Az alábbi táblázat az első 32 tagot mutatja teljes részletezéssel. Figyelje meg, hogy a 4-es alapú ábrázolás csak 0-kat és 1-eket tartalmaz, és hogyan képezi le a dekompozíció közvetlenül a bináris indexeket:
| Index | Tag | Dekompozíció | 4-es alap |
|---|---|---|---|
| 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 |
Bontsuk fel teljesen a 21. tagot:
Látja a mintázatot? A bináris index (111) közvetlenül leképezi, hogy melyik 4-es hatványokat kell belefoglalni. Minden "1" bit jelzi, hogy azt a hatványt tartalmazza.
A sorozat exponenciálisan nő - az n-edik tag nagyjából arányos 4^(log₂(n))-nel. Mit jelent ez gyakorlatilag?
Ahogy a számok nagyobbak lesznek, a sorozat egyre ritkábbá válik. Egyre több egész számot hagy ki. Ennek ellenére a sorozat végtelen sok tagot tartalmaz - soha nem áll meg a növekedés.
OEIS A000695 - Moser-de Bruijn sorozat. Az Online Egész Számok Enciklopédiája. A sorozat átfogó adatai és tulajdonságai.
De Bruijn, N. G. „Az egészek halmazának alapjairól." Publicationes Mathematicae Debrecen, 1. kötet, 1950, 232-242. oldal. Az alapvető tanulmány, amely megállapítja az additív bázisok kulcsfontosságú tulajdonságait.
Moser, Leo. „Generátorfüggvények alkalmazása." Mathematics Magazine, 35. kötet, 1. szám, 1962, 37-38. oldal. Korai munka a sorozat generátorfüggvényeinek feltárásáról.
Stolarsky, Kenneth B. „Digitális összegek hatványainak és exponenciális összegének vizsgálata a binom együtthatók paritásával kapcsolatban." SIAM Journal on Applied Mathematics, 32. kötet, 4. szám, 1977, 717-730. oldal. Vizsgálja a digitális összegek tulajdonságait a Moser-de Bruijn sorozathoz hasonló sorozatokkal kapcsolatban.
Allouche, Jean-Paul és Jeffrey Shallit. Automatikus sorozatok: Elmélet, alkalmazások, általánosítások. Cambridge University Press, 2003. Fejezet az automatikus sorozatokról, beleértve a Moser-de Bruijn sorozattal való kapcsolatokat.
Összegmentes halmazok - Wikipedia. Háttérinformációk az additív számelmélet tágabb összefüggéseiről.
Additív bázisok - Wikipedia. Áttekintés azokról a halmazokról, amelyek egész számokat összegként tudnak ábrázolni.
A sorozatnak több alkalmazási területe van: additív bázisok kutatása a számelméletben, összegmentes halmazok kombinatorikája, számítástudományi oktatás (különösen a bites műveletek és hatékony algoritmusok tanítása), valamint matematikai mintaelemzés. Kiváló oktatási eszköz a különböző számrendszerek közötti összefüggések megértéséhez.
Vegyük az n indexet 0-tól kezdve, alakítsuk át bináris formába, majd cseréljük ki minden "1" bitet a megfelelő 4 hatványával. Például az 5-ös index bináris ábrázolása 101, így kiszámoljuk 4² + 4⁰ = 16 + 1 = 17. Ez a sorozat 5. tagja (0-tól indexelve).
A sorozat minden száma rendelkezik egy egyedi tulajdonsággal: 4-es alapú ábrázolása csak 0-kat és 1-eket tartalmaz - soha nem 2-ket vagy 3-asokat. Ez azt jelenti, hogy minden tagot úgy lehet felépíteni, hogy 4 hatványait adjuk össze, ahol minden hatvány legfeljebb egyszer szerepel. Olyan, mint a bináris, de 2 helyett 4 hatványait használva.
Alakítsuk át a számot 4-es alapúvá, és nézzük meg a számjegyeket. Ha csak 0-kat és 1-eket látunk, benne van a sorozatban. Ha bármely számjegy 2 vagy 3, akkor nem. Például 21 4-es alapon 111 (csak 1-esek és 0-ák), tehát benne van. De 22 4-es alapon 112 (tartalmaz egy 2-t), tehát nem.
Az n-edik tag M(n) a következő képlet szerint: M(n) = Σ(b_i × 4^i), ahol b_i az n bináris számjegyeit jelöli. Egyszerűen fogalmazva: írjuk le n-t bináris formában, majd minden 1-es pozícióhoz adjuk hozzá a megfelelő 4 hatványát.
Igen, a végtelenségig tart. A Moser-de Bruijn sorozatnak végtelen sok tagja van. Minél magasabbra megyünk, a sorozat egyre ritkábbá válik - egyre több szabályos egész számot hagyunk ki a tagok között.
A bináris sorozatok (2 hatványainak összege) minden nem negatív egész számot ábrázolhatnak - ez a bináris ábrázolás lényege. A Moser-de Bruijn sorozat 4 hatványait használja, ami egy jóval ritkább halmazt hoz létre. A legtöbb egész szám nem szerepel a Moser-de Bruijn sorozatban.
Leo Moser (1921-1970), egy osztrák-kanadai matematikus, és Nicolaas Govert de Bruijn (1918-2012), egy holland matematikus mindketten mélyrehatóan tanulmányozták ezt a sorozatot az 1960-as években, az additív számelmélet kutatása során. A sorozat mindkét tudós nevét viseli.
Ez a generátor teljes egészében a böngészőjében fut - nincs telepítés, nincs regisztráció, nincs várakozás. Akár diák, aki a számrendszereket tanulja, akár kutató, aki az additív bázisokat vizsgálja, vagy egyszerűen csak matematikailag kíváncsi, azonnal generálhat tagokat és maga is megfigyelheti a mintázatokat. Próbáljon meg különböző mennyiségeket generálni, hogy lássa, hogyan növekszik a sorozat és milyen egész számok kerülnek bele.
Fedezzen fel több olyan eszközt, amely hasznos lehet a munkafolyamatához