Задачка для программистов - страница 2

 
Igor Volodin:

Плюсую, работать будет в несколько раз быстрее чем с ассоциативными массивами. Зачем переводить каждый раз входящий символ с помощью функции сворачивания в уникальный хеш, плюс дополнительные обработки, плюс памяти на порядок жрать больше с объектами будет?

Конкретно эта задача действительно будет работать быстрее. Но в задачках посложнее, без ассоциативного массива трудно обойтись. Особенно если учесть, что он обладает лучшими свойствами списка и индексного массива.
 
Alexey Oreshkin:
Допустим есть некоторый текст, скажем "Война и мир" Толстова. Стоит задача посчитать сколько раз используется каждая буква.
...

А вообще задача бессмысленная. Так как такой подсчет не зависит от конкретного автора а зависит всего от двух вещей:

  • Частота распространенности конкретной буквы в словах (особенность конкретного языка);
  • Размер текста.
Гораздо интереснее узнать сколько уникальный слов используется в том или ином произведении. Можно составить словарь Толстого, или словарь Пушкина.
 
Igor Volodin:

Плюсую, работать будет в несколько раз быстрее чем с ассоциативными массивами. Зачем переводить каждый раз входящий символ с помощью функции сворачивания в уникальный хеш, плюс дополнительные обработки, плюс памяти на порядок жрать больше с объектами будет?

Кстати интересно, смогли бы Вы решить задачу по поиску уникальных слов без использования ассоциативного массива, хотя бы на такой же скорости выполнения алгоритма, как с использованием этого алгоритма?
 
Alexey Volchanskiy:

Это что, вот когда я был Наполеоном...)))

Насчет таблицы ASCII c 256 элементfvb. А что будете делать с текстом с китайскими иероглифами или многоязычном на Unicode? 

В уникоде добавится одно арифметическое действие.

В китайском словаре 87 019 иероглифов, это чуть больше 300 кб, если массив интов. Тут ассоциативный массив рациональней будет, потому-что не все иероглифы будут использоваться. 

 
Vasiliy Sokolov:
Конкретно эта задача действительно будет работать быстрее. Но в задачках посложнее, без ассоциативного массива трудно обойтись. Особенно если учесть, что он обладает лучшими свойствами списка и индексного массива.

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

-----------*********----------

Кстати, вопросики.

uint arr[10000000]; // массив глобальный
// сколько памяти под массив выделится на этом шаге?

void OnInit()
{
    arr[0] = 123;
// сколько памяти под массив будет выделено на этом шаге?
}
 
Ну если быть более конкретным по задаче, то посчитать нужно не символы, а объёмы в мт5. Так как используется неттинг и может работать несколько роботов, а позиция по каждому символу всегда одна, то и в идеале было бы сделать так: Взяв необходимый участок истории и найдя нужную сделку написать так Массив["EURUSD"]+=0.1(к примеру для Buy сделки) или тоже самое через структуру.
Как вариант можно взять список всех символов, и оперировать порядковым номером каждого символа, но нет гарантий что этот список в самый неподходящий момент не изменится.
Ассоциативные массивы прочитал, классная тема ,сижу вот теперь думаю использовать их или всё же по старинке в лоб простым перебором сделать.
 

Смотря сколько символов, если с десяток пойдет и прямой перебор.

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

 
Еще можно попробовать глобальные переменные терминала, они почти как ассоциативные массивы, про скорость не знаю, не сравнивал, но с программированием точно проще всего.
 
Dmitry Fedoseev:

Смотря сколько символов, если с десяток пойдет и прямой перебор.

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

Символов в зависимости от брокера, но максимум думаю вряд ли больше сотни под мт5 будет и по этой же причине глобальные переменные не пойдут, их всё же будет слишком много, а я глоабльные переменные часто использую для смены настроек робота на лету, без его переинициализации.
 
Alexey Oreshkin:
Символов в зависимости от брокера, но максимум думаю вряд ли больше сотни под мт5 будет.
Сотня разных символов в "Война и Мир"? И причем тут брокер?