Так, я не хрена не понял. В условиях задачи по комбинаторики. Процент, пройденных комбинаций? Типо 1/1 это типо 0%, Дальше, мы типо начинаем брутфорсить. И типо процент отражает перебранные комбинации? UPD Пока, я пробежал 3 км и завершил свой утренний комплекс ОФП, мне пришла в голову аналогия. 1|1===============4|4 Допустим, мы с 1|1======2|4(50%)========4|4 Я верно, понимаю задачу?
Да, верно. Но только мы должны получить комбинацию 2|4 не просто взяв ее из уже всех полученных комбинаций методом (bruteforce), а вывести имея только максимальный и минимальный результаты комбинаций.
Короче, я понял. Для логики нам нужна какая-то математика. Нам нужно, что то типо формулы Гауса для суммы всех чисел от 1 до n. Что-бы ускорить вычисления. Задача именно, для двумерного массива размером в 4 элемента? или n-мерный и на n-элементов? Просто я к чему. 2|4 (50%), верно-же. 4|8 - это тоже самое. Так-хоть до 1000 проходи, просто пропорционально потом прикидывай, хоть до 800000000. Разницы то, нет...а вот с увеличением размерности массива, уже другие вычисления начинаются...
с предыдущей страницы: п.с. господа, учитесь скомпоновывать и выражать свои мысли, чтобы они были понятны хотя бы не только вам.
Сам себе, отвечу. В глаза бросается, элементарное. 1|1 - 0 процентов, ну гипотетически пусть будет 25% от 25%. 1|2 - У нас получается 50 % от 25% общих, верно-же? 1|3 - 75% от 25%. 1|4 - 25%. И по новой... 2|4 - 50% - правильно, да? 3|4 - 75% - да? 4|4 - 100%. Я не могу, уловить. А в чём собственно проблема-то? Как на вход, подаются числа? Т.е. соответствует ли значение элемента, порядку. Что должно, получится на выходе?
Задача для любого размера массива с любыми возможным цифрами. На вход подается только максимально возможные комбинации, тоесть например я знаю что максимум у меня может быть 3|3|3 мне необходимо узнать допустим 0.25 % от этой комбинации. При этом не генерируя этот порядок, и не рассчитывая от уже этих сгенерированных (допустим в цикле комбинаций) эту комбинацию.
Вот, уже лучше. Ты хочешь увидеть, какие элементы будут на этапе перебора в условной точке перебора = 0.25%? Верно? Но опять-же для любого размера - такого в природе не существует. Я просто, попытаюсь объяснить, на пальцах, довольно очевидную вещь. Есть такая штука как кардинальное число множества или мощность множества. Ты очевидно, с этим знаком, из курса мат.анализа. Так, вот мощность счетных множеств, определяется биекцией (взаимно однозначным отображением) на множество натуральных чисел. И тут, у нас проблема. Множество - натуральных чисел бесконечно. Т.е. как сравнить два множества? Если они бесконечны? Правильно по мощности. Ладно, дальше начинается, математика. Я в ней не силён. Тип int, слава Богу в Python неограничен. Теоретически, как я понял. Хотя, как я опять-же понял читая мутную штуку https://docs.python.org/3/library/sys.html#sys.maxsize Там, пишется, что sys.maxsize An integer giving the maximum value a variable of type Py_ssize_t can take. It’s usually 2**31 - 1 on a 32-bit platform and 2**63 - 1 on a 64-bit platform Таким, образом. Я подключил модуль. Присвоил значение переменной. Он выдал. Значение. Окей, двигаемся дальше. Потом, я решил добавить к переменной +1. Всё сработало. Число увеличилось. Потом Я решил умножить на это число. Тоже все сработало. Потом возвести в степень равную этому числу...и тут, Python запущенный из cmd (да, я ещё использую Windows в 2019), начал жрать ресурсы, увеличивая объем выделяемой оперативной памяти. И вот, уже 3 минуты я жду, когда мне программа выдаст результат, и на то как количество памяти возрастает, и не собирается останавливаться на достигнутом. Я прогнозирую, что будет примерно, такой ответ: Traceback (most recent call last): File "<pyshell#60>", line 2, in <module> result = n**result MemoryError Таким, образом подытоживаем, всё вышесказанное. Чё, мы хотим то получить от функции? Сгенерировать комбинации из чисел, которые будут в тех 0.25% и вывести их? Или что? Потому, что тогда, ты можешь, просто ограничить условия перебора и всё. Грубо, говоря. Если не надо перебирать от 1 до 1000. Пусть перебирает от 1000 до 10000. Если, ещё грубее. Числовая прямая, же понятно что такое? Будем думать, что это |1, |2, |3...|n - где n = 100% Если тебе надо 50%? Как ты это сделаешь? Очевидно, что найдешь расстояние. Дальше. Система координат это что? Это взаимнооднозначное отображение двух множеств. 1|1, 2|2, 3|3...n|n. Пусть S= n*n = 100%? Логично же? Количество комбинаций у тебя это площадь. Логично же? Трехмерный массив. Количество элементов - это объем. Четырех мерные, увы я не силен в аналитической геометрии. Просто, этот Японский сложно разобрать. Простите, за мою тупость. Тем, временем оперативная память заполнена на 65%, а результата числа нет...Вывод?
Стоп стоп стоп. Ох, вот например есть массив [6, 6, 6, 6, 6] или [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]. Например для второго кол-во комбинаций 7 в 10-й степени. НИ один комп в мире даже квантовый не сможет посчитать скажем 255 в 100000000000 степени. Мне этого и не нужно. Мне нужно всего лишь даже на маленьких примерах получить комбинацию по проценту. То есть мне не надо просто взять и с начало сгенерировать все возможное ко-во комбинаций, взять и вычислить какая комбинация стоит под каким процентным номером и просто вывести ее (потому что если брать для больших комбинаций то это ждать вечность пока что-то переберет тебе даже ее 0.001%). Мне надо какае-то формула которая зная только максимальную размерность этой комбинации (например 3|3|3 - максимальный ее размер 3-и а каждая цифра ограничена от 1 до 3) получает уже ту комбинацию которая должна стоять под этим номером процента то есть как ты уже понял 111 - учтем что это 0 % максимальное количество комбинаций в данной это 3 в 3 степени что дает нам 27 комбинаций, то есть допустим что 0.5 % это грубо говоря (13.5 потому что если округлить получим среднюю позицию 14) 14, а под ней надо вычислить эту комбинацию которая должна быть (1|3|0).
Давай, пока ограничимся 3-х мерными моделями. Дабы, нам понять, алгоритм. А дальше, перейдём и к [6, 6, 6, 6, 6]. |1 - это числовая прямая. Правильно же. 50% будет точка на прямой, соответсnвующая 50% от n. Логично? Верно-же? А теперь, проще... Есть куча функций для работы с массивами... например hsplit() - разбивает массив, вдоль горизонтальной оси. Т.е. ты заводишь, свой массив. Превращаешь его в одномерный. Находишь элементы, которые лежат у тебя на твоих 50%, с поправкой на окрестность. И получаешь, свои числа... Или за тебя, надо, написать код? P/S чисто у меня досих пор считается...75% оперативной памяти уже занято. Надеюсь, на этот вопрос ты получил ответ.
Массив и так одномерный, что за бред с многомерными массивами ? Не так просто, теперь ты от меня не отделаться, я 2-а года потратил на решение этой задачки так и не решил. Какие многомерные массивы ? я же писал, все что мне известно это всего-лишь то какая комбинация максимальна и минимальна.
Погоди, так ты просто тупо, забиваешь список? [6, 6, 6, 6]...одними и теме-же числами? А изначально пишешь: Вот и пойми, что ты хотел сказать.
Что я должен решить? Стоят два светофора. На светофоре 3 лапмочки. [3,3] Какое количество одновременно горящих и из их комбинаций останется если одну лампочку разбить, на каком-то из сфетофоров? [1,3] [2,3]...[3,1]...[3,3] Ну ок. В твоей задачи. Есть n светофоров, с n лампочками. Сколько останется комбинаций лампочек, если мы по разбивали n количество лампочек? При чем не понятно, сколько лампочек и светофоров, и где лампочки горят, а где не горят. И это нужно реализовать без счетных циклов. Интересная задача. https://ru.wikipedia.org/wiki/Формула_Хартли Пойди туда, ни знаю куда, найди то, ни знаю что.