User Tag List

Показано с 1 по 10 из 70

Тема: sPycialist - эмулятор ПК Специалист на Python

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #10

    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, в ассоциативной таблице выборка по ключу это поиск в хеш таблице. Операция O(1) формально, но на практике довольно сложная. Выборка из линейного массива это просто вычисление смещения. В Питоне может быть и невелика будет разница, но я бы попробовал.
    Нет. Это не так. Для ключа типа int это поиск ровно такой-же как и смещение в массиве. В питон3.6 и выше это поведение еще более оптимизировали.
    @CityAceE: Оставь диктом. Флаги у тебя тоже верно сделаны, т.к. смысла тащить их везде в виде битмаски абсолютно не нужно. Титус прав насчет расчетов, но ошибается насчет переносимости. В питон битовые операции будут сильно медленнее чем обычная математика. Если уж на то пошло, то можно использовать какую-нибудь библиотеку. Тот-же rlca переписаный слегка из pyzx:
    Код:
    def rlca():
        global _f3, _f5, _fN, _fH, _fC
        ans = _A[0]
        c = (ans & 0x80) != 0
        ans = (((ans << 1) | 0x01) if c else (ans << 1)) % 256
        _f3 = ((ans & F_3) != 0)
        _f5 = ((ans & F_5) != 0)
        _fN = False
        _fH = False
        _fC = c
        _A[0] = ans
        return 4
    - - - Добавлено - - -

    Написал тестик:
    Код:
    from random import randint
    import timeit
    def foo(): return 'foo'
    def bar(): return 'bar'
    disp=[foo if i & 1 else bar for i in range(256)]
    def test(): u = disp[randint(0, 255)]()
    timeit.timeit(test, number=100000000)
    2,511099100112915 сек.

    Код:
    from random import randint
    import timeit
    def foo(): return 'foo'
    def bar(): return 'bar'
    disp={i: (foo if i % 2 else bar) for i in range(256)}
    def test(): u = disp[randint(0, 255)]()
    timeit.timeit(test, number=100000000)
    2,5191421508789062 сек.

    Весьма показательно. 0.3% разницы на 1 миллионе вызовов.
    Последний раз редактировалось Q-Master; 27.12.2018 в 21:49.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Специалист-М
    от zx_ в разделе Специалист
    Ответов: 230
    Последнее: 18.12.2021, 14:41
  2. Ответов: 77
    Последнее: 21.01.2021, 00:14
  3. Тулзы для работы с образами на Python
    от Q-Master в разделе Утилиты
    Ответов: 4
    Последнее: 25.11.2014, 22:44
  4. Эмулятор ПК "Специалист" для Mac OS X
    от hdc в разделе Эмуляторы отечественных компьютеров
    Ответов: 1
    Последнее: 21.10.2009, 11:28
  5. Python
    от Black1980 в разделе Программирование
    Ответов: 12
    Последнее: 26.12.2006, 10:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •