Задать вопрос
Иногда думаю, иногда пишу код.
Люблю математику.
Контакты
Местоположение
Россия

Наибольший вклад в теги

Все теги (8)

Лучшие ответы пользователя

Все ответы (5)
  • Как работает хеш-таблица / ассоциативный массив на пальцах?

    Kurku
    @Kurku
    Погромист
    Не знаю как именно в php реализована эта структура данных, но наверное вы можете прочитать об этом в официальной документации.
    В md5 и sha возвращается не длинная строка, а поток битов, в случае md5 битов 128. Это просто их шестнадцатеричное представление. Смею предположить, что array_keys просто хранятся в списке, или в array list, это не так важно.
    Откуда O(1)? От того, что при обращении, берется хеш от ключа, и по хешу получается индекс. А через индекс в массиве прямым доступом достается значение. Берешь хеш функцию, получаешь результат, а дальше делишь с остатком по размеру хеш таблицы.
    То есть вставка:
    i = hash(key) % hash_table_len
    hash_table[i] = value

    Выгрузка:
    i = hash(key) % hash_table_len
    value = hash_table[i]

    Ну это в самом примитивном варианте. Естественно нужно решать коллизии. Но это не так страшно, как искать обычным поиском в большом не отсортированном массиве или списке.
    Ответ написан
    Комментировать
  • Почему запросы выполняются последовательно?

    Kurku
    @Kurku
    Погромист
    Читай документацию:
    >>> help(Process.join)
    join(self, timeout=None)
        Wait until child process terminates

    Это значит, что интерпретатор будет ждать пока процесс закончится.
    То есть ты в своем коде на самом деле выполняешь все последовательно.
    А тебе надо писать что-то такое:
    from multiprocessing import Process
    from time import sleep
         
    def worker(n):
        print("the worker went to the office")  
        sleep(n)
        print("the worker has been walking for %d sec" % n)
         
    if __name__ == "__main__":
        plist = [] 
        for i in range(4, 0, -1):
            proc = Process(target=worker, args=(i,))
            plist.append(proc)
         
        for proc in plist:
            proc.start()

    Это возвратит:

    the worker went to the office
    the worker went to the office
    the worker went to the office
    the worker went to the office
    the worker has been walking for 1 sec
    the worker has been walking for 2 sec
    the worker has been walking for 3 sec
    the worker has been walking for 4 sec

    И да, процессы и потоки вещи совсем разные. С потоками работать намного удобнее. Так почему бы не использовать их.
    Ответ написан
    2 комментария
  • Как сделать линейную апроксимацию функции на python?

    Kurku
    @Kurku
    Погромист
    Используй polyfit. Он создает полином методом наименьших квадратов. Подставляешь значения x, y и степень полинома. В твоем случае - 1.
    from matplotlib import pyplot as plt
    import numpy as np
    #функция
    x = np.arange(0.1, 10, 1*(10**-2))
    y = np.sin(x) + np.log(x)
    #полином 1 степени по функции
    p = np.polyfit(x,y, 1)
    #подставляем значения x к полученному полиному
    ya = np.polyval(p, x)
    
    plt.plot(x, y)
    plt.plot(x, ya)
    
    plt.show()

    5ceba3cec8b37269621753.jpeg
    Ответ написан
    Комментировать