Форум сайта python.su
> Хотелось бы чуть-чуть побыстрее!
Не пробовал через pypy запустить?
> П.С. У меня в целом всё считается, только для расчёта 11 млн. строк у меня затрачивается около 48 часов.
У тебя данные будут где то накапливаться или это только одноразовый расчёт?
Офлайн
user555“Разница во времени” - это что? Какого времени?
Необходимо для каждой строки, в которой значение port1=443 найти разницу во времени между этой и строкой, в которой значение port1 будет равно 443, а разница значений seq не превышает значения CWS.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 -
user555У тебя проблема не в том, что что-то усложняется там переполнением. Ты просто исходную точку не можешь сформулировать чётко и ясно и на этой каше недодуманной ты строишь дальнейшие какие-то рассуждения и построения. Так что начни с начала. До переполнения ты ещё не дошёл даже, ты без переполнения не можешь выполнить задачу и сформулировать алгоритм.
Проблема расчёта осложняется тем
Отредактировано py.user.next (Июнь 26, 2024 16:30:27)
Офлайн
RodegastНет, не пробовал, но я думаю что py.user.next прав, слишком сложный и плавающий алгоритм.
Не пробовал через pypy запустить?
RodegastДанные накапливаться не будут. Подал на вход данные, получил вывод значений в файл и дальше работаю с ним. Если я правильно понял вопрос.
У тебя данные будут где то накапливаться или это только одноразовый расчёт?
py.user.nextСпасибо за подсказу.
(Кстати, видишь, да, она ровненькая? Это потому, что я её выравнивал в редакторе с моноширинным шрифтом, а потом вставлял на форум через буфер обмена.)
py.user.nextСегодня сделаю, постараюсь подробно объяснить, что бы было понятно.
Вот эту таблицу на 13 строк возьми и приведи результат конечный, который должен из неё получиться.
Отредактировано user555 (Июнь 26, 2024 11:50:44)
Офлайн
> я думаю что py.user.next прав, слишком сложный и плавающий алгоритм.
Что в нём сложного? В том что я увидел вроде никакой страшной асимптотике нету.
Офлайн
user555Дело не в алгоритме, а в том, что ты так объясняешь, типа “вон десять домов стоят, мне из них нужны адреса трёх домов только, там они вот рядом стоят которые - вот их адреса нужны, но только вот тех трёх, а не тех, что отдельно стоят”. Каких домов?.. там их по три рядом стоящих можно выбрать n разными способами.
Нет, не пробовал, но я думаю что py.user.next прав, слишком сложный и плавающий алгоритм.
Офлайн
Входные данные:
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-й строкой.
Отредактировано user555 (Июнь 26, 2024 19:04:15)
Офлайн
py.user.nextРазница во времени - Это модуль разности значений полей Time между “I-й” строкой (последовательно берется из набора данных) у которой значение поля port1=443 и “N-й” строкой (неизвестной), в которой port1=443.
“Разница во времени” - это что? Какого времени?
py.user.nextSequence Number (seq) - номер очереди или последовательный номер, показывает порядковый номер пакета при передаче.
“разница значений seq” - это что? Каких значений?
py.user.nextCWS - размер буфера в байтах. Размер буфера меняется как в большую, так и в меньшую сторону.
“не превышает значения CWS” - это что?
py.user.nextС этим сложнее, так как оно меняется в каждом расчёте (как в цикле I, так и в цикле N) за ним необходимо следить.
Какого значения?
Отредактировано user555 (Июнь 27, 2024 07:00:13)
Офлайн
RodegastЭто для Вас нет , а я к сожалению без Вас не могу справиться
Что в нём сложного? В том что я увидел вроде никакой страшной асимптотике нету.
Офлайн
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Условие выполняется как? “Условие” - это что?
Беру 4-ю строку: в ней значение port1=443, значит из неё я считаю seq4-seq2=49, CWS на данный момент 55. Проверяю условия seq4-seq2 > CWS_3. Условие выполнятся. Продолжаю цикл N.
Отредактировано py.user.next (Июнь 27, 2024 00:45:53)
Офлайн
py.user.nextЭто ошибка моего описания, извините, что снова Вас запутываю.
Если это ошибка в знаке больше, то это надо исправить по всему алгоритму.
Отредактировано user555 (Июнь 27, 2024 13:54:12)
Офлайн