2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 00:11 
Аватара пользователя


07/02/22

11
Dmitriy40 в сообщении #1619169 писал(а):
Только не называйте это сжатием данных. Тем более произвольных!! Последнее точно невозможно, математически, доказывается в одну строчку, не позорьтесь.
Не принципиально... Можно вторую кривую такую же сделать и просто запереть её в какую нибудь геометрическую фигуру типа круга, или другой геометрической фигурой, и даже просто менять эту геометрическую фигуру при каждой последующей итерации, и разделить эту геометрическую фигуру на отрезки значений градусов тета, и когда она будет попадать на отрезки круга то будет вносить значение этого отрезка градуса тета в отклонение итерации первой кривой, и рикошетить к следующей нужной итерации для отклонения на то количество градусов для которого нужно попасть первой кривой на отрезок что-бы выдать нужное следующие число в массиве N чисел.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 09:18 
Заслуженный участник


20/08/14
11875
Россия, Москва
Повторю: со спиралями вытворяйте что хотите, но сжатием любых данных это не называйте, последнее невозможно: если после расжатия обратно должна получаться любая из $2^n$ комбинаций, т.е. строка/файл из $n$ битов, то и сжатые данные должны иметь не менее $2^n$ комбинаций (иначе какую-то из выходных комбинаций получить не сможете), т.е. ровно те же $n$ битов, т.е. сжатие полностью отсутствует. Банальная математика.
Либо, для представления $2^n$ входных и выходных комбинаций в данных длиной $n$ битов вы получите $k$ чисел и некоторые несознательные товарищи и называют это сжатием данных, забывая что для точного представления этих $k$ чисел потребуется никак не меньше $n$ битов! И никакого сжатия на самом деле нет. Тут можно действовать без всяких выдумок, просто записать $n$ битов подряд и назвать это одним числом - получится якобы "сжатие" данных в одно число.
Сжатие без возможности расжатия обратно в принципе никого не интересует, это можно сделать и в 1 бит из данных любого объёма, и в 0 бит, просто всегда выдавать как результат сжатия пустую строку/файл. :mrgreen:

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 11:13 
Аватара пользователя


27/02/12
3956
MakarovDs
Всё, что Вы написали в этой теме, тоже можно сжать.
И не только до нуля, но даже до отрицательной величины.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 16:12 


27/08/16
10474
Вода несжимаема.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 16:28 
Аватара пользователя


07/02/22

11
Или как вариант можно это делать в трехмерном пространстве создать 3-x мерную фигуру разделив её на отрезки значений, выстрелить пулей, и заставить фигуру вращаться с какой нибудь скорость типа постоянной или переменной по какой нибудь траектории типа вперед~назад, влево~вправо, и сопоставив скорость~траекторию движения пули изначально, скорость~траекторию~движение фигуры, и градус рикошета пули при столкновении можно вычислить в какие отрезки фигуры она попадет, и найти нужные неизвестные переменные которые выдадут любые нужные числа. Чем не вариант!?

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 20:39 
Аватара пользователя


07/02/22

11
Изображение
То что я имел ввиду выше. Как это называется?

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 20:53 
Заслуженный участник


20/08/14
11875
Россия, Москва
На спирали Архимеда не похоже ...

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 20:55 


17/10/16
4930
Пентаграмма какая-то + нумерология. В общем, для "неограниченного сжатия данных" инструменты, похоже, подходящие.

Впрочем, хорошо, что человек что-то делает с увлечением. Только еще бы немного теорию подтянуть.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 21:38 
Заслуженный участник
Аватара пользователя


15/10/08
30/12/24
12599
Dmitriy40 в сообщении #1619309 писал(а):
На спирали Архимеда не похоже ...
Возможно, у Архимеда было много спиралей и не все из них сохранились в веках. Вот эту конкретную он вполне мог сочинить во время болезни.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение22.11.2023, 23:53 
Аватара пользователя


11/12/16
14050
уездный город Н
Dmitriy40 в сообщении #1619237 писал(а):
после расжатия обратно должна получаться любая из $2^n$


Кстати, есть простая формула, которая чинит голову (если она есть, конечно) любителям поискать алгоритм сжатия, который ужмет любой файл.
Всего файлов длины ровно $n$ бит: $N(n) = 2^n$
Всего файлов длины меньше $n$ бит: $N(<n) = \sum\limits_{i=0}^{n-1} 2^i =2^n -1$
То есть из файлов длины $n$ всегда найдется как минимум один, который не ужмется.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение23.11.2023, 20:00 
Аватара пользователя


07/02/22

11
Короче я доделал тот код который я писал выше при массив индексов, и массив символов:

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
<div class="codetitle"><b>Код:</b></div><div class="codecontent">from itertools import chain

text = """import random
g = random.randint(0,4)
if g == 0:
    print("Kotyk")
if g == 1:
    print("Motyk")   
if g == 2:
    print("Kotopes")     
if g == 3:
    print("Borbies")     
"""


def get_indexes(text):
    chars = list(set(text))
    indexes = []
    for char in chars:
        indexes.append([i for i, c in enumerate(text) if c == char])
    return chars, indexes
   
def get_text_from_symbol_and_index_arrays(symbols, indexes):
    result = ['' for _ in range(max(chain.from_iterable(indexes)) + 1)]
    for symbol, symbol_indexes in zip(symbols, indexes):
        for index in symbol_indexes:
            result[index] = symbol
    print(''.join(result))


symbols, indexes = get_indexes(text)
#print(symbols, indexes)
JackBack=str([ord(xxx) for xxx in symbols]+[(max(indexes)[0])+1]+indexes).replace('], [',', '+str((max(indexes)[0])+1)+", ")
JackBack="["+str(JackBack[1:len(JackBack)-1]).replace("[","").replace("]","")+"]"
#print(JackBack)

get_text_from_symbol_and_index_arrays(symbols, indexes)</div>


И тот код про геометрическую фигуру сделал:

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
<div class="codetitle"><b>Код:</b></div><div class="codecontent">import matplotlib.pyplot as plt
import numpy as np

def create_geometric_shape(numbers):
    num_segments = len(numbers)
    angles = np.linspace(0, 2*np.pi, num_segments+1)[:-1]  # равномерно распределяем углы
    radii = np.array(numbers) * 10  # масштабируем числа для определения радиусов отрезков

    fig = plt.figure()
    ax = fig.add_subplot(111, polar=True)

    # Рисуем отрезки с номерами
    for i in range(num_segments):
        ax.plot([angles[i], angles[i]], [0, radii[i]], label=str(numbers[i]))

    # Устанавливаем радиус и угол для совпадения с последним отрезком
    r = radii[-1] / 2
    theta = angles[-1] + np.pi/2

    plt.legend()
    plt.show()

    return r, theta, fig


def get_numbers_from_geometric_shape(r, theta, fig):
    ax = fig.gca()
    lines = ax.get_lines()

    numbers = []
    for line in lines:
        label = line.get_label()
        if label:
            numbers.append(int(label))

    return numbers


numbers = [2, 4, 3, 1, 5]
r, theta, fig = create_geometric_shape(numbers)
result = get_numbers_from_geometric_shape(r, theta, fig)

print("Исходный массив чисел:", numbers)
print("Результат:", result)</div>


Основная идея программы заключается в использовании библиотеки matplotlib для визуализации геометрической фигуры на полярных координатах. В первой функции create_geometric_shape создается фигура на основе переданного массива чисел, разделенная на отрезки с помощью функции plot. Затем она возвращает радиус r, угол theta и переменную fig, представляющую собой созданную геометрическую фигуру.

Во второй функции get_numbers_from_geometric_shape мы получаем объекты линий из созданной фигуры, получаем метки (номера) каждой линии, и возвращаем массив чисел. Эта функция принимает радиус r, угол theta и переменную fig, возвращаемую из первой функции.

В приведенном примере массив чисел [2, 4, 3, 1, 5] подается на вход первой функции, строится геометрическая фигура и сохраняется радиус r, угол theta и переменная fig. Затем вызывается вторая функция, которая извлекает массив чисел из геометрической фигуры. Полученный результат [2, 4, 3, 1, 5] выводится на экран.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение23.11.2023, 20:16 


17/10/16
4930
MakarovDs
Ну и как коэффициент сжатия?

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение23.11.2023, 20:23 
Заслуженный участник


20/08/14
11875
Россия, Москва
Надеюсь Вы не считаете преобразование пяти чисел в три сжатием данных? Ведь не считаете? Потому что эти пять чисел можно смело сжать в одно - попросту записав их цифры подряд в одно число длиной 5 цифр.

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение23.11.2023, 23:39 
Аватара пользователя


07/02/22

11
sergey zhukov в сообщении #1619439 писал(а):
MakarovDs
Ну и как коэффициент сжатия?
Нормально все сжимает, у меня все нормально сжало. Любую последовательность чисел разжимает, и сжимает. Хоть миллиард, хоть триллиард. В три небольшие переменные.
Изображение
Три переменные: 175.0 7.827910325645937 Figure(640x480)
Выдадут:
Используется синтаксис Python
[40, 48, 116, 32, 110, 58, 115, 41, 109, 10, 49, 107, 46, 105, 77, 111, 100, 61, 101, 112, 66, 34, 44, 75, 121, 50, 103, 98, 102, 97, 114, 51, 52, 164, 32, 58, 88, 121, 158, 164, 33, 46, 164, 5, 31, 57, 62, 87, 92, 120, 125, 157, 164, 6, 15, 17, 40, 42, 45, 49, 50, 51, 52, 70, 72, 75, 79, 80, 81, 82, 97, 98, 99, 103, 105, 108, 112, 113, 114, 115, 132, 133, 134, 135, 136, 140, 142, 145, 149, 150, 151, 152, 169, 170, 171, 172, 173, 164, 9, 20, 27, 30, 56, 86, 119, 156, 164, 47, 77, 110, 147, 164, 129, 166, 164, 36, 66, 96, 131, 168, 164, 1, 12, 23, 164, 13, 37, 48, 67, 78, 100, 111, 137, 148, 174, 164, 76, 164, 64, 94, 164, 24, 164, 0, 29, 38, 55, 68, 85, 101, 118, 138, 155, 164, 164, 90, 164, 3, 11, 22, 61, 91, 124, 126, 161, 164, 10, 21, 28, 164, 16, 43, 44, 73, 74, 106, 107, 143, 144, 164, 128, 165, 164, 2, 53, 83, 116, 127, 153, 164, 160, 164, 59, 65, 89, 95, 122, 130, 159, 167, 164, 34, 164, 60, 123, 164, 63, 93, 164, 109, 164, 14, 41, 71, 104, 141, 164, 163, 164, 39, 69, 102, 139, 164, 8, 19, 26, 164, 4, 7, 18, 25, 54, 84, 117, 154, 162, 164, 146, 164, 35][code][/code]

 Профиль  
                  
 
 Re: Как создать такую функцию спиралей Архимеда? Сжатие данных.
Сообщение23.11.2023, 23:52 
Аватара пользователя


11/12/16
14050
уездный город Н
MakarovDs в сообщении #1619451 писал(а):
Нормально все сжимает, у меня все нормально сжало


:facepalm:

Особенно отличный результат в том, что первые две переменные никак не участвуют в распаковке, поэтому коэффициент сжатия можно улучшить ещё в три раза.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group