Ответы пользователя по тегу C#
  • В чем хранить данные, для которых нужен поиск?

    Flaker
    @Flaker
    Ну по асимптотике, добавление эл-та в HashMap (А Dictionary — это оно и есть), — это O(n)
    (На самом деле нет. Если код не для CodeForces, то можно считать что O(1), потому что вероятность коллизии не большая)
    Если устраивает такая, то вполне можно использовать.
    А максимальное запоминать при вставке. Тогда получение макс будет O(1).
    Ответ написан
    4 комментария
  • Кинетический ProgressBar на C#?

    Flaker
    @Flaker
    Почитайте немного теории на эту тему.
    На мой взгляд, реализация анимации очень хорошо описана тут: learn.javascript.ru/js-animation
    Ответ написан
    Комментировать
  • Алгоритм Флойда-Уоршелла

    Flaker
    @Flaker
    Похоже реализация не совсем верная.

    Такая проверка не имеет смысла.
    if ((dist[i, k] * dist[k, j] != 0) && (i != j))

    Взгляни на e-maxx. Там подробное описание.

    Я реализовывал это на C++ таким образом:
    #include <iostream>
    
    #define INF 9000000
    #define MatrixLen 5
    
    /* Алгоритм Флойда — Уоршелла.*/
    
    /* Исходная матрица расстояний */
    int matrix[MatrixLen][MatrixLen] =
    {
        {0, 5, 2, INF, INF},
        {5, 0, INF, 7, INF},
        {2, INF, 0, 2, 8},
        {INF, 7, 2, 0, 1},
        {INF, INF, 8, 1, 0}
    };
    
        /* Поиск расстояния минимального пути от каждой до каждой вершины */
        for (size_t k(0); k < MatrixLen; ++k)
            for (size_t i(0); i < MatrixLen; ++i)
                for (size_t j(0); j < MatrixLen; ++j)
                    if (matrix[i][k] < INF && matrix[k][j] < INF)
                        if (matrix[i][k] + matrix[k][j] < matrix[i][j])
                            matrix[i][j] = matrix[i][k] + matrix[k][j];
    
    
        int from = 0;
        int to = 4;
    
            /* Теперь минимальное расстояние от любой до любой будет matrix[ОТКУДА][КУДА] */
    
        std::cout << "Path length from " << from << " to " << to << " is " << matrix[from][to] << std::endl;


    Тут существуют вершины, между которыми нет пути. Расстояние между ними при этом задается как INF.
    Ответ написан
    6 комментариев