Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2024 14:02:31

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

> Алгоритм: …

Ты еще чертёж сделай по ЕСПД. Если что это сарказм, чертёж мне не нужен
Похоже что твоя ошибка в том что ты пытаешься искать данные в CSV файле. Попробуй перегнать данные в БД или сразу в память (если её хватит). Должно помочь.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 27, 2024 14:02:49)

Офлайн

#2 Июнь 27, 2024 18:54:09

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Rodegast
Попробуй перегнать данные в БД или сразу в память (если её хватит)
Памяти хватает, хотелось бы сделать это без БД.
 data = pandas.read_csv("data.csv", delimiter=",")
Разве data не в памяти содержится?
Rodegast
Похоже что твоя ошибка в том что ты пытаешься искать данные в CSV файле.
Я предполагаю, что я каждый раз вывожу данные в csv файл, операция записи в файл еще и через print очень медленная, наверное нужно как-то по-другому выводить. Сначала сформировать данные, а вывести один раз.

Отредактировано user555 (Июнь 27, 2024 19:00:23)

Офлайн

#3 Июнь 27, 2024 19:08:12

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

> Памяти хватает, хотелось бы сделать это без БД.

Тогда загрузи данные в список и ищи по нему.

> Разве data не в памяти содержится?

data это ссылка на объект который предоставляет доступ к данным. Где эти данные содержатся зависти от реализации этого объекта. Посмотри по диспетчеру задач сколько у тебя памяти расходуется, тогда всё ясно станет.

> наверное нужно как-то по-другому выводить

Для чтения / записи csv файлов есть модуль csv. нужно его использовать.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Июнь 27, 2024 19:18:32

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Rodegast
Посмотри по диспетчеру задач сколько у тебя памяти расходуется, тогда всё ясно станет.
Расходуется в процессе выполнения - 760 Мб
Объем файла data.csv - 720 Мб

Rodegast
Тогда загрузи данные в список и ищи по нему.
У меня весьма поверхностные знания. Признаться это вообще моя первая программа на python.
т.е. если я правильно понял, из каждого столбца создать список и искать по списку исходя из индекса методом iloc?

Отредактировано user555 (Июнь 27, 2024 19:48:01)

Офлайн

#5 Июнь 28, 2024 07:56:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

user555
Входные данные:
No.	Time	port1	Seq	CWS
1 0.01 53023 - 50
2 0.02 443 0 -
3 0.03 53023 - 55
4 0.04 443 49 -
5 0.05 53023 - 60
6 0.06 443 100 -
7 0.07 53023 - 70
8 0.08 443 140 -
9 0.09 53023 - 100
10 0.10 53023 - 100
11 0.11 443 210 -
12 0.12 443 240 -
13 0.13 443 270 -
14 0.14 53023 - 105
15 0.15 443 300 -
16 0.16 53023 - 150
17 0.17 443 400 -
18 0.18 443 550 -
19 0.19 53023 - 160
20 0.20 443 650 -
21 0.21 443 670 -
22 0.22 443 700 -
23 0.23 53023 - 170
24 0.24 443 800 -
25 0.25 443 850 -
26 0.26 53023 - 100
27 0.27 443 900 -
28 0.28 443 920 -
29 0.29 53023 - 100
30 0.30 443 940 -
Выходные данные:
0.02	# значение времени для 2-й строки - разность времени между 4-й строкой и 2-й строкой
0.02 # значение времени для 4-й строки - разность времени между 6-й строкой и 4-й строкой
0.02 # значение времени для 6-й строки - разность времени между 8-й строкой и 6-й строкой
0.04 # значение времени для 8-й строки - разность времени между 12-й строкой и 8-й строкой
0.04 # значение времени для 11-й строки - разность времени между 15-й строкой и 11-й строкой
0.03 # значение времени для 12-й строки - разность времени между 15-й строкой и 12-й строкой
0.04 # значение времени для 13-й строки - разность времени между 17-й строкой и 13-й строкой
0.02 # значение времени для 15-й строки - разность времени между 17-й строкой и 15-й строкой
0.01 # значение времени для 17-й строки - разность времени между 18-й строкой и 17-й строкой
0.04 # значение времени для 18-й строки - разность времени между 22-й строкой и 18-й строкой
0.04 # значение времени для 20-й строки - разность времени между 24-й строкой и 20-й строкой
0.03 # значение времени для 21-й строки - разность времени между 24-й строкой и 21-й строкой
0.03 # значение времени для 22-й строки - разность времени между 25-й строкой и 22-й строкой
0.03 # значение времени для 24-й строки - разность времени между 27-й строкой и 24-й строкой
0.05 # значение времени для 25-й строки - разность времени между 30-й строкой (так как она последняя) и 25-й строкой
0.03 # значение времени для 27-й строки - разность времени между 30-й строкой (так как она последняя) и 27-й строкой
0.02 # значение времени для 28-й строки - разность времени между 30-й строкой (так как она последняя) и 28-й строкой
0 # значение времени для 30-й строки - разность времени между 30-й строкой и 30-й строкой.
Алгоритм:
Так как количество строк известно, запускаю цикл I (for, счётчик цикла - номер строки).
Беру 1-ю строку (I=1). В первой строке значение port1=53023, значит из неё я извлекаю CWS_1 (размер буфер).
Беру 2-ю строку (I=2), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 2-й строкой и N-й (пока неизвестной).
Для I=2 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=1), пока оно не измениться все последующие строки буду сравнивать с ним.
Беру 3-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_3 (55).
Беру 4-ю строку: в ней значение port1=443, значит из неё я считаю seq4-seq2=49, CWS на данный момент 55. Проверяю условие seq4-seq2 <= CWS_3 . Условие выполняется. Продолжаю цикл N.
Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq2=100, CWS на данный момент 60. Проверяю условие seq6-seq2 <= CWS_3. Условие не выполняется. Останавливаю цикл N для I=2.
Беру последнюю строку где условие выполнялось. Считаю разность времени между 4-й строкой и 2-й строкой, получаю значение 0.02, записываю в файл.
Возвращаюсь к циклу I.
Беру 3-ю строку (I=3). В 3-й строке значение port1=53023, значит из неё я извлекаю CWS_3 (60).
Беру 4-ю строку (I=4), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 4-й строкой и N-й (пока неизвестной).
Для I=4 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=3), пока оно не измениться все последующие строки буду сравнивать с ним.
Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq4=51, CWS на данный момент 60. Проверяю условие seq6-seq4 <= CWS_5 . Условие выполняется. Продолжаю цикл N.
Беру 7-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_7 (70).
Беру 8-ю строку: в ней значение port1=443, значит из неё я считаю seq8-seq4=91, CWS на данный момент 70. Проверяю условия seq8-seq4 <= CWS_7. Условие не выполняется. Останавливаю цикл N для I=4.
Беру последнюю строку где условие выполнялось. Считаю разность времени между 6-й строкой и 4-й строкой, получаю значение 0.02, записываю в файл.
Возвращаюсь к циклу I.
Дохожу досюда в этом описании алгоритма
user555
Беру 3-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_3 (55).
Беру 4-ю строку: в ней значение port1=443, значит из неё я считаю seq4-seq2=49, CWS на данный момент 55. Проверяю условие seq4-seq2 <= CWS_3 . Условие выполняется. Продолжаю цикл N.
Почему значение CWS на данный момент равно 55, а не 50?

Возвращаясь к этому пункту алгоритма
user555
Для I=2 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=1), пока оно не измениться все последующие строки буду сравнивать с ним.
Там взято значение 50 и говорится, что с этим значением будут последующие сравнения. Ни одного сравнения со значением 50 дальше в алгоритме нет. О чём тогда речь?

(И ты бы пронумеровал шаги алгоритма хотя бы, чтобы можно было на них ссылаться по номерам.)

Возможно, у тебя сдвиг какой-то этих значений CWS и ты первое значение просто потерял, хотя оно должно проверяться. А если оно проверяться не должно, то это должно быть явно видно.



Офлайн

#6 Июнь 28, 2024 17:06:51

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Алгоритм:
Так как количество строк известно, запускаю цикл I (for, счётчик цикла - номер строки).
1. Беру 1-ю строку (I=1). В первой строке значение port1=53023, значит из неё я извлекаю CWS_1 (размер буфер).
2. Беру 2-ю строку (I=2), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 2-й строкой и N-й (пока неизвестной).
2.1 Для I=2 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=1), пока оно не измениться все последующие строки буду сравнивать с ним.
2.2 Беру 3-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_3 (55).
2.3 Беру 4-ю строку: в ней значение port1=443, значит из неё я считаю seq4-seq2=49, CWS на данный момент 55. Проверяю условие seq4-seq2 <= CWS_3 . Условие выполняется. Продолжаю цикл N.
2.4 Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
2.5 Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq2=100, CWS на данный момент 60. Проверяю условие seq6-seq2 <= CWS_3. Условие не выполняется. Останавливаю цикл N для I=2.
2.6 Беру последнюю строку где условие выполнялось. Считаю разность времени между 4-й строкой и 2-й строкой, получаю значение 0.02, записываю в файл.
2.7 Возвращаюсь к циклу I.
3. Беру 3-ю строку (I=3). В 3-й строке значение port1=53023, значит из неё я извлекаю CWS_3 (60).
3.1 Беру 4-ю строку (I=4), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 4-й строкой и N-й (пока неизвестной).
3.2 Для I=4 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=3), пока оно не измениться все последующие строки буду сравнивать с ним.
3.3 Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
3.4 Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq4=51, CWS на данный момент 60. Проверяю условие seq6-seq4 <= CWS_5 . Условие выполняется. Продолжаю цикл N.
3.5 Беру 7-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_7 (70).
3.6 Беру 8-ю строку: в ней значение port1=443, значит из неё я считаю seq8-seq4=91, CWS на данный момент 70. Проверяю условия seq8-seq4 <= CWS_7. Условие не выполняется. Останавливаю цикл N для I=4.
3.7 Беру последнюю строку где условие выполнялось. Считаю разность времени между 6-й строкой и 4-й строкой, получаю значение 0.02, записываю в файл.
3.8 Возвращаюсь к циклу I.

Офлайн

#7 Июнь 28, 2024 18:51:41

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

py.user.next
Почему значение CWS на данный момент равно 55, а не 50?
Потому что значение буфер (CWS) увеличилось и стало 55 (в строке 2.2). 50 оно было ранее.
Если бы не было данной строки 3 в данных, то мы бы сравнивали бы с 50. А так как “пришло оповещение об изменении” сравниваем с 55.
py.user.next
Там взято значение 50 и говорится, что с этим значением будут последующие сравнения. Ни одного сравнения со значением 50 дальше в алгоритме нет. О чём тогда речь?
Да но в следующей строке оно изменяется.
Речь о том, что “мы” в рамках алгоритма заранее не знаем значение CWS, оно актуально только на момент расчёта.

Давайте для общего понимания (как в ситуации с домами ) представим, что Вы крановщик и в порту загружаете судно. Рядом с Вам стоят представители производителя судна и по его поведению говорят Вам сколько оно Вмещает груза (CWS). И с того момента как они говорят, это становиться характеристикой судна.
Вам надо найти время непосредственно проведения погрузки судна (между двумя погрузками первой и последней), за которое судно будет загружено полностью, в зависимости от того, с какого груза мы начали.
Изначально судно пустое. А размер размер единичного груза (даже самого тяжёлого) не утопит судно (значение веса и возможности погрузки судна сильно отличаются), поэтому первый груз в судно можно грузить даже до объявление производителей.
Время 0.00 - Загрузили 1-й груз- 25 тонны.
Время 0.015 - Вам производитель сообщает, что судно вмещает 100 тонн. Груз разного веса, Вам это становиться известно только когда поднимаете вес (заранее неизвестно).
Время 0.017 - Загрузили 2-й груз - 25 тонны.
Время 0.03 - Загрузили 3-й груз- 15 тонн.
Время 0.040 - Загрузили 4-й груз- 5 тонны (Всего загрузили 70 тонн, 30 еще доступно).
Время 0.041 - Вам производитель сообщает, что судно вмещает 80 тонн. Но Вы загрузили 70 тонн. И теперь Вам осталось загрузить еще 10 тонн. Т.е. размер буфер уменьшился (CWS).
Время 0.05 - Загрузили 5-й груз- 5 тонн.
Время 0.05 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 25 тонн. Т.е. размер буфер увеличился (CWS).
Время 0.07 - Загрузили 6-й груз - 20 тонн.
Время 0.13 - Вы поднимаете 7-й груз, а он вести 10 тонн, больше грузить нельзя.
Считаем 0.07 - 0.00 = 0.07 - Искомое значение, если бы погрузка началась с 1-го груза.

А теперь представим, что Мы бы грузили, 2-й груз и далее в судно, а про 1-й вообще забыли (нам он уже не интересен)
К моменту времени до 0.017 производитель гарантировал, что судно вмещает 100 тонн
Время 0.017 - Загрузили 2-й груз- 25 тонны.
Время 0.03 - Загрузили 3-й груз- 15 тонн.
Время 0.04 - Загрузили 4-й груз- 5 тонны (Всего загрузили 45 тонн, 55 еще доступно).
Время 0.041 - Вам производитель сообщает, что судно вмещает 80 тонн. Но Вы загрузили 45 тонн. И теперь Вам осталось загрузить еще 35 тонн. Т.е. размер буфер уменьшился (CWS).
Время 0.05 - Загрузили 5-й груз- 5 тонн.
Время 0.05 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 50 тонн. Т.е. размер буфер увеличился (CWS).
Время 0.07 - Загрузили 6-й груз- 20 тонн.
Время 0.13 - Загрузили 7-й груз- 20 тонн.
Время 0.14 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 20 тонн. Т.е. размер буфера не изменился(CWS).
Время 0.15 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 20 тонн. Т.е. размер буфера не изменился(CWS).
Время 0.16 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 20 тонн. Т.е. размер буфера не изменился(CWS).
Время 0.17 - Вам производитель сообщает, что судно вмещает 80тонн. Теперь Вы грузить не можете. Т.е. размер буфера уменьшился (CWS).
Считаем 0.13 - 0.017 = 0.133 Искомое значение, если бы погрузка началась с 2-го груза, а все остальные были загружены до этого (нам это не интересно)
Примечание: Время между двумя погрузками (между погрузкой 2-го груза и 7-го груза).

А теперь представим, что Мы бы грузили, 3-й груз и далее в судно, а про 1-й и 2-й вообще забыли (они не интересны)
К моменту времени до 0.03 производитель гарантировал, что судно вмещает 100 тонн
Время 0.03 - Загрузили 3-й груз- 15 тонн.
Время 0.04 - Загрузили 4-й груз- 5 тонны (Всего загрузили 20 тонн, 80 еще доступно).
Время 0.041 - Вам производитель сообщает, что судно вмещает 80 тонн. Но Вы загрузили 20 тонн. И теперь Вам осталось загрузить еще 60 тонн. Т.е. размер буфер уменьшился (CWS).
Время 0.05 - Загрузили 5-й груз- 5 тонн.
Время 0.05 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 75 тонн. Т.е. размер буфер увеличился (CWS).
Время 0.07 - Загрузили 6-й груз- 20 тонн.
Время 0.13 - Загрузили 7-й груз- 20 тонн.
Время 0.14 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 35 тонн. Т.е. размер буфера не изменился(CWS).
Время 0.15 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 35 тонн. Т.е. размер буфера не изменился(CWS).
Время 0.16 - Вам производитель сообщает, что судно вмещает 100 тонн. Теперь Вам осталось загрузить еще 35 тонн. Т.е. размер буфера не изменился(CWS).
Время 0.17 - Вам производитель сообщает, что судно вмещает 80тонн. Теперь Вам осталось загрузить еще 15 тонн. Т.е. размер буфер уменьшился (CWS).
Время 0.20 - Загрузили 8-й груз- 15 тонн. Больше грузить нельзя. Судно полностью загружено.
Считаем 0.20 - 0.03 = 0.17 Искомое значение, если бы погрузка началась с 3-го груза, а все остальные были загружены до этого (нам это не интересно)

Отредактировано user555 (Июнь 28, 2024 19:25:33)

Офлайн

#8 Июнь 28, 2024 19:04:48

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

py.user.next
Возможно, у тебя сдвиг какой-то этих значений CWS и ты первое значение просто потерял, хотя оно должно проверяться. А если оно проверяться не должно, то это должно быть явно видно.
Его вообще можно посмотреть и задать в самом начале. Я собственно в коде так и сделал. Но это характерно только для первых строк (1-й или 2-й) дальше оно всегда будет присутствовать. Можно вообще его поставить максимально возможным (по специфике обрабатываемых данных), потом оно скорректируется (измениться в меньшую сторону).

Например, если бы данные начинались бы так:
 No.	Time	port1	Seq	CWS
1	0.01	443	0	-
2	0.02	443	5	-
3	0.03	53023	-	55
4	0.04	443	49	-
5	0.05	53023	-	60
6	0.06	443	100	-
7	0.07	53023	-	70
Начальное значение CWS_Default можно было бы поставить 9999999999, оно бы уже скорректировалось на 3-й строке. Такого, что за первые строки разность seqN-seqi превысит CWS_Default не будет никогда, они сильно отличаются.

Отредактировано user555 (Июнь 28, 2024 19:24:08)

Офлайн

#9 Июнь 29, 2024 01:40:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Пронумеруй шаги алгоритма с первого по последний сквозной нумерацией. Не пунктами с подпунктами, а просто как 1, 2, …, последняя.

В таких шагах алгоритма

user555
Возвращаюсь к циклу I.
также указывай к какому шагу алгоритма (по его номеру) идёт переход (когда сделаешь сквозную нумерацию шагов алгоритма).

Для выравнивания можешь их нумеровать с ведущим нулём или несколькими ведущими нулями (смотри по общему количеству). Это 01, 02, … или 001, 002, … . Ну у тебя шагов меньше ста, поэтому подойдёт один ведущий ноль 01, 02, …, последняя.

user555
Потому что значение буфер (CWS) увеличилось и стало 55 (в строке 2.2). 50 оно было ранее
Вот там, где происходит переключение на новое значение CWS (там несколько таких пунктов) напиши это ясно, что происходит переключение с такого-то значения на такое-то. Чтобы не надо было до этого догадываться “а вот там оно происходит или мне кажется, что оно там происходит?”. Ясно всё в коде должно быть, не должно быть двусмысленностей.

user555
Давайте для общего понимания (как в ситуации с домами )
Не надо было это писать. У тебя и так каша в голове, мы сидим и как раз её и разгребаем (мы тебе мозги вправляем, у нас-то всё в порядке), так ты ещё и вторую написал для большей путаницы. Конечно, я не буду сидеть и это читать, потому что для этого надо сидеть и сравнивать каждую строчку из этого описания с каждой строчкой из алгоритма, а ты их (эти строки-шаги) даже не пронумеровал (чтобы их отыскивать быстро).

Так что
1) пронумеруй шаги алгоритма правильно, чтобы разные шаги алгоритма не сливались в один шаг алгоритма, чтобы не сидеть и не гадать “там два шага или один шаг? или это просто два предложения в одном шаге?”
2) внеси все ясности в пунктах с изменением одного значения CWS на другое, чтобы тоже не догадываться “оно поменялось или мне показалось это?”
3) добавь в местах перехода к шагам ссылки на номера этих шагов в пронумерованном алгоритме

Дополнительно не надо ничего писать. Какие-то там смещения, переполнения, как там можно было бы сначала сделать, - это всё пока неважно. Ты должен сформулировать, что именно ты хочешь сделать, и выразить это конкретно, чтобы другие тебя понимали однозначно и без угадываний каких-то.

Пронумеруй этот алгоритм.

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

Пока что ты пытаешься нас убедить в том, что ты можешь рисовать кошек, а это ниоткуда не следует. Вот мы и проверяем, что ты там нарисовать пытаешься. Так что делай вот эту нумерацию и всё, потому что вот эта нумерация строк, выравнивание полей, убирание всяких кавычек лишних, - это всё база, это базовые навыки передачи информации между программистами, которыми ты не владеешь и это видно прекрасно, что для тебя это всё впервые происходит, поэтому приходится этим навыкам базовым тебя здесь учить сначала, чтобы ты нам мог информацию передать понятно, а не какую-то приблизительную муть, чтобы нам тут не надо было магические стеклянные шары доставать и смотреть в этих шарах “а из какого же поля он значение достать хочет, из того или из вон того? а то он как-то загадочно это всё описал…”. Учись общаться в профессиональной среде, если взялся программировать там что-то.



Отредактировано py.user.next (Июнь 29, 2024 05:33:58)

Офлайн

#10 Июнь 29, 2024 13:07:25

user555
Зарегистрирован: 2024-06-20
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация скорости выполнения расчётов

Входные данные:

 No.	Time	port1	Seq	CWS
1	0.01	53023	-	50
2	0.02	443	0	-
3	0.03	53023	-	55
4	0.04	443	49	-
5	0.05	53023	-	60
6	0.06	443	100	-
7	0.07	53023	-	70
8	0.08	443	140	-
9	0.09	53023	-	100
10	0.10	53023	-	100
11	0.11	443	210	-
12	0.12	443	240	-
13	0.13	443	270	-
14	0.14	53023	-	105
15	0.15	443	300	-
16	0.16	53023	-	150
17	0.17	443	400	-
18	0.18	443	550	-
19	0.19	53023	-	160
20	0.20	443	650	-
21	0.21	443	670	-
22	0.22	443	700	-
23	0.23	53023	-	170
24	0.24	443	800	-
25	0.25	443	850	-
26	0.26	53023	-	100
27	0.27	443	900	-
28	0.28	443	920	-
29	0.29	53023	-	100
30	0.30	443	940	-

py.user.next
Так что
1) пронумеруй шаги алгоритма правильно, чтобы разные шаги алгоритма не сливались в один шаг алгоритма, чтобы не сидеть и не гадать “там два шага или один шаг? или это просто два предложения в одном шаге?”
2) внеси все ясности в пунктах с изменением одного значения CWS на другое, чтобы тоже не догадываться “оно поменялось или мне показалось это?”
3) добавь в местах перехода к шагам ссылки на номера этих шагов в пронумерованном алгоритме

С учётом Ваших замечаний, постарался всё учесть и дополнить.

01 Получаю общее количество строк в датафрейме. Значение 30.
02 Задаю начальное значение CWS = 1073725440 (максимально возможное согласно спецификации), передаю его в цикл I в качестве начального.
03 Запускаю цикл для I от 1 до 30 и значением CWS.
04 I=1 (первый шаг цикла на строке 03)
05 Цикл I=1 начат со значением CWS=1073725440.
06 Если в строке I=1 значение port1 равно 53023, извлекаю из неё значение CWS.
07 Присваиваю CWS=50.
08 Возвращаюсь к строке 03, беру следующее значение I=2 и передаю в цикл I значение CWS=50.
09 I=2 (следующий шаг цикла на строке 03)
10 Цикл I=2 начат со CWS=50.
11 Если в строке I=2 значение port1 равно 443, извлекаю значения TimeI и seqI.
12 Time2 = 0.02, seq2 = 0
13 Передаю в цикл N значение CWS из цикла I. Начальное значение CWS=50 в цикле N.
14 Запускаю цикл N от N=I+1 до 30 и значенем CWS. от 3 до 30.
15 N=3 (первый шаг цикла на строке 14)
16 Цикл N=3 начат со значением CWS=50.
17 Если в строке N=3 значение port1 равно 53023, извлекаю значение CWS.
18 Присваиваю CWS=55.
19 Возвращаюсь к строке 14, беру следующее значение N=4 и передаю CWS=55 в цикл N.
20 N=4 (следующий шаг цикла на строке 14)
21 Цикл N=4 начат со значением CWS=55.
22 Если в строке N=4 значение port1 равно 443, извлекаю значения seqN.
23 seq4 = 49
24 Проверяю условие seqN-seqi <= CWS. seq4-seq2 <= CWS. 49-0 <= 55. Условие соблюдается.
25 Если условие соблюдается возращаюсь к строке 14 и беру следующее значение N=5.
26 N=5 (следующий шаг цикла на строке 14)
27 Цикл N=5 начат со значением CWS=55.
28 Если в строке N=5 значение port1 равно 53023, извлекаю значение CWS.
29 Присваиваю CWS=60.
30 Возвращаюсь к строке 14, беру следующее значение N=6 и передаю CWS=60 в цикл N.
31 N=6 (следующий шаг цикла на строке 14)
32 Цикл N=6 начат со значением CWS=60.
33 Если в строке N=6 значение port1 равно 443, извлекаю значения seqN.
34 seq6 = 100
35 Проверяю условие seqN-seqi <= CWS. seq6-seq2 <= CWS. 100-0 <= 60. Условие не соблюдается.
36 Ищу в цикле N (цикл N , начинающийся в строке 14), строку в которой условие соблюдалось последний раз.
37 Это строка N=4.
38 В строке 4 извлекаю значение Time4 = 0.04.
39 Вычисляю TimeN-TimeI. Time4-Time2=0.02
40 Вывожу значение в файл csv.
41 Возвращаюсь к строке 03 со следующим значением I=3.
42 I=3 (следующий шаг цикла на строке 03)
43 Цикл I=3 начат со CWS=50. (В цикл I другое значение CWS не передавалось)
44 Если в строке I=3 значение port1 равно 53023, то извлекаю из неё значение CWS.
45 Присваиваю CWS=55
46 Возвращаюсь к строке 03, беру следующее значение I=4 и передаю в цикл I значение CWS=55.
47 I=4 (следующий шаг цикла на строке 03)
48 Цикл I=4 начат со значением CWS=55.
49 Если в строке I=4 значение port1 равно 443, извлекаю значения TimeI и seqI.
50 Time4 = 0.04, seq4 = 49
51 Передаю в цикл N значение CWS из цикла I. Начальное значение CWS=55 в цикле N.
52 Запускаю цикл N от N=I+1 до 30 и значенем CWS. от 5 до 30.
53 N=5 (первый шаг цикла на строке 52)
54 Цикл N=5 начат со значением CWS=55.
55 Если в строке N=5 значение port1 равно 53023, извлекаю значение CWS.
56 Присваиваю CWS=60.
57 Возвращаюсь к строке 52, беру следующее значение N=6 и передаю CWS=60 в цикл N.
58 N=6 (следующий шаг цикла на строке 52)
59 Цикл N=6 начат со значением CWS=60.
60 Если в строке N=6 значение port1 равно 443, извлекаю значения seqN.
61 seq6 = 100
62 Проверяю условие seqN-seqi <= CWS. seq6-seq4 <= CWS. 100-49 <= 60. Условие соблюдается.
63 Если условие соблюдается возращаюсь к строке 52 и беру следующее значение N=7.
64 N=7 (следующий шаг цикла на строке 52)
65 Цикл N=7 начат со значением CWS=60.
66 Если в строке N=7 значение port1 равно 53023, извлекаю значение CWS.
67 Присваиваю CWS=70.
68 Возвращаюсь к строке 52, беру следующее значение N=8 и передаю CWS=70 в цикл N.
69 N=8 (следующий шаг цикла на строке 52)
70 Цикл N=8 начат со значением CWS=70.
71 Если в строке N=8 значение port1 равно 443, извлекаю значение seqN.
72 seq8 = 140
73 Проверяю условие seqN-seqi <= CWS. seq8-seq4 <= CWS. 140-49 <= 70. Условие не соблюдается.
74 Ищу в цикле N (цикл N , начинающийся в строке 52), строку в которой условие соблюдалось последний раз.
75 Это строка N=6.
76 В строке 6 извлекаю значение Time6 = 0.06.
77 Вычисляю TimeN-TimeI. Time6-Time4=0.02
78 Вывожу значение в файл csv.
79 Возвращаюсь к строке 03 со следующим значением I=5.
80 I=5 (следующий шаг цикла на строке 03)
81 Цикл I=5 начат со значением CWS=55. (В цикл I другое значение CWS не передавалось)

Выходные данные
 0.02	# для 02-й строки - разность Time между 04-й строкой и 02-й строкой
0.02	# для 04-й строки - разность Time между 06-й строкой и 04-й строкой
0.02	# для 06-й строки - разность Time между 08-й строкой и 06-й строкой
0.04	# для 08-й строки - разность Time между 12-й строкой и 08-й строкой
0.04	# для 11-й строки - разность Time между 15-й строкой и 11-й строкой
0.03	# для 12-й строки - разность Time между 15-й строкой и 12-й строкой
0.04	# для 13-й строки - разность Time между 17-й строкой и 13-й строкой
0.02	# для 15-й строки - разность Time между 17-й строкой и 15-й строкой
0.01	# для 17-й строки - разность Time между 18-й строкой и 17-й строкой
0.04	# для 18-й строки - разность Time между 22-й строкой и 18-й строкой
0.04	# для 20-й строки - разность Time между 24-й строкой и 20-й строкой
0.03	# для 21-й строки - разность Time между 24-й строкой и 21-й строкой
0.03	# для 22-й строки - разность Time между 25-й строкой и 22-й строкой
0.03	# для 24-й строки - разность Time между 27-й строкой и 24-й строкой
0.05	# для 25-й строки - разность Time между 30-й строкой и 25-й строкой 
0.03	# для 27-й строки - разность Time между 30-й строкой и 27-й строкой 
0.02	# для 28-й строки - разность Time между 30-й строкой и 28-й строкой 
0.00	# для 30-й строки - разность Time между 30-й строкой и 30-й строкой

Отредактировано user555 (Июнь 30, 2024 01:49:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version