Алгоритм: Какое там сейчас значение по адресу ОхСЮЗР? Квантовый компьютер: / it-юмор :: Квантовый компьютер :: специальный юмор :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)
Подробнее
Алгоритм: Какое там сейчас значение по адресу ОхСЮЗР?
Квантовый компьютер:
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,специальный юмор,Квантовый компьютер
Ты не понял шутку,а другим говоришь,что понял. Проблема квантовых компьютеров в том,что он одновременно оперирует ВСЕМИ состояниями байта. Т.е. по адресу, указанному в посте,может лежать абсолютно что угодно.
2.7 - дробь, которая при возведении в степень будет оканчиваться на 7, 9, 3 или 1. Так как нет нулей, то в любой натуральной степени она будет оставаться дробью, а так как простыми числами могут быть только натуральные, то 2.7^10^100000 не является простым числом.
Принцип неопределенности. Пока не посмотришь в ящик- не поймешь, жив кот или мертв. Также и тут -пока не посмотришь на данные, не поймешь, что это за данные.
Короче. Объясняю на пальцах основную суть квантовых компьютеров, которая, как правило, теряется за "бля, там кубиты, которые могут быть и нулем и единицей одновременно, прикиньте, как это странно и круто!" - вот это вот в подавляющем большинстве науч.поп видео говорят и из этого вообще не очевиден ответ, как именно они ускоряют вычисления.
Итак.
Представим, что у нас есть черный ящик - квантовый компьютер.
1) Входная информация кодируется в виде векторов, например, {0, 0, 0, 0, 0, 1}
2) Черный ящик может моментально выполнять умножение этих векторов и матриц больших размеров (ну, насколько больших - зависит от того, сколько тебе кубитов доступно). В обычном компьютере, чтобы умножить вектор с размерностью 1024 на матрицу 1024х1024 нужно выполнить много операций и затратить много памяти. Но нашли физический процесс, который можно формализовать в виде этих матричных операций, и если начальное состояние задать нашим входным вектором, эволюционирующая по законам физики нашего мира система в течение некоторого (малого) времени придет к состоянию, которое будет нашим ответом.
Ну то есть - это как "вычислять значение y(t, h0) = h0 - 0.5*gt^2, сбрасывая камни с высоты h0 метров в вакууме и замеряя, как далеко они улетели" - то есть "вычисляет" сам происходящий процесс, мы просто задаем интересующие нас начальные состояния и замеряя в конце результат. Вот тут то же самое - только квантовые процессы повеселее и мы можем ими не вот это хилое уравнение решать, а матрицы множить.
3) Есть подстава - матрицы, к сожалению, должны обладать определенными свойствами, или мы не сможем квантовую систему привести к такому начальному состоянию. Например, длина векторов должна быть единичной - потому что их компоненты, на самом деле кодируют параметры волновой функции, которая задает вероятность каждого из состояний, а суммарная вероятность должна быть равна единице.
То же касается и матриц, только там свои особенности, матрицы соответствуют определенным операциям в физическом мире, мы не можем совсем уж произвольные множить.
4) Еще большая подстава - результат нашего измерения, скажем, вектор {1/sqrt(2), 1/sqrt(2)} - это то, что нам нужно получить. Мы хотим знать все значения его координат, т.к. в них закодировано что-то важное для нас (например, результат факторизации). Но этот вектор не существует в таком виде - это состояние квантовой системы, мы можем его измерить, но (из-за свойств квантового мира), результатом измерения ВСЕГДА будет вектор вида {1, ...., 0} - то есть вектор, у которого все координаты нулевые, кроме одной - это коллапс волновой функции. А единичка будет рандомно закинута в одну из координат, с вероятностью, пропорциональной квадрату значения того самого вектора, который хотим получить - в приведенном примере после измерения над вектором {1/sqrt(2), -1/sqrt(2)} мы получим либо {1, 0} либо {0, 1} с вероятностью (+-1/sqrt(2))^2 = 0.5.
------------
Вот и все.
Вся суть хитрых алгоритмов - это суметь так упихаться в эти ограничения, чтобы по результату измерений потом можно было восстановить интересующие нас значения координат вектора, при этом не проводя бесконечно много этих измерений (так-то можно попробовать чисто статистически набрать результатов, но это нивелирует все преимущества скорости вычисления).
Спасибо за развёрнутый ответ, жаль мало кто его прочитает. Закину к себе в Evernote и перепощу при следующем обсуждении квантового компьютера, если доживу.
Программист на JS (или любом интерпретируемом слабо-типизированном языке) приходит в магазин, спрашивает про яйца и со спокойной совестью просит десяток. Просто "десяток".
Программист на Python (или любом интерпретируемом строго-типизированном языке) приходит в магазин, спрашивает про яйца, просит "десяток" и падает с сердечным приступом.
Программист на C++ (или любом компилируемом языке) бьет жену по лицу, потому что не найдена перегрузка функции "купить", принимающая "десяток".
Вот только функция "купить" принимает шаблонный тип, и, по сути своей, вызывает внутри также шаблонную функцию магазина, причем магазин - это сторонняя либа, подгружаемая в рантайме. Потому поведение зависит от того, как оно реализовано в магазине, то есть, когда у продавщицы спросят "десяток", она может вернуть что угодно. И в компилируемом варианте тоже.
Если мы говорим о C++, то шаблоны - это полиморфизм уровня компиляции, а не рантайма. Принимать что угодно можно, разве что, если к void* привести. В этих ваших C#, Java - Object, с которыми уровень отстрела ноги не сильно лучше, чем с void*.
Ну а вообще, это говорит о плохом дизайне. Правильнее было бы использовать рантайм-полиморфизм с виртуальным наследованием, чтобы "купить" принимало только какой-нибудь условный IShopQuery, int (или что там у нас) в который уже не привести. Хотя, если у вас C++, то можно делать reinterpret_cast, но тогда сам дурак.
В данном случае ситуация именно такая, что или мы принимаем все, что угодно(грубо говоря, ), а продавщица делает case по typeof, и просто говорит, что товар "десяток" отсутствует(или же впаривает десяток уже почти протухших ананасов, сторонние либы - они такие), либо мы принимаем , и тогда жена получает по ебалу, так как "десяток" не Sellable.Другое дело, если шаблон более сложный, и может быть как одним товаром, так и коллекцией с указанием количества(что наиболее соответствует нашему случаю), но тут жена получит по ебалу, и требование уточнить: товар называется "десяток", или же десяток - это количество, но тогда чего именно.
Хотя, еще более похожий случай - это шаблон, в котором может быть и конкретный товар, и коллекция, но тип коллекции - implicit, то есть, подставляется автоматически из контекста(в скалке так можно). В данном случае имплисит тип задан "булка", а яйца просто заданы в условии, то есть, жена проебала этот нюанс. И она получит по ебалу по возвращении.
И чувак падет с ошибкой попытки сравнения типов "булка" и "коллекция булок" прямо при чтении первой строки инструкции. Слава языкам со строгой типизацией!
Эм но ведь если поступил запрос - то он должен будет стать "наблюдателем" и ячейка в момент наблюдения/считывания прейдет с состояния суперпозиции в состояние 0 или 1. Так что он ответит мгновенно (фактически)
В Google заявили о создании работающего квантового компьютера
% http://googleresearch.blogspot.ru/2015/12/when-can-quantum-ann
Машина была приобретена Google у канадской компании D-Wave Systems в 2013 году: однако до сих пор инженеры не могли предоставить доказательства, что компьютер действитель
температура тут при чем?шутка то про что мы можем знать либо значение, либо координату, если переводить на человеческий язык.
Итак.
Представим, что у нас есть черный ящик - квантовый компьютер.
1) Входная информация кодируется в виде векторов, например, {0, 0, 0, 0, 0, 1}
2) Черный ящик может моментально выполнять умножение этих векторов и матриц больших размеров (ну, насколько больших - зависит от того, сколько тебе кубитов доступно). В обычном компьютере, чтобы умножить вектор с размерностью 1024 на матрицу 1024х1024 нужно выполнить много операций и затратить много памяти. Но нашли физический процесс, который можно формализовать в виде этих матричных операций, и если начальное состояние задать нашим входным вектором, эволюционирующая по законам физики нашего мира система в течение некоторого (малого) времени придет к состоянию, которое будет нашим ответом.
Ну то есть - это как "вычислять значение y(t, h0) = h0 - 0.5*gt^2, сбрасывая камни с высоты h0 метров в вакууме и замеряя, как далеко они улетели" - то есть "вычисляет" сам происходящий процесс, мы просто задаем интересующие нас начальные состояния и замеряя в конце результат. Вот тут то же самое - только квантовые процессы повеселее и мы можем ими не вот это хилое уравнение решать, а матрицы множить.
3) Есть подстава - матрицы, к сожалению, должны обладать определенными свойствами, или мы не сможем квантовую систему привести к такому начальному состоянию. Например, длина векторов должна быть единичной - потому что их компоненты, на самом деле кодируют параметры волновой функции, которая задает вероятность каждого из состояний, а суммарная вероятность должна быть равна единице.
То же касается и матриц, только там свои особенности, матрицы соответствуют определенным операциям в физическом мире, мы не можем совсем уж произвольные множить.
4) Еще большая подстава - результат нашего измерения, скажем, вектор {1/sqrt(2), 1/sqrt(2)} - это то, что нам нужно получить. Мы хотим знать все значения его координат, т.к. в них закодировано что-то важное для нас (например, результат факторизации). Но этот вектор не существует в таком виде - это состояние квантовой системы, мы можем его измерить, но (из-за свойств квантового мира), результатом измерения ВСЕГДА будет вектор вида {1, ...., 0} - то есть вектор, у которого все координаты нулевые, кроме одной - это коллапс волновой функции. А единичка будет рандомно закинута в одну из координат, с вероятностью, пропорциональной квадрату значения того самого вектора, который хотим получить - в приведенном примере после измерения над вектором {1/sqrt(2), -1/sqrt(2)} мы получим либо {1, 0} либо {0, 1} с вероятностью (+-1/sqrt(2))^2 = 0.5.
------------
Вот и все.
Вся суть хитрых алгоритмов - это суметь так упихаться в эти ограничения, чтобы по результату измерений потом можно было восстановить интересующие нас значения координат вектора, при этом не проводя бесконечно много этих измерений (так-то можно попробовать чисто статистически набрать результатов, но это нивелирует все преимущества скорости вычисления).
Вот тут видео от майкрософта, где очень понятно объясняют все то, что я написал выше.
Программист на Python (или любом интерпретируемом строго-типизированном языке) приходит в магазин, спрашивает про яйца, просит "десяток" и падает с сердечным приступом.
Программист на C++ (или любом компилируемом языке) бьет жену по лицу, потому что не найдена перегрузка функции "купить", принимающая "десяток".
Ну а вообще, это говорит о плохом дизайне. Правильнее было бы использовать рантайм-полиморфизм с виртуальным наследованием, чтобы "купить" принимало только какой-нибудь условный IShopQuery, int (или что там у нас) в который уже не привести. Хотя, если у вас C++, то можно делать reinterpret_cast, но тогда сам дурак.
Хотя, еще более похожий случай - это шаблон, в котором может быть и конкретный товар, и коллекция, но тип коллекции - implicit, то есть, подставляется автоматически из контекста(в скалке так можно). В данном случае имплисит тип задан "булка", а яйца просто заданы в условии, то есть, жена проебала этот нюанс. И она получит по ебалу по возвращении.
* грубо говоря, [T extends Object]
* либо мы принимаем [T extends Sellable]