Выводится это так: проекция на нормаль скоростей будет u1 и u2. После этого можно забыть про все углы, потому что импульс и кинетическая энергия раскладываются на компоненты вдоль координат. Перпендикулярно нормали нет изменений, а вот вдоль будут зменения на числа du1 и du2.
ITeration_Test, Со string у вас тут никах проблем нет. Более того, никакой "ссылки на строку" у вас там нет. Строка передается по значению.
Проблема в каком-то другом месте, которое вы в вопросе не привели. Судя по использованию указателей, скорее всего у вас там проблема работы с памятью и вы не выделяете объект где-то и программа падает, как только вы пытаетесь записать туда строку.
И вообще, инициализация сделана ужасно криво. Если это C++, то заведите конструктор ну или метод в структуре. Или вообще используйте obj.url = "0.png";.
Сергей Горностаев, Вот в C++ основная часть решения действительно есть в библиотеке. Наверняка такое и в питоне есть. Но количества все равно придетется руками считать.
res2001, Вы правы про замену хеш таблицы на массив из 20000 элементов. Это будет, несоменно, быстрее. Но про QuickSelect - как раз и нужно, чтобы он частично отсортировал массив. Надо же в задаче выдать не k-ый с конца, а все k максимальных элемента. И QuickSelect, если его попросить k-ый c конца элемент, как раз положит максимальные k-1 справа от него. Ровно как в задаче и надо. И все это за O(n) в среднем.
Adamos, ох, позор мне: с битами напутал. Пхп может это соптимизировать, если функция встроенная. А вообще, может какая-то встроенная процедура в БД будет быстрее работать.
mayton2019, весьма отдаленно. Только тем, что и там и тут есть какая-то метрика близости строк. Только тут вот метрику подсчитать надо, а в задачах кластеризации считается, что метрика вам дана. Так что никакие алгоритмы кластеризации тут никак не применить.
Adamos, заведите таблицу на 32768 чисел. Для каждой позиции предподсчитайте количество единичных бит. Прибавляйте значения из таблицы для каждой четвертинки из 16 бит. А вообще, в php наверняка есть встроенная функция popcnt, которая быстро подсчитает биты.
Неясно, как это аггрегированное количество нулей во всех строках позволит найти строки, где на заданных позициях 0. Если только вы не предлагаете предподсчитывать количество нулей для всех строк на каждом подмножестве позиций.
Adamos, оптимизация в том, что вы 64 символа сравниваете одной процессорной операцией. Пример: вместо 4 сравнений "0001" с "1000" вы or-ите числа 14 и 7, получая 15 за одну операцию. Потом еще за 4 операции (для 64 бит) вы найдете, что там 4 единичных бита, т.е. в 4 позициях нули есть хотя бы в одной строке. Важно строки перевести в числа до запихивания в бд, если переводить в биты каждый раз, то да, никакого ускорения не будет.
Скорость - вектор. Вот в формулах выше у вас есть v1x, v1y - это компоненты скорости v1. Проекция вычисляется через скалярное произведение векторов.
Я предлагаю делать вычисления в другой системе координат. Там все углы или 0 или 90 - никаких косинусов/синусов.
Вот как-то так: V1,V2 - вектора скорости. N - единичный вектор нормали, m1,m2 - массы:
Может знак где-то перепутал.
Выводится это так: проекция на нормаль скоростей будет u1 и u2. После этого можно забыть про все углы, потому что импульс и кинетическая энергия раскладываются на компоненты вдоль координат. Перпендикулярно нормали нет изменений, а вот вдоль будут зменения на числа du1 и du2.
Уравнения:
Решите их, получите формулы для du1, du2. Потом с этими коэффициентами надо прибавить N к скоростям.