• Какой язык програмирования дает скомпилированый файл с самым маленьким размером?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Assembler
    Ответ написан
    Комментировать
  • Какой алгоритм оптимизации выбрать?

    @dmshar
    Не пойму.
    Вы курс оптимизации изучаете и вам надо сделать такое задание? Тогда вам должны были рассказать о преимуществах и недостатках каждого метода. Примените эти знания, что вам мешает?
    Или вы решили решать эту задачу вообще не имея ни малейшего представления о теме? И пришли сюда, что бы вам не зная ни ваших данных, ни вашей функции ни вашей задачи, ни ресурсов вашего компьютера кто-то по озарению ткнул в какой-нибудь метод. И вы ему поверите? По сути в таком случае вы просто попытаетесь переложить на кого-то ответственность за принимаемое решение?
    Ну вы же должны понимать, что по таким совершенно неинформативным признаком нельзя объективно выбрать "правильный метод".
    А если вдруг ваша функция столь сложна, что каждое значение вычисляется примерно 2 часа (что-то слабо себе это представляю. Вы что, на калькуляторе считаете, или как?) то попробуйте подбирать метод сильно упростив вашу функцию, и попробуйте на этой упрощенной модели проверить несколько методов оптимизации. Это же элементарное и естественное решение любого мало-мальски квалифицированного инженера.
    Ответ написан
    4 комментария
  • Как увеличить количество цифровых выходов в Arduino uno?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1 комментарий
  • Не компилируется код. Как исправить ошибку?

    mixatronik
    @mixatronik
    mixatronik.ru
    В массиве выделена память под два элемента, а присваиваешь трём.
    Ответ написан
    3 комментария
  • Как решать задачу используя динамическое программирование?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Какой-то идиот задачу составлял.
    Во-первых, для N<60 ответ помещается в 64-битный целочисленный тип, который есть сейчас практически во всех языках программирования. Тут не надо ничего придумывать для избегания переполнения.
    Во-вторых, чтобы избежать переполнения, в таких задачах обычно просят выдать ответ по какому-то большому модулю. И последнее, как ответ может получиться нецелым - это просто загадка. Пример решения явно неверен.

    А так, динамическое программирование тут простое: Пусть F(N,K) - сколько существует невзрывоопасных стопок длины N, таких что в конце есть ровно K опасных контейнеров (очевидно, 0 <= K < 4). Это не совсем прям то, что вам нужно в задаче, но количество опасных стопок - это количество всех стопок (2^N) минус количество невзрывоопасных, поэтому это ДП нам подходит.

    Пересчет очень прост:

    F(N,K>0) = F(N-K,0)
    F(N,0) = F(N-1,0)+F(N-1,1)+F(N-1,2)+F(N-1,3)


    Если на конце K плохих контейнеров, то до этого точно должен быть хороший контейнер. Если на конце стоит хороший контейнер - то до него может быть 0..3 плохих контейнера.

    База: F(0,0) = 1, F(0, K>0) = 0

    Ответ: 2^N - F(N,0)-F(N,1)-F(N,2)-F(N,3)
    Ответ написан
    2 комментария
  • Как понять что ты развиваешься и как найти знакомых?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Самый верный способ - устроиться на работу.
    Ответ написан
    5 комментариев
  • Поиск всех маршрутов графа C#?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    По-моему у вас рекурсия организована не совсем верно. Дело в том, что r передаётся по ссылке во все ветви поиска. И если одна из этих ветвей завершается успешно, r обнуляется, тем самым сбрасывая конкурирующие пути. Кроме того и в цикле поиска r так же должна всегда содержать тоже самое (т е путь до текущей вершины v. Но в вашем коде это не так, потому что r будет меняться внутри рекурсивного вызова.
    Я не уверен, что всё остальное правильно, но я бы поменял:
    dfs(a, ref visited, n, i, x, ref cnt, ref p, ref r);

    на
    dfs(a, ref visited, n, i, x, ref cnt, ref p,  r.ToArray());

    И соответственно ref убрал бы из определения dfs. Так при переходе по всем вершинам путям в цикле будет для каждого пути создана своя копия r. Так же в этом случае не нужен r.Remove(v + 1); и r = new List();
    Вообще передача большого количества аргументов по ссылке не очень хорошее решение с архитектурной точки зрения. Вам стоит подумать как организовать код так, что бы рекурсивная функция была "чистой" - т е её вызов с одними и теми же параметрами всегда приводил бы к одному результату. Умение писать в таком стиле сильно уменьшает вероятность ошибки.

    Update:
    По просьбе Michail7 привожу свой вариант решения:
    class Program
        {
    
            public  struct Path {
                public  List<int> Vertexes { readonly get;  private set; } 
                
                public Path(int vertex) {
                    this.Vertexes = new List<int>();
                    this.Vertexes.Add(vertex);
                }
    
                public Path(List<int> vertexes, int vertex) {
                    if (vertexes != null) {
                        this.Vertexes = new List<int>(vertexes);
                    }
                    else {
                        this.Vertexes = new List<int>();
                    }
                    this.Vertexes.Add(vertex);
                }
    
                public Path Add(int vertex) {
                    Path p = new Path(this.Vertexes, vertex);
                    return p;
                }
    
                public bool hasVertex(int vertex) {
                    return Vertexes.Contains(vertex);
                }
    
                public int LastVertex() {
                    return Vertexes.Last();
                }
            }
    
            public static List<Path> RunDfs(in  int[,] graph, int n, in Path currentPath, int targetVertex) {
                int currentVertex = currentPath.LastVertex();
                if (currentVertex == targetVertex) {
                    return new List<Path> { currentPath };
                }
                else {
                    List<Path> result = new List<Path>();
                    for (int i = 0; i < n; i++) {
                        if (graph[currentVertex,i] == 1 && ! currentPath.hasVertex(i) ) {
                            List<Path> newPaths = RunDfs(graph, n, currentPath.Add(i), targetVertex );
                            result.AddRange(newPaths);
                        }
                    }
                    return result;
                }
            }
    
            static void Main(string[] args) {
                int[,] graph =  { {0,1,1,0},{0,0,0,1},{0,1,0,0}, {0,0,0,0}};
                Path curPath = new Path().Add(0);
                List<Path> paths = RunDfs(graph, 4,  curPath, 3);
                Console.WriteLine("Hello World!");
            }

    Его наверняка можно улучшить. И не факт, что он по скорости выиграет. Но. В нём сведено к миниму количество параметров и метод RunDfs является "чистым" в том понятии, что для одинакового входа он всегда выдаёт тот же выход и не имеет сайд-эффектов в виде записи в передаваемые структуры. Единственное, что я не стал оптимизировать - это передачу графа в виде двумерного массива. Очевидно для настоящих больших графов так оставлять нельзя, т к есть вероятность, что компиллятор всё же решит его копировать по значению, несмотря на то, что запись внутри RunDfs в него не происходит. (Это наверное можно проверить, делая бенчмарки по времени на графе достаточного размера и сравнив версию, где граф передаётся через ref) Но правильнее и проще для графа также ввести какую то структуру или даже класс, который будет передаваться по ссылке, но при этом не будет давать себя менять.
    Ответ написан
    2 комментария
  • Как составить программу обучения?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Как лучше учиться читать/писать - изучать буквы по отдельности, или сразу весь алфавит?
    Или все-таки по слогам?
    Можно ли начинать учиться писать, если не изучил алфавит наизусть?

    Примерно вот так выглядит твой вопрос.
    Программирование - задача комплексная.
    Можно учить отдельно, можно комплексно. Можно парралельно, можно последовательно.
    Это лично от тебя зависит. Не получается сложное рассматривай примеры попроще.

    Методика - вторична, усилия - первичны.
    Ответ написан
    Комментировать
  • Как правильно создавать макеты для сайта?

    @karminski
    Senior React.JS Developer
    Чем больше макетов вы предоставите разработчикам - тем лучше. Нужно отрисовать те страницы, которые отличаются друг от друга. Например, если на сайте есть раздел Новости, от вас ждут макет списка новостей (как правило это главная страница раздела Новости), макет детального просмотра новости, макет страницы поиска по новостям и т.п. Разумеется никто не требует макета под каждую новость отдельно (их же могут быть тысячи).
    Ответ написан
    Комментировать
  • Поможет ли запись информации на весь возможный объем памяти после удаления - избежать восстановления информации?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    поможет ли запись бессмысленной информации - стереть предедущую и предотвратить ее восстановление?

    Да, поможет. Однако, необходимо держать в голове специфику вашего устройства.

    На жёстких дисках (HDD) у вас есть возможность записать новые данные поверх именно в те сектора, где хранился стираемый файл. Благодаря этому вы можете взять программу наподобие Eraser и стирать информацию "таргетированно".

    Сейчас эта ситуация начинает изменяться - у самых новых жёстких дисков начали появляться трансляторы, похожие на те, которые используются в SSD.
    Кроме того, часть моделей использует технологию Shingled Magnetic Recording (SMR), из-за которой возникает вопрос о том, что происходит с лентой, которая сначала записывается в медиакэш. Под капотом эта технология далеко не так проста, как кажется, но говоря кратко, даже формально будучи временным, дублирование информации в разных областях диска оставляет поводы для сомнений.

    На твердотельных накопителях (SSD), флешках, и картах памяти записать информацию в нужный сектор не получится из-за механизма wear leveling, равномерно "размазывающего" данные по всему объёму флэш-памяти.

    Однако, у ССД есть TRIM, на который отчасти можно положиться, и который часто становится причиной безвозвратной потери информации после случайного удаления.
    Но в связи с тем, что наша цель - гарантированное удаление, безопаснее будет действительно заполнить свободное место какими-либо неважными данными.

    И HDD и SSD можно затереть целиком, запустив тест записи "по всей поляне", любым софтом, который такое умеет. Например, Р.тестером. В качестве бонуса к затиранию бесплатно получите отчёт о состоянии поверхности/памяти.

    Для обоих вариантов нужно помнить, что сектор с секретными данными может быть переназначен накопителем и выведен из пользовательского адресного пространства. После чего перезаписываться будет уже подставленный на его место резервный сектор, а не изначальный.

    Это уже одна из последних степеней беспокойства, приближающаяся к паранойе - в большинстве случаев доступ к содержимому переназначенных секторов и медиакэшу требует серьёзных знаний и специального оборудования. Информацию простого пользователя искать таким образом станут вряд ли.

    Но если вы удаляете какую-то серьёзную корпоративную информацию, или секреты государственной важности, о последнем абзаце стоит помнить и рассмотреть идею физического уничтожения диска (либо его размагничивания специальными устройствами). Это наиболее безопасный способ, который поможет всем участникам процесса (в т.ч. и диску - ba-dum-tss!) спать спокойно.
    Ответ написан
    Комментировать
  • Что может быть ниже физического уровня архитектуры компьютера?

    @pfg21
    ex-турист
    тут я думаю вопрос дается с упором на виртуальные машины и все подобное.
    в виртуалках "ниже" виртуальных физических устройств находятся слои виртуальной машины и хостового компуктера.

    предположу это затравка для следующей лекции. про виртуальные машины или чего другого.

    но все зависит от контекста вопроса.
    также можно сказать, что "ниже" "физического" уровня схемы находится плата и корпус который весь ентот винегрет элементов держит в строгом порядке, необходимым для работоспосбности устройства. и т.д. и т.п.
    а уж если вечерком, да под водочку, разлиться мыслью по древу, то и не такое можно нафилософствовать...
    Ответ написан
    1 комментарий
  • Листинг программного кода?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Странный вопрос. Надо. - делайте... Можно не все печатать, - все равно никто смотреть не будет.
    Но лучше спросите своего руководителя. Он точнее скажет, чем рандомный человек из интернета.
    Ответ написан
    Комментировать
  • Почему не передается изображение на экран?

    xez
    @xez Куратор тега Железо
    TL Junior Roo
    Нет видеокарты - нет изображения.

    Ваш капитан О.
    Ответ написан
    7 комментариев
  • Колледж или университет?

    xez
    @xez
    TL Junior Roo
    Тааак. На дворе январь.
    Если вы про поступление, которое будет через полгода, бросайте писать дурацкие вопросы и садитесь за учебники. За такую уйму времени можно любой экзамен научиться сдавать.

    Насчёт знаний: вы, видимо, считаете что в колледжах или вузах вам "дадут" какие-то знания, но правда в том, что во всех случаях учиться вам придётся самому, а если вы решили стать программистом, то учиться придётся самому и всю жизнь.
    Так что, с этой стороны, что вуз, что колледж - примерно одно и тоже.

    Однако, я считаю, что в колледж ни в коем случае идти не следует. В колледжи, техникумы и училища попадают ребята, а большинстве своём, не заточенные на приобретения каких-то знаний и построения карьеры (хотя есть, конечно же, и такие). И вот с этим контингентом оболтусов вам придётся находиться в одних стенах в ближайшие несколько лет. Для молодого человека, особенно, подверженного влиянию общества, не лучший выбор.
    Ответ написан
    4 комментария
  • Как реализовать мультиплексирование двух потоков данных между двумя микроконтроллерами?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вариант первый:
    Сделайте один из сигналов CS (Chip Select).
    Взводите его для одного контроллера, опускайте - для второго.
    Взвели - передачу принимает первый. Опущен - второй.
    В теории, CS сигналы могут коммутировать друг-друга или выбирать конкретного приемника.

    Вариант второй:
    Чисто программный. Использовать сигнал CD (Carier Detect), его поднимает передающая сторона, все остальные слушают посылку. Никто не может отправлять, пока поднят CD. В посылке первый байт - номер приемника. Чтобы не было коллизий, желательно определить длительность или максимальный размер передачи.
    В этом верианте еще можно использовать дополнительную сигнальную линию INT (Interrupt). Ее поднимает, тот, кто хочет сделать срочную передачу, при поднятом CD.
    Никто не поднимает CD, Пока не снят INT.
    CD поднят, идет посылка
    Кто-то поднял INT, Прошла предыдущая посылка, но никто не захватывает линию через CD.
    Тот, кто поднял INT, ждет освобождения CD, сам поднимает CD, снимает INT, н7ачинает передачу.
    Если линии INT и CD свободны, любой может поднять CD и начать передачу.

    Литература: сети I2C, CAN, RS-485 + modbus, SPI, FrameRelay....
    Ответ написан
    Комментировать
  • Как clr преобразует c# код в компьютерные команды?

    Выполняется только машинный код, который IT нагенерил, читая IL.
    То есть когда твой код выполняется - все указатели в vtable уже ведут на машинный код.

    Последний тезис я не смог расшифровать

    если описать метод в самом файле, то все равно тогда jit будет спрашивать о методе у методанных?

    Если тебе очень интересно, как работает JIT - посмотри доклады от Егора Богатова.

    Ну и ещё есть статьи на хабре.
    Ответ написан
    9 комментариев
  • Нужно ли вкратце конспектировать материал из книги по програмированию?

    @dmshar
    Ответ абсолютно индивидуален. Все зависит от того, как у вас устроена память - у кого-то лучше всего работает визуальная память, у кого-то аудио. Я знаю, что у меня лучше всего работает моторная - еще учась и институте я на каждый экзамен писал шпору (шпаргалку), но за все время учебы использовал эту технология только один раз и то, на абсолютно непрофильном экзамене. Но вот при написании, вернее - в его процессе - материал закреплялся в голове на долго. И именно писал, от руки - во-первых, компьютеров тогда еще не было, а во вторых уже потом заметил, что набор на клавиатуре не дает того-же эффекта.
    Поэтому я и сейчас иногда, когда что-то новое читаю или изучаю, делаю небольшой конспект в блокноте (физическом, а не MS Notepad :-) ). И пусть потом я его никогда и не открою, но запомню точно лучше. К сожалению, замечаю, что современные студенты даже конспект на лекции вести не умеют - кто на диктофон записывает, кто фотографирует с доски, но очень мало кто именно самостоятельно пишет. По моему мнению тут дело не в технике - а именно в отсутствии навыков. И в частности и в этом - неумении самостоятельно делать "выжимки" из увиденного или прочитанного - есть одна из причин снижения качества образования.
    В общем - я бы рекомендовал делать такие записи, но в кто-бы что-бы тут не насоветовал - вам надо "прислушаться" к собственному мозгу и понять, как ему легче работать с материалом.
    Ответ написан
    1 комментарий