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
11237
Россия, Москва
Повторю: со спиралями вытворяйте что хотите, но сжатием любых данных это не называйте, последнее невозможно: если после расжатия обратно должна получаться любая из $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
3728
MakarovDs
Всё, что Вы написали в этой теме, тоже можно сжать.
И не только до нуля, но даже до отрицательной величины.

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


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

 Профиль  
                  
 
 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
11237
Россия, Москва
На спирали Архимеда не похоже ...

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


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

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

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


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

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


11/12/16
13414
уездный город Н
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
4073
MakarovDs
Ну и как коэффициент сжатия?

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


20/08/14
11237
Россия, Москва
Надеюсь Вы не считаете преобразование пяти чисел в три сжатием данных? Ведь не считаете? Потому что эти пять чисел можно смело сжать в одно - попросту записав их цифры подряд в одно число длиной 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
13414
уездный город Н
MakarovDs в сообщении #1619451 писал(а):
Нормально все сжимает, у меня все нормально сжало


:facepalm:

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

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

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



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

Сейчас этот форум просматривают: Bixel


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

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