Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Самый быстрый индексер?

368  
Murr патриот24.05.22 23:48
Murr
24.05.22 23:48 

Самый быстрый индексер?


Дано:

- таблица на 28 элементов.

- набор целочисленных индексеров в диаппазоне от Х до Х+28, где Х > 50


Какой способ индексирования будет самым быстрым?


#1 
uscheswoi_82 старожил25.05.22 06:44
NEW 25.05.22 06:44 
в ответ Murr 24.05.22 23:48
Самый быстрый индексер?

Спросите это у разработчиков Google, MongoDB или Apache Cassandra.


- таблица на 28 элементов.

Давно уже надо было забыть слово таблица, т.к. те кто делают высоконагруженное Web-приложение используют NoSQL, а в NoSQL имхо таблиц нет, есть только такое понятие как коллекция, а вместо SQL запросов аггрегация .

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#2 
Программист коренной житель30.05.22 07:34
NEW 30.05.22 07:34 
в ответ Murr 24.05.22 23:48
- таблица на 28 элементов.

Что ты понимаешься под "элементами"? Строки или столбцы?


- набор целочисленных индексеров в диаппазоне от Х до Х+28, где Х > 50

Судя по всему все таки строки. Если твои 28 индексов целочисленные, да еще и упорядоченные, то самый быстрый индексер - массив из 28 итнов.

Врядли будет что-то быстрее, чем

int base = 50;
var val = indexer[base+index];


Во всех остальных случаях врядли есть что-то быстрее бинарного поиска.

#3 
Murr патриот30.05.22 11:03
Murr
NEW 30.05.22 11:03 
в ответ Программист 30.05.22 07:34, Последний раз изменено 30.05.22 11:07 (Murr)

Строки или столбцы?

-----

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



Врядли будет что-то быстрее, чем

------

Будет. Я от сложения избавился. Просто взял кросс-массив с избыточным количеством элементов-пустышек.


Сейчас вопрос немного меняется.

Почему

            for (int i = 0; i < line.Length; ++i)
                line[ i ] = shiftedChars[line[ i ]];


где-то на 15-20% быстрее, чем

            char[] result = new char[line.Length];
            int i = 0;
            foreach (char ch in line)
                result[ i++ ] = shiftedChars[ch];


Оптимизация лучше прошла?


А еще быстрее, в рамках шарпа без анменеджет кода, можно?

#4 
alex445 коренной житель30.05.22 20:56
NEW 30.05.22 20:56 
в ответ Murr 30.05.22 11:03, Последний раз изменено 30.05.22 21:02 (alex445)

А разве форич не двигает каждый раз энумератор, вызывая его метод (что требует обращения к таблице методов и всё такое)?


Вот любителям читать тьюториалы - до посинения, пока голова не вскипит. ))


А потом выматериться, закрыть страницу, послать всё нафиг и пойти пить пиво. Кому надо +(15-20)% производительности, идёт писать на плюсах, чистом Си или ещё как битики ручками двигать. Остальные пруцца от скриптиза, зарабатывая на расслабоне и смузевой тяге больше, чем плюсовик-ботаник с кипящими мозгами.


На следующем поколении процессоров получите эти ваши 15-20% бесплатно, без оптимизаций.


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


))

#5