примерно пятьсот элементов, каждый с 32-битным ID устройства и указателем на данные конфигурации
Вариант попроще: разбить на 2 массива в одном ID в другом указатели, по массиву с ID находим нужный элемент, по его индексу читаем указатель из второго.
Если тормозит память, то надо оптимизировать работу с памятью. Как вариант можно ускорить двоичный поиск за счет промежуточного индекса размером в несколько кэшлиний: как понял у автора сортированный массив ~500 элементов, разбиваем его на блоки по 4 (индексы 0-3, 4-7 и т.д.) всего 125 блоков, далее делаем массив куда пишем ID первого устройства в блоке, это и есть индекс, он займет всего 8 кэшлиний. Для поиска сначала ищем в индексе равное или ближайшее меньшее ID, индекс (i) найденного элемента будет номером блока, далее если ID совпало то берем array[i*4], если меньше проверяем ID в array[i*4+2], затем если там ID больше то array[i*4+1] иначе array[i*4+3].
В данном случае индекс с большой вероятностью будет в кэше, т.к. он не большой и к нему будет постоянное обращение.
Я к тому чтобы автор привел тест к более корректному виду, а то взял какой-то девайс с медленной памятью, сравнивает чтение для двух разных типов хранилищ, отличающихся в 5 раз по объему используемой памяти, и делает вывод: " O(log n) смогло победить O(1) "
Советы из 1970х не работают потому что тогда не было в процессорах нескольких конвейеров, предсказания вычислений, кэшей памяти и т.д., тогда операции исполнялись последовательно и компилировались как написано.
Современные компиляторы далеко ушли, включенный оптимизатор сам заменит i++ на ++i если это действительно дает какое-то ускорение. В оптимизаторы зашиты наиболее эффективные решения компиляции, которые позволят по максимуму использовать скрытые резервы процессора.
Если есть возможность затестите компилятор от Intel и скорее всего получите еще более быстрое решение.
Вобщем я к тому что надо писать читаемый код, а о том как его быстрее выполнить пусть заботится компилятор, поверьте, он с этим справится лучше вас.
Невнимательно прочитал, там 100К элементов, тогда лишние 30-40М тактов.
Для чистоты эксперимента я бы сравнивал список не с массивом int[], а с массивом node_t[], так хотя бы расход памяти сопоставимый. Иначе ускорение за счет меньшей сложности алгоритма нейтрализуется бОльшим объемом используемой памяти.
Элемент массива 4 байта, sizeof(node_t) 12 байт (если указатель x64) плюс служебные данные при выделении памяти, т.е. надо в 4-5 раз больше памяти для связного списка. Даже если все элементы списка в куче будут последовательно друг-за-другом, то для 10К элементов только чтение из памяти потребует лишние 3-4М тактов.
Можно, заявляют что в любой момент разрешена конвертация в обычный нал или безнал, по крайней мере на текущем этапе.
Но, добавляются в этот круг деньги как?
Это не биток и прочая крипта, тут нет заявления что количество монет ограничено. Как понимаю все перетоки из обычных денег в цифровые и обратно будет обеспечивать ЦБ.
Жирным выделенное не прочитали? Началось все в марте 2022, уже понятно было что можно только с конвертацией снимать, конвертацию по курсу ЦБ продлили для поступлений до сентября 2022. Полгода. За это время можно было догадаться что не стоит безналичную валюту получать или покупать если предварительно не продумаешь как ей дальше пользоваться. Лично я продал баксы по курсу ЦБ и юаней прикупил.
Я все зависшее снял по курсу ЦБ. Да, банк предлагал курс ниже, пришлось их ткнуть носом в разъяснения ЦБ где написано "по курсу ЦБ на день выплаты", они поворчали но отдали рубли по курсу ЦБ.
Вы вправе получить наличную иностранную валюту в долларах США или в евро в сумме остатка средств на счетах на 00:00 мск 9 марта 2022 года, но не более 10 тыс. долларов США (или в евро в эквиваленте 10 тыс. долларов США).
Средства свыше указанной суммы можно получить в рублях по курсу банка на день выплаты.При этом, если валюта поступила до 00:00 мск 9 сентября 2022 года, выплачиваемая сумма в рублях не может быть меньше суммы, рассчитанной по официальному курсу Банка России на день выплаты.
1. По договору банковского счета банк обязуется принимать и зачислять поступающие на счет, открытый клиенту (владельцу счета), денежные средства, выполнять распоряжения клиента о перечислении и выдаче соответствующих сумм со счета и проведении других операций по счету.
2. Банк может использовать имеющиеся на счете денежные средства, гарантируя право клиента беспрепятственно распоряжаться этими средствами.
Я внутреннюю кухню банков поверхностно знаю, в институте проходили немного, немного читал. Про кредитование нам говорили примерно следующее: должна быть сбалансирована срочность кредитов и депозитов, т.е. вкладчик должен дать банку деньги на долгосрок чтобы тот их мог как кредиты раздавать. А тут по сути однодневные деньги, т.к. перевод с расчетного счета банк обязан выполнить максимум завтра.
Судя по тексту закона банки как-то статистически оценивают какую часть денег можно безболезненно в кредит отдать.
при банкротстве банка деньги на расчетном счете компании теряли
Все верно, но при отзыве лицензии банка начинает работать другая математика, сначала все фактически имеющиеся деньги собирают в одну кучу, а потом из этой кучи возврат сначала физикам и ИП в пределах 1.4 млн.р каждому, затем всем остальным пропорционально остатка если на всех не хватает.
Банки кредиты выдают за счет вкладов и т.п., кредитовать под остатки на расчетных счетах нельзя, т.е. никакой разницы с хранением безнала на расчетном счете.
А как эмиссия цифрорубля может сказаться на инфляции?
Эмиссией любого рубля управляет ЦБ, сколько захотят - столько выпустят. Но с другой стороны борьба с инфляцией одна из основных задач ЦБ, поэтому они не заинтересованы в излишнем выпуске.
Можно, конечно, представить ситуацию, когда заряда аккумулятора ещё хватает на работу электроники, но уже не хватает на стартер, но это совсем экзотика.
Пока разработчики авто не вкорячат контроль напряжения в электронику авто. У меня такое авто, ниже какого-то напряжения (11В вроде) запуск стартера блокируется и он вообще не пытается крутить двигатель.
Нынче мотив в том что есть серый импорт который продается на маркетплейсах. Завозят этот товар продавцы на УСН и не платят НДС (хотя должны) в отличии от крупных торговых сетей на ОСНО, в результате последние посчитали себя ущемленными о чем пожаловались в СМИ. А тут еще минфин подключился с острым желанием получить налоги откуда только сможет.
ИМХО просто забыли для АУСН порог поменять. Со стороны властей никаких заявлений про АУСН не было, т.е. не заявляли что специально не трогали АУСН. Где гарантия что порог не изменят со следующего года?
А на счет прозрачности операций так себе аргумент, налоговая может мониторить счета любого юр.лица и ИП без всяких доп.разрешений. Могут на автомате запросить в банках оборот, умножить на 6% у УСН, а потом изучать тех у кого с декларацией не сошлось.
Забыл главное написать - чтобы кухонный нож всегда был острый не надо им все подряд резать, только относительно мягкое. И резать на пластиковой или деревянной доске. Не на керамической и не в тарелке.
Подарил дочери хороший нож, через пару месяцев вернула - не режет, смотрю а там на кромке вмятины такие конкретные, она им кости порубить пыталась ((( еле восстановил. Для рубить есть топорики, там угол заточки побольше чтобы кромка не заминалась.
У меня типа такой только тут цена конская и она пластиковая, рассохнется через пару лет. У меня стальная, на али заказывал. Есть похожая у знакомого, с виду удобнее, но только я не понимаю куда опилки деваются, похоже на пол, я лист бумаги подкладываю, на нем все остается. Суть этой конструкции в том что угол между ножом и бруском постоянный, поэтому режущая кромка плоская получается.
Бруски должны быть алмазные: 200 (грубый) для первичной переточки на другой угол, 400 для повторной заточки, 800 для финишного полирования, 1000+ это уже понты, до зеркального блеска доводить, на качество реза не влияет.
Еще надо угломер чтобы угол заточки выставить, для кухонных 12-13 градусов между плоскостью ножа и бруска.
При заточке желательно малярным скотчем лезвие обклеивать чтобы царапин на нем не было.
Точить часто не надо, я раз в год точу, а то и реже. Регулярно надо править, для этого надо керамический мусат, об него шоркнул 2-3 раза перед резкой и нож всегда как новый. Также об мусат легко точатся ножи из средней стали, типа овощных из супермаркетов. Почти год назад купил такой ножичек, очень удобный оказался, ежедневно им пользуюсь для готовых продуктов (колбаса, овощи и т.п.), ни разу еще не точил, только мусат.
Вариант попроще: разбить на 2 массива в одном ID в другом указатели, по массиву с ID находим нужный элемент, по его индексу читаем указатель из второго.
Если тормозит память, то надо оптимизировать работу с памятью. Как вариант можно ускорить двоичный поиск за счет промежуточного индекса размером в несколько кэшлиний: как понял у автора сортированный массив ~500 элементов, разбиваем его на блоки по 4 (индексы 0-3, 4-7 и т.д.) всего 125 блоков, далее делаем массив куда пишем ID первого устройства в блоке, это и есть индекс, он займет всего 8 кэшлиний. Для поиска сначала ищем в индексе равное или ближайшее меньшее ID, индекс (i) найденного элемента будет номером блока, далее если ID совпало то берем array[i*4], если меньше проверяем ID в array[i*4+2], затем если там ID больше то array[i*4+1] иначе array[i*4+3].
В данном случае индекс с большой вероятностью будет в кэше, т.к. он не большой и к нему будет постоянное обращение.
Я к тому чтобы автор привел тест к более корректному виду, а то взял какой-то девайс с медленной памятью, сравнивает чтение для двух разных типов хранилищ, отличающихся в 5 раз по объему используемой памяти, и делает вывод: " O(log n) смогло победить O(1) "
Советы из 1970х не работают потому что тогда не было в процессорах нескольких конвейеров, предсказания вычислений, кэшей памяти и т.д., тогда операции исполнялись последовательно и компилировались как написано.
Современные компиляторы далеко ушли, включенный оптимизатор сам заменит i++ на ++i если это действительно дает какое-то ускорение. В оптимизаторы зашиты наиболее эффективные решения компиляции, которые позволят по максимуму использовать скрытые резервы процессора.
Если есть возможность затестите компилятор от Intel и скорее всего получите еще более быстрое решение.
Вобщем я к тому что надо писать читаемый код, а о том как его быстрее выполнить пусть заботится компилятор, поверьте, он с этим справится лучше вас.
Невнимательно прочитал, там 100К элементов, тогда лишние 30-40М тактов.
Для чистоты эксперимента я бы сравнивал список не с массивом int[], а с массивом node_t[], так хотя бы расход памяти сопоставимый. Иначе ускорение за счет меньшей сложности алгоритма нейтрализуется бОльшим объемом используемой памяти.
Элемент массива 4 байта, sizeof(node_t) 12 байт (если указатель x64) плюс служебные данные при выделении памяти, т.е. надо в 4-5 раз больше памяти для связного списка. Даже если все элементы списка в куче будут последовательно друг-за-другом, то для 10К элементов только чтение из памяти потребует лишние 3-4М тактов.
Можно, заявляют что в любой момент разрешена конвертация в обычный нал или безнал, по крайней мере на текущем этапе.
Это не биток и прочая крипта, тут нет заявления что количество монет ограничено. Как понимаю все перетоки из обычных денег в цифровые и обратно будет обеспечивать ЦБ.
Жирным выделенное не прочитали? Началось все в марте 2022, уже понятно было что можно только с конвертацией снимать, конвертацию по курсу ЦБ продлили для поступлений до сентября 2022. Полгода. За это время можно было догадаться что не стоит безналичную валюту получать или покупать если предварительно не продумаешь как ей дальше пользоваться. Лично я продал баксы по курсу ЦБ и юаней прикупил.
Я все зависшее снял по курсу ЦБ. Да, банк предлагал курс ниже, пришлось их ткнуть носом в разъяснения ЦБ где написано "по курсу ЦБ на день выплаты", они поворчали но отдали рубли по курсу ЦБ.
Можно снять валюту с конвертацией в рубли по курсу ЦБ, и наличную валюту купить можно, да небольшие потери будут, но это не запрет-запрет.
Похоже все-таки можно:
Я внутреннюю кухню банков поверхностно знаю, в институте проходили немного, немного читал. Про кредитование нам говорили примерно следующее: должна быть сбалансирована срочность кредитов и депозитов, т.е. вкладчик должен дать банку деньги на долгосрок чтобы тот их мог как кредиты раздавать. А тут по сути однодневные деньги, т.к. перевод с расчетного счета банк обязан выполнить максимум завтра.
Судя по тексту закона банки как-то статистически оценивают какую часть денег можно безболезненно в кредит отдать.
Все верно, но при отзыве лицензии банка начинает работать другая математика, сначала все фактически имеющиеся деньги собирают в одну кучу, а потом из этой кучи возврат сначала физикам и ИП в пределах 1.4 млн.р каждому, затем всем остальным пропорционально остатка если на всех не хватает.
Банки кредиты выдают за счет вкладов и т.п., кредитовать под остатки на расчетных счетах нельзя, т.е. никакой разницы с хранением безнала на расчетном счете.
Эмиссией любого рубля управляет ЦБ, сколько захотят - столько выпустят. Но с другой стороны борьба с инфляцией одна из основных задач ЦБ, поэтому они не заинтересованы в излишнем выпуске.
На сколько его хватает? Какой ресурс?
Пока разработчики авто не вкорячат контроль напряжения в электронику авто. У меня такое авто, ниже какого-то напряжения (11В вроде) запуск стартера блокируется и он вообще не пытается крутить двигатель.
Нынче мотив в том что есть серый импорт который продается на маркетплейсах. Завозят этот товар продавцы на УСН и не платят НДС (хотя должны) в отличии от крупных торговых сетей на ОСНО, в результате последние посчитали себя ущемленными о чем пожаловались в СМИ. А тут еще минфин подключился с острым желанием получить налоги откуда только сможет.
ИМХО просто забыли для АУСН порог поменять. Со стороны властей никаких заявлений про АУСН не было, т.е. не заявляли что специально не трогали АУСН. Где гарантия что порог не изменят со следующего года?
А на счет прозрачности операций так себе аргумент, налоговая может мониторить счета любого юр.лица и ИП без всяких доп.разрешений. Могут на автомате запросить в банках оборот, умножить на 6% у УСН, а потом изучать тех у кого с декларацией не сошлось.
Забыл главное написать - чтобы кухонный нож всегда был острый не надо им все подряд резать, только относительно мягкое. И резать на пластиковой или деревянной доске. Не на керамической и не в тарелке.
Подарил дочери хороший нож, через пару месяцев вернула - не режет, смотрю а там на кромке вмятины такие конкретные, она им кости порубить пыталась ((( еле восстановил. Для рубить есть топорики, там угол заточки побольше чтобы кромка не заминалась.
У меня типа такой только тут цена конская и она пластиковая, рассохнется через пару лет. У меня стальная, на али заказывал. Есть похожая у знакомого, с виду удобнее, но только я не понимаю куда опилки деваются, похоже на пол, я лист бумаги подкладываю, на нем все остается. Суть этой конструкции в том что угол между ножом и бруском постоянный, поэтому режущая кромка плоская получается.
Бруски должны быть алмазные: 200 (грубый) для первичной переточки на другой угол, 400 для повторной заточки, 800 для финишного полирования, 1000+ это уже понты, до зеркального блеска доводить, на качество реза не влияет.
Еще надо угломер чтобы угол заточки выставить, для кухонных 12-13 градусов между плоскостью ножа и бруска.
При заточке желательно малярным скотчем лезвие обклеивать чтобы царапин на нем не было.
Точить часто не надо, я раз в год точу, а то и реже. Регулярно надо править, для этого надо керамический мусат, об него шоркнул 2-3 раза перед резкой и нож всегда как новый. Также об мусат легко точатся ножи из средней стали, типа овощных из супермаркетов. Почти год назад купил такой ножичек, очень удобный оказался, ежедневно им пользуюсь для готовых продуктов (колбаса, овощи и т.п.), ни разу еще не точил, только мусат.