|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
Варианты конвертации bool/byte/int в byte/int11.01.2019, 12:56. Показов 5945. Ответов 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[]
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|