User Tag List

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

Тема: Исключить повторы из массива

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

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

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,080
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    479
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от null_device Посмотреть сообщение
    drbars, Вариантов несколько:
    1 (быстрый, но требующий больше памяти). Завести два массива, размерность которого определяется максимально возможным числом. Далее, организуем цикл: извлекаем из первого массива (со "случайными" числами) первый элемент и значение из второго массива, "номер" которого является величина числа из первого массива. Если "флаг" наличия во втором массиве не установлен, устанавливаем его и переходим к следующему элементу первого массива. В противном случае "сдвигаем" все значения первого массива вниз на одну ячейку и уменьшаем "верхнее" значение счетчика цикла. После чего, повторяем проверку той же ячейки еще раз.

    2 (медленный, не требующий второго массива). Организуем цикл. Извлекаем значение ячейки массива соответствующее параметру цикла. Сравниваем его со всеми числами от первой ячейки до текущей. Если они равны, смещаем элементы массива "вниз" на одну ячейку. Уменшаем верхний предел цикла. Повторяем сравнение.
    Первый вариант быстрее, но требует памяти 256 байт. Во втором случае чуть медленее будет. Кстати если попадается ноль, сразу переход на следующий байт массива без проверки.

    Но задачка в том, как изящно сделать этот второй вариант чтобы не дёргать стек.

    ---------- Post added at 16:28 ---------- Previous post was at 15:59 ----------

    Может так? Как бы оптимизировать?)

    Код:
    ARRAY	DB 1,3,9,7,5,9,4,3
    
    TEST:	DI
    	LD SP,#BFFF
    
    	LD B,#08
    	LD A,#01
    	LD (CNT2+1),A
    	LD DE,ARRAY+1
    LOOP	LD A,(DE)
    	EXX
    	LD HL,ARRAY
    CNT2	LD BC,01
    	CPIR
    	EXX
    	CALL NZ,RESULT
    	INC DE	
    	LD HL,CNT2+1
    	INC (HL)
    	DJNZ LOOP
    
    	JR $
    
    RESULT	OUT (#FE),A
    	RET
    Последний раз редактировалось drbars; 12.08.2013 в 13:48.

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

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

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

Похожие темы

  1. Ответов: 454
    Последнее: 04.01.2017, 00:50

Ваши права

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