|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
Варианты конвертации bool/byte/int в byte/int11.01.2019, 12:56. Показов 5864. Ответов 102
Метки нет (Все метки)
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А вот меня интересует преобразование числовых данных отличных от нуля в единицу, а нулевых значений в ноль.
Я воспользовался уже двумя реализациями (на самом деле есть еще две, но они сильно зависят от контекста и не являются универсальными), и по производительности остановился на первой: 1)
0
|
||||||||||||||||
| 11.01.2019, 12:56 | |
|
Ответы с готовыми решениями:
102
int в byte
Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно" |
|
95 / 74 / 27
Регистрация: 13.08.2018
Сообщений: 203
|
||||||
| 18.01.2019, 03:56 | ||||||
|
Чуть ускорил, теперь считает за три секунды.
Кликните здесь для просмотра всего текста
0
|
||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 18.01.2019, 05:31 [ТС] | |||
|
2260798720 : 50585009280 : 00:07:33.2875009 ваше 2015854720 : 00:00:00.5064325 значения выходные не совпадают. я правильно понимаю что вы упаковываете матрицу в одну переменную int? этого делать не то чтобы не нужно - это не имеет смысла, так как 5 бит - частный случай и при 64 битах упаковывать будет некуда. вы исключили сравнение "каждый с каждым", foreach (var group in ranges.OrderBy(x => x.Begin).GroupBy(x => x.Begin)) является его заменой?
0
|
|||
|
95 / 74 / 27
Регистрация: 13.08.2018
Сообщений: 203
|
||||
| 18.01.2019, 05:51 | ||||
|
0
|
||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|||||||
| 18.01.2019, 05:55 | |||||||
0
|
|||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 18.01.2019, 06:27 [ТС] | ||||||
|
у вас есть матрица 64х64, чтобы получить все комбинации бит в такой матрице нужно использовать 64 ulong переменные и производить инкремент каждой таким образом, чтобы перебрать все значения. это только даст доступ к исходным данным, теперь у нас есть всё, чтобы с этими данными работать. условно, есть черный ящик, который на входе принимает такие данные, делает вычисления и результаты сравнивает со всеми предыдущими, если находит совпадение, то обозначает это. Финал работы программы - как раз поиск таких совпадений. Добавлено через 5 минут я не вижу в вашей реализации расчета хэша.
0
|
||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|||
| 18.01.2019, 06:39 | |||
|
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 18.01.2019, 06:42 [ТС] | ||
|
1048576 : 2260798720 : 50585009280 : 00:03:27.6732082 моё 2260798720 : 50585009280 : 00:07:33.2875009 как видно - число итераций по проверке сокращено с 2,2 млрд до 1,1 млн. То есть в 2000 раз. вы могли бы прокомментировать добавленные строки?
0
|
||
|
95 / 74 / 27
Регистрация: 13.08.2018
Сообщений: 203
|
|||||||
| 18.01.2019, 06:43 | |||||||
|
Здесь два способа подсчета countIn, угадайте почему считает пои разному ? Кликните здесь для просмотра всего текста
0
|
|||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|
| 18.01.2019, 06:44 | |
|
0
|
|
|
95 / 74 / 27
Регистрация: 13.08.2018
Сообщений: 203
|
|||||||||||
| 18.01.2019, 06:56 | |||||||||||
|
Вот для примера два варианта, без СRC8. Первый обычный, второй ускоренный. Оба дают один и тот же ответ.
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||
| 18.01.2019, 11:00 [ТС] | |||||||
|
вы можете убрать мои оптимизации и применять только свои.
0
|
|||||||
|
Модератор
|
|||
| 18.01.2019, 12:44 | |||
|
Вам надо менять теоретическую часть. В лоб такую задачу не решить. Время решения задачи у Вас пропорционально четырём в степени стороны матрицы. Поэтому придумывать способы оптимизации для размеров 5х5, 10х10, 15х15 и т.д. - смысла нет. Конечное время, для 64х64 всё равно останется недопустимо большим. Добавлено через 9 минут
0
|
|||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|||
| 18.01.2019, 18:03 | |||
|
Так же не понятно чем применение хэша может ускорить ваши вычисления, т.к. для вычисления хэша нужно пройтись по всем байтам, не проще ли сразу без всяких хэшей это делать? Так же сравнивать по 1 байту гораздо медленней, чем скажем по 4 или 8... Вот по идее неплохой шэш, есть 2 варианта на 32 и 64 бита, всяко лучше чем ваш 8 битный... https://github.com/differentra... /XXHash.cs Или такой на 128 бит... http://blog.teamleadnet.com/20... rithm.html Убраны повторяющиеся вызовы BitCount (они в конечном итоге были вообще заменены простым массивом...). Уменьшено обращение к полям класса (доступ к локальным переменным быстрее), некоторые значения так же сохранены в локальные переменные по той же причине. В нескольких местах использован unsafe код, чтобы избежать лишних проверок на выход за границы массива...
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||
| 18.01.2019, 21:18 [ТС] | ||||||||
int a = DimBits[x].Hash; если написать int hash= DimBits[x].Hash; int a = hash; это будет быстрее? Мне кажется это не так, первые строки в обоих вариантах одинаковые, а во втором варианте ещё одна операция добавляется. Или вы про то, что в цикле лучше обращаться к локальной переменной?
0
|
||||||||
|
Модератор
|
||
| 18.01.2019, 21:41 | ||
|
Если да, то решать такую задачу перебором ближайшие несколько тысяч лет не научатся. Надо упрощать как-то, сводить до реализуемых значений.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||
| 18.01.2019, 23:12 [ТС] | ||||
|
Прямо сейчас переделал код под ваши (всех участников) рекомендации, чуть позже еще CRC32 попробую прикрутить. НО даже этих небольших изменений было достаточно для еще 12% прироста в скорости. Я думаю от 20 до 50% ещё есть реальная возможность улучшить, а это уже 2-2,5 минуты. Через месяц-два у меня будет своё чуть более производительное железо, что даст 1,5-2 минуты для 4х5 и я попробую уже 8х8.
0
|
||||
|
Модератор
|
||
| 18.01.2019, 23:30 | ||
|
В таком случае 8^8 - это 2^64 комбинаций. Даже если Вы сможете на новом железе, на графической карте вычислять 4х5 за 1 секунду для 8^8 потребуется полмиллиона лет. Даже если Вы будете считать это на суперкомпьютере для это потребуются годы. И это только для варианта 8х8. Добавлено через 4 минуты В Вашей методике расчёта даже варианты 63х63 и 64х64 отличаются в вычислительной сложности в 2^127 раз. Добавлено через 1 минуту Меняйте саму теорию методики расчёта. В лоб это в принципе не решить никогда! Ну, может, пока только фантастические, квантовые компьютеры.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 18.01.2019, 23:33 [ТС] | |
|
0
|
|
|
95 / 74 / 27
Регистрация: 13.08.2018
Сообщений: 203
|
|
| 18.01.2019, 23:36 | |
|
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 19.01.2019, 10:49 [ТС] | |||
|
Добавлено через 11 часов 10 минут Основные изменения - unsafe обращение к массивами, замена вызовов локальными переменными.
0
|
|||
| 19.01.2019, 10:49 | |
|
преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода
Пердача byte[] COM-функции, ожидающей ref byte wav byte[] в flac byte[]
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
начало и оглавление
-
Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью.
Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
|
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
|