Plik dźwiękowy jako prezentacja problemu Collatza (3n+1)

0

#include <iostream>
#include <fstream>

namespace little_endian_io
{
    template <typename Word>
    std::ostream& write_word(std::ostream& outs, Word value, unsigned size = sizeof(Word))
    {
        for (; size; --size, value >>= 8)
            outs.put(static_cast <char> (value & 0xFF));
        return outs;
    }
}
using namespace little_endian_io;


void Write_Headers(std::ofstream & plik)
{
    // Write the file headers
    plik << "RIFF----WAVEfmt "; 
    write_word(plik, 16, 4); 
    write_word(plik, 1, 2); 
    write_word(plik, 2, 2); 
    write_word(plik, 44100, 4); 
    write_word(plik, 176400, 4); 
    write_word(plik, 2, 2); 
    write_word(plik, 16, 2);  
    size_t data_chunk_pos = plik.tellp();
    plik << "data----"; 
}

uint64_t collatz(uint64_t & c) {
    return (c % 2 == 0) ? c / 2 : (3 * c) + 1;
}

int main()
{
    std::ofstream plik;
    plik.open("44_16_out.wav", std::ios::binary);
    Write_Headers(plik);

    for (int l = 1; l < 1860000; l++)
    {
        uint64_t b = l;
        short powtorzenia{ 0 };
        while (collatz(b) != 1) {
            powtorzenia++;
            b = collatz(b);
        }
        write_word(plik, (short)(20 * powtorzenia), 2);
    }
    plik.close();

}

Gdy posłucham pliku dźwiękowego wygenerowanego przez ten program to słyszę wyraźnie powtarzającą się sekwencję brzmień, z tym że powtarzającą się coraz wolniej i wolniej. Jeśli ktoś ma dobre ucho i dobre słuchawki to usłyszy to od razu. Gdy to pierwszy raz posłuchałem to skojarzyło mi się to z fraktalem a potem ze spiralą. Czyżby funkcja Collatza miała jakąś prawidłowość? Plik dźwiękowy jest stereo, ale dla mono jest podobnie. Jeśli ktoś ma cierpliwość, to niech zanalizuje program i posłucha wyniku.

0

No tak, funkcja Collatza to jak wynika z naszej wiedzy (prawie) drzewo (zakładając, że traktujemy 1 jako korzeń i nie powtarzamy cyklu jak do niego dojdziemy). Więc tak, jak najbardziej będzie to tak wyglądało, że dąży do pewnej wartości (dla wszystkich znanych wejść).

4

Wykres liczby iteracji od wartości początkowej.
image
image

1 użytkowników online, w tym zalogowanych: 0, gości: 1