думаю... есть, наверно, какие-то интересные трюки, которые при ближайшем рассмотрении могут качественно облегчить жизнь любому программисту и гостям в этой сфере... нашла подборку книг на forcoder.ru - Algorithm... пока что скачала и листаю (без особого понимания, но с чувством полезности) парочку: Алгоритмы: разработка и применение. Классика Computers Science - Автор: Дж. Клейнберг Дж., Е. Тардос Encyclopedia of Algorithms - Автор: Ming-Yang Kao ... (в последнем) понравилась визуализация 3D-структуры, полагаю, БД multidimensional можно представить себе примерно так...
и почерпнуть для себя что-нибудь по вопросам оптимизации работы с данными такого рода... началась моя задумчивость на этой статье Подходы к обработке больших потоков информации при проектировании информационных систем... (таких ещё нет, но, мало ли жизнь разовьётся))... ВСЁ-ТАКИ, мне кажется, чтобы работу с БД делать максимально комфортной - надо владеть некоторыми тонкостями в понимании Структуры данных и Способов работы с ними... кстати, думаю, понимание многомерности, как таковой, может сильно расширить понимание возможностей DAX, например... просто не очень легко изначально всё и сразу сопоставить и скрутить в своём представлении, чтобы потом реализовать Представление в XL... *** Вот и решила открыть ветку, чтобы предложить всем, кому встречались какие-нибудь интересные алгоритмические трюки или специализированная СтОящая литература - запостите please названия, линки... и кто как и с чего (если задумывался когда-либо) начинал шлифовать свои алгоритмические способности... чувствую, есть много интересных секретов ... до боли неизвестных... намекайте (куда копать), посылайте (по линкам), излагайте (свои озарения и тревоги), проливайте свет... если не затруднит
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
возможно, для мат. вычислений (по коду) полезной может оказаться эта книга - Алгоритмические трюки для программистов Генри С. Уоррен мл - там же на на forcoder.ru - Algorithm... хотя отдельно для высшего пилотажа в составлении формул в xl - пока ничего кристально прозрачного не нашла (кроме, как отдельные примеры, выкладываемые периодически планетянами)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
альтернатива Словарю (Dictionary) - Recordset. созданный, не связанный с источником... нюансы в ветке RunTime Error 7 - Out of Memory хороший плюс: 1) сортировка кратко (паралельно - индексация - ускоряет поиск в дальнейшем по рекордсету) 2) выгрузка кратко может быть минус: 1) по скорости - надо тестировать
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
по рисунку из #1 всё-таки оставлю линк на пояснения по терминологии Graph... всё-таки алгоритмы реализуются применительно к конкретным Структурам Данных... граф, как структура данных (есть разные структуры данных - очереди, стеки, деревья [как одна из многочисленных форм графа])
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Фильтрация: Array Filter (для массива) - наверно, не права, что не часто её использую [но эта функция для 1-мерного массива] и своеобразно ведёт себя
Код
' фильтрация массива значений словаря...
For Each varItem In Filter(.Items, "r", , vbTextCompare)
MsgBox varItem ' будет отфильтрованы Russia и Brazil !!!!!
Next
Расширенный фильтр и немного магии (для диапазонов) ... но в SQL'е всё равно удобнее WHERE ... *** поиск одиночного значения в упорядоченном (отсортированном) массиве - силами функций XL - [быстрее, чем фильтрацией]
*** фильтрация на словаре - удобнее всего (для многомерного массива в том числе) - как мне кажется... и очередное Сравнение быстродействия коллекций и фильтра от ZVI #38... и там же Dictionary в #33... (всё в ветке: Подсчет количества уникальных значений в массиве)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
разрез Контекста Запроса (можно на примере dax) понимать в общем и целом - для понимания ссылочной целостности - при кодировании любых процессов... p.s. хотя отталкиваться, конечно же, удобнее от плоских таблиц
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi написал: удаление строк в большом Ексель файле DelRows - от ZVI
Один из быстрейших алгоритмов, сам использую эту идею от ZVI в подходящих случаях. Но нужно пользоваться с осторожностью если в массиве есть условное форматирование и формулы. Все дело в .Sort Решения: 1. Переводим условное форматирование в обычное (если нет формул), если есть см. п.2 2. Используем Union для удаления всех элементов по условию за раз (ест особая модификация алгоритма на Union, максимально быстрая, здесь на планете, где-то писал) 3. Если данных очень много с условным форматированием, формулами и прочими прелестями, максимально быстрый , как не удивительно, алгоритм через .Cut (Union метод сам по себе медленный)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
будет интересно! *** Ещё интересный трюк (не совсем алгоритм, но просто приятная возможность XL) из 10 000 достаточно быстро 0,7с удалил примерно 1200 записей - все кроме "0" по ключевому столбцу С (автор в комменте)
Код
Sub DelSameRows() 'SAS888
Dim x As Range, r As Range
t = Timer
ActiveSheet.UsedRange.EntireRow.Hidden = False
Set r = ActiveSheet.Range([c1], [c65535].End(xlUp))
Set x = r.Find(what:=0, LookAt:=xlWhole, LookIn:=xlValues)
If Not x Is Nothing Then
'r.EntireRow.Hidden = True
Set r = r.ColumnDifferences(x)
'r.EntireRow.Hidden = False
r.EntireRow.Delete (xlShiftUp)
End If
Debug.Print Timer - t
End Sub
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Добавлю свои 5 копеек. Из последнего понравилась книжка "Грокаем алгоритмы" Адитья Бхаргава. Кто читал Хайнлайна, тот поймет фишку с названием. Очень доступно и с картинками про основные алгоритмы численных методов.
Ну и, само-собой, есть "классика" в виде Кнута, но это не каждый начинающий осилит, да
Николай Павлов вот только прочитала отрывок про Хэш-функции- доступно, понятно и ВИДИМО ПОЛЕЗНО ... Спасибо... Хотя что-то мне кажется, что этО Очень похоже на Словари по сути своей... или просто создание доп. индексного массива (что тоже может быть удобно) p.s. ... и про Хеш-таблицы... кстати когда-то про Хеш-таблицы что-то под этим названием #12 пробовала (по примеру от Андрей VG - там же линк на его код)... но нужен NET.Framework для использования встроенной сортировки для хэш-таблиц... P.P.S. и тестирование по скорости было проведено на планете - Скоростной метод перебора значений не соотв. условию #21 !! P.P.S тестирование перебора уникальных (с помощью словаря, коллекции, фильтра, сортировки) - в Подсчет количества уникальных значений в массиве P.P.P.S ВСЯ
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
ПОИСК ещё хотела бы оставить напоминание: бинарный Поиск - это хорошо и быстро... Алгоритм Бинарного Поиска... НО всё-таки суть поискового процесса "на-пальцах" лучше себе представлять - бывает (насколько поняла): - Поиск в ширину - Breath First Search - дерево (организуется через Очередь, которая обрабатывается по логике FIFO) - находим корень, потом исследуем ветки (по сути, словарь, полагаю)... по общей сути "самый короткий путь возврата в вершину через Parent"... кстати Parent-Child - это связь "один-ко-многим"... - Поиск в глубину - Depth First Search - (организуется через Стэк [очередь с хвоста], который обрабатывается по логике LIFO); и тут мне понравилось описание:
Цитата
Главное отличие от поиска в ширину состоит в том, что при поиске в глубину в качестве активной выбирается та из открытых вершин, которая была посещена последней. Для реализации такого правила выбора наиболее удобной структурой хранения множества открытых вершин является стек: открываемые вершины складываются в стек в том порядке, в каком они открываются, а в качестве активной выбирается последняя вершина. При поиске в ширину вершина, став активной, остается ею, пока не будет полностью исследована ее окрестность, после чего она становится закрытой. При поиске в глубину, если в окрестности активной вершины x обнаруживается новая вершина y, то y помещается в стек и при следующем повторении цикла while станет активной. При этом x остается в стеке и через какое-то время снова станет активной. Иначе говоря, ребра, инцидентные вершине x, будут исследованы не подряд, а с перерывами.
... Просто иногда, полагаю, может давать выигрыш в быстродействии...
Скрытый текст
"постоянно возвращаемся в вершину стэка S и проходим по каждому новому ребру, отработанные рёбра перекладываем в др. стэк С, а по рабочему стэку идём, исследуя каждое новое ребро, пока в очередном тупике не окажется, что S пуст" *** для удобства можно помечать рёбра с помощью Select Case Flag... isVisited - visit - unVisited...
пока ещё не думала над тем, в каких реализациях поиска очевидно получить ускорение процесса, используя DSF... но мало ли вдруг понимание этих альтернатив пригодится... (например, в многомерных БД? или при поиске в тексте? или в "динамическом программировании"- программировании динамических процессов, имею ввиду условно)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
т.к. JSON: JavaScript Object Notation, то всё-таки оставлю сравнение JSON vs XML... в любом случае такая (json) структура занимает меньше места для хранения, чем xml (хотя, конечно, похоже, что эта структура разработана прежде всего для Передачи инфо с Сервера)... но когда сервер особо не нужен, а многомерность не помешает... тоже по сути стройное дерево можно выстроить (мне пока подумалось)... Класс-Модуль на сайте для парсинга JSON'ов есть (и его первоисточник здесь), но обходить то дерево рекурсивно, или ещё как - по скорости надо смотреть, думаю и по высоте веток p/s/ жаль что sql-jet не признаёт его (только csv и txt и др)... хотя ms server 2016 уже и с json работает
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Private Sub PrintJSON(d As Dictionary, Optional index = "")
Dim k, i, keys, items
keys = d.keys
k = d.Count - 1
items = d.items
For i = 0 To k
If Not IsObject(items(i)) Then
Debug.Print Trim(index & " " & i), keys(i), items(i)
Else
Debug.Print i, keys(i), TypeName(items(i))
Dim dd As New Dictionary
Set dd = items(i)
PrintJSON dd, i 'РЕКУРСИЯ
End If
Next
End Sub
P.S. нужные библиотеки (Tools-Reference) и модуль класса (для чтения json) - там указаны по линку... N.B. on 64-bit Office, - ScriptControl isn't available... - код на RegExp для чтения json будет более универсален в случае и для 32х и для 64х
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)