-
MY PROJECTS
-
Recent Posts
- Reading.CleanArchitecture.Thoughts
- Algo.Java.PascalTriangle.ExampleOfDynamicProgramming
- Algo.Java.Find2Mins.InO(n)
- Algo.Java.RecursiveSlidingWindow
- Java.Algo.SlidingWindow
- Algo.Java.SlidingWindow.DoublingArrayForCircle
- Algo.Java.BinarySearch.For.Peaks
- Algo.Java.BinarySearch.Tip
- Algo.Java.BitManipulation.AnotherExample
- Algo.Java.SetBitMask
- Algo.Java.DFS.In.Matrix.AnotherExample2
- Algo.Java.DFS.In.Matrix.Another.Example
- Algo.Java.DFS.In.Matrix
- Algo.Java.BFS.In.Matrix
- Java.Algo.Kadane.MaxSumOfSubArray
- Algo.Java.GetBitFromInteger
- Algo.Java.BinarySearch.BrilliantProblem
- Algo.Java.StringTips
- Algo.Java.LoopSpeed
- Algo.Java.Arrays.AnotherExampleOfFrequencyApproach
Categories
- Aptana
- Azure
- C#
- DataSnap
- DBExpress
- Delphi
- Delphi и сети
- Delphi. Язык программирования
- ExtJS
- FastReport
- FireDAC
- FireMonkey
- GIT
- ICS
- IDE
- IIS
- Indy
- InnoSetup
- javascript
- jQuery
- JSON
- LiveBindings
- MSHTML
- MySQL
- PHP
- REST
- Ribbons
- SMS
- SQL инструкции
- SVN
- TRichView
- UniGui
- WebBroker
- WinAPI
- Windows
- Алгоритмы
- Без рубрики
- Деревья
- Ищу ответ
- Компонентостроение
- Мои компоненты
- Начальный уровень
- Обработка исключений
- Парсинг
- Потоки(Threads)
- Регулярные выражения
- Тестирование приложений
Category Archives: Алгоритмы
Delphi. Алгоритмы. DFS. Поиск в глубину рекурсивно
Своими словами. Берем первую вершину, смотрим, нет ли у нее инцидентных ребер (прямых потомков), если есть помечаем, повторяем процедуру для найденной вершины, и так до конца глубины. Возвращаемся, идем к соседней вершине, и так далее. interface
1 2 |
var IsVisitedGlobal:array [1..N] of boolean; |
init visited array … Continue reading
Delphi. Алгоритмы. BFS – обход графа в ширину
Теория хорошо описана на Вики. Суть в этой гифке ниже. Моя скромная реализация для представления графа в виде матрицы смежности. Ноль в матрице смежности означает отсутствие ребра между вершинами. Единица – наличие. В основе обхода в ширину – такая … Continue reading
Delphi.DBTreeView. Алгоритм динамического обновления узлов
Пусть есть TreeView, связанное с базой данных, например MySQL. Необходимо сделать так, чтобы данные загружались только при первоначальном заполнении (idParent=-1) либо при раскрытии узла (OnExpanding). Данный алгоритм хорош тем, что не грузит сразу все данные. И если, скажем, дерево большое, … Continue reading
Delphi. DBTreeView. Самый эффективный алгоритм удаления узлов из дерева, связанного с базой данных
-пусть есть TreeView, соединенный с базой, скажем MySQL -пусть мы хотим удалить выделенный узел TreeView из базы данных и из дерева Алгоритм (пока что №1 в моем рейтинге) -собрать ID всех детей (рекурсивно), хранящиеся по указателю каждого узла дерева SomeNode.Data … Continue reading
Delphi. Алгоритмы. Галерея своими руками или как выложить плитками фрэйм
Давно хотел записать это, так как часто пригождается, думаю транслировать на другие языки не составит труда. Итак, вот что у нас получится… Я пока не стал выкладывать никакие картинки, просто хочу здесь описать саму логику алгоритма. Сам алгоритм я взял … Continue reading
Delphi. Алгоритмы. Создание уникального имени через добавление номера в конце в скобках. Например SomeFile(1), SomeFile(2) и др.
Итак, пусть у нас в некоторой директории находится файл SomeFile, сделаем так, чтобы при добавлении следующего файла с именем SomeFile, в директории оказался файл SomeFile(1), SomeFile(2), SomeFile(3). При отсутствии этого файла в директорию копируется просто файл. Данная задача возникла в … Continue reading
Delphi. Как отсортировать TStringList и сохранить соответствие с несколькими другими TStringList?
Данный пост является развитием предыдущего. Будем сортировать один TStringList -другие же приводить в соответствие с переставленными элементами.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SLToSort SLToSort BeforeSort AfterSort 0 1 0 3 1 3 1 2 2 2 2 1 ______________________________ SomeSL SomeSL BeforeSort AfterSort 0 1 0 3 1 3 1 0 2 0 2 1 |
Исходные данные у меня точно такие же. Не буду переписывать часть поста сюда.Изменился только алгоритм сортировки, так как теперь в соответствие нужно … Continue reading
Delphi. Сортировка TStringList с приведением в соответствие другого TStringList
Что делаем? Есть у нас некоторый TStringList, скажем SLToSort:TStringlist. Нужно его отсортировать – задача элементарная, пишем компараторы для наших данных, включаем CustomSort и всё готово. А что делать, если кроме SLToSort есть просто SomeSL:TStringlist и после сортировки SLToSort – нужно привести его … Continue reading
Posted in Delphi, Алгоритмы
2 Comments
Delphi. Алгоритмы. Как заменить имя файла на уникальное ?
Скажем, у нас есть имя файла в формате Filename.jpg в переменной FileName. Далее код на уровне идеи… Вариант 1 через GUID
1 2 3 4 5 6 |
var newguid:tguid; ... //Генерируем уникальный guid Createguid(newguid); newUniqueName:=newguid.ToString; ... |
Вот пример такого изменения. Сохраняем часть старого имени для читабельности и добавляем GUID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
{Creating New Unique Name with a rest of old name, using GUID} function CreateUniqueNameAddingGUID(FileName: string; MaxOriginNameLength: Integer): string; var Extension:string; SplittedString: TArray<String>; SomeStringToChange: string; newguid:tguid; i: Integer; FileNameTemp:string; begin //Checks if FileName='' then Exit; //if MaxOriginNameLength=0 then exit; // if MaxOriginNameLength=0 will be only GUID as a result //1--------- First of all we need to extract extension if it is SplittedString:=FileName.Split(['.']); //we suppose that extensions are symbols after last '.', so... // if FileName has extension like 'SomeFileName.exe' if Length(SplittedString)>0 //1 and more, for example somename.ext [somename,ext] then begin Extension:=SplittedString[ High(SplittedString) ]; //Lets join everything except extension for i := Low(SplittedString) to High(SplittedString)-1 do begin if i=0 then SomeStringToChange:=SomeStringToChange+SplittedString[i] else SomeStringToChange:=SomeStringToChange+'.'+SplittedString[i]; end; //Cutting name up to the MaxOriginNameLength if Length( SomeStringToChange )> MaxOriginNameLength then SomeStringToChange:=SomeStringToChange.Substring(0,MaxOriginNameLength); //Adding GUID Createguid(newguid); SomeStringToChange:=SomeStringToChange+newguid.ToString; // Joining Extension SomeStringToChange:=SomeStringToChange+'.'+Extension; Result:=SomeStringToChange; end else // if FileName without Extension like 'SomeFileName' if Length(SplittedString)=0 then begin FileNameTemp:=FileName; //Cutting name up to the MaxOriginNameLength if Length( FileNameTemp )> MaxOriginNameLength then FileNameTemp:=FileNameTemp.Substring(0,MaxOriginNameLength); //Adding GUID Createguid(newguid); FileNameTemp:=FileNameTemp+newguid.ToString; Result:=FileNameTemp; end; //ShowMessage(Result); end; |
Вариант 2 через Random … Continue reading
Алгоритмы. Вход в личный кабинет. Поправки
Век живи, век учись! И самое главное, когда чувствуешь, что что-то не так, не нужно себя обманывать, чем быстрее осознаешь проблему, тем быстрее её решишь. В одном из предыдущих постов, я написал простой алгоритм входа в личный кабинет, но всегда … Continue reading