|
|
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Други, есть ли в современных Delphi (XE и выше) функции поиска последовательности в массиве? Если есть - ткните, плизз, носом и научите пользоваться... Имеем: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Т.е. имеем на входе два массива: - первый - это большой массив (например это файл, загруженный в TBytes); - второй - небольшой массив, который нужно искать в первом. Задача: Найти индекс в первом массиве, начиная с которого идет искомый. P.S. похожая задача уже рассматривалась мной в теме Поиск и Замена последовательности байт в бинарном файле с использованием TMemoryStream , но по некоторым причинам хочу попробовать простым перебором и сравнением с использованием массивов TBytes или может есть уже готовые функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 17:28 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, есть такие средства. Называются "перебор в цикле" и "сравнение". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 17:31 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
чччД, ну это понятно! Я же спросил - может быть есть другие варианты, кроме банальных автор"перебор в цикле" и "сравнение"??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 17:34 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Звиняйте хлопцi, бананiв нема! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 17:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Можно прочитать кусок из файла в AnsiString и пользоваться Pos() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:10 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
DarkMasterBellic, Можно прочитать кусок из файла в AnsiString и пользоваться Pos() Файл - не текстовый, а бинарный! - В нем может быть непредсказуемое сочетание байт! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:14 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, И что мешает проверить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
DarkMasterМожно прочитать кусок из файла в AnsiString и пользоваться Pos() Тогда уже в RawByteString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicФайл - не текстовый, а бинарный! - В нем может быть непредсказуемое сочетание байт!А в строке такого быть не может? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
есть уже готовые функции ? - Да, есть, куча! - Ха, не угадали!, так-какможет быть непредсказуемое сочетание байт! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:27 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
кеп-коесть уже готовые функции ? - Да, есть, куча! Например? Только без Стрингов в различном их виде и в пределах Темы топика!?..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:31 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, вместо того, чтобы клянчить на паперти, уже бы написал, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:40 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
имхо, тут программист нужен (С) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:41 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Первый результат в гугле... Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:45 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Но вангую что Pos +RawByteString будет работать быстрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:46 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:47 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
чччДBellic, вместо того, чтобы клянчить на паперти, уже бы написал, что нужно. Попрошу не фыркать и иметь малейшее уважение!!! Я и не сижу на месте - отлаживаю простой перебор со сравнением, а он у меня гораздо сложнее чем Задача ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:52 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Все равно это сведется к асмовым командам семейства SCASxxx :) Тебе уже дали поиск и по байтам и по символам - пробуй, что тебе больше подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 18:55 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicчччДBellic, вместо того, чтобы клянчить на паперти, уже бы написал, что нужно. Попрошу не фыркать и иметь малейшее уважение!!! Я и не сижу на месте - отлаживаю простой перебор со сравнением, а он у меня гораздо сложнее чем Задача ! Что же у тебя за Задача такая, которая гораздо проще, чем простой перебор со сравнением??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:01 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreat Первый результат в гугле... Код: pascal 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. кеп-коBellic, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:02 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Андрюха, найми студента. так будет гораздо быстрее. далсЯ тебе это программизмЪ, на старости лет... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:04 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreatНо вангую что Pos +RawByteString будет работать быстрей. Попробую и это реализовать, просто еще не со всеми возможностями знаком..( Читал разом файл в массив TByte и спокойно работал с ним, а в RawByteString - реально засунуть бинарник длиной к примеру 25 Мбайт а потом искать в нем вхождение с помощью Pos? (Т.е. стандартных функций поиска в массиве - нету?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:08 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
МимопроходящийАндрюха, найми студента. так будет гораздо быстрее. далсЯ тебе это программизмЪ, на старости лет... Опаньки!!!??? А Вы - кто, раз имя мое знаете?..))) Отвечаю! - Мой интерес-не интересен никому! Все с кем я общался, хотят все на халяву или же занимаются другими направлениями! Поэтому пришлось изучать и осваивать самому, а позже вспомнить уроки программирования и одолеть начальные азы Дэлфи, дабы автоматизировать и ускорить получение результатов своего Хобби!..))) А еще - "программизмЪ" не дает закоксоваться мозгам и впасть в старческий маразм!..)))) Рекомендую!..))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
18.01.2018 19:17, Bellic пишет: > А еще - "программизмЪ" не дает закоксоваться мозгам и впасть в старческий маразм!..)))) Рекомендую!..))) да ну его нафиг. я бросил. и тебе рекомендую. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic...закоксоваться мозгам и впасть в старческий маразм!... Как будто это что-то плохое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:26 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicЧитал разом файл в массив TByte и спокойно работал с ним, а в RawByteString - реально засунуть бинарник длиной к примеру 25 Мбайт а потом искать в нем вхождение с помощью Pos?2 Гб влезает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:27 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreatНо вангую что Pos +RawByteString будет работать быстрей. О да.. Быстрее Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:01 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Давно ли ты сорцы с директивой PUREPASCAL пересобирал? у нормальных людей как-то так Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикrgreatНо вангую что Pos +RawByteString будет работать быстрей. О да.. Быстрее У меня код Поиска и Замены на TByte получился с таким же количеством строк..))) Код: pascal 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. Но даже тут возможно еще что то оптимизировать!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:22 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Выше - код на ассемблере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:24 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreatДавно ли ты сорцы с директивой PUREPASCAL пересобирал? rgreat , а вот это уже серьезный шаг!!! Класс! Суть я понял, но вижу первый раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:25 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreatВыше - код на ассемблере. И много таких замен существует для функций и прочего? (Может и мне пора пересборкой занятся?.. ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:29 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Оно под виндой и так на ассемблере. Ничего делать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:34 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreat, 64 битном приложение твой asm - не будет работать. И вся оптимизация к коту под-хвост. Да-да. Если он надумаем, или уже использует 64 битный компилятор. То всё, его код будет медленным. На 32 битном приложение asm быстрее в 10 раз . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 21:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreatНо вангую что Pos +RawByteString будет работать быстрей.Кстати - с помошью Pos() смещение до первого вхождения я то найду, а с последующими как быть? Искомая последовательность ведь может повториться еще и не раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 21:38 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, https://quality.embarcadero.com/browse/RSP-13687 Проголосуй. Ну а пока - скопипасти если тебе быстрый x64 POS надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 21:40 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, У функции POS есть 3-й, необязательный параметр. Учи матчасть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 21:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Сам себе и отвечаю..))) Видимо так?: авторPosEx(SubStr, Str: String; Offset: Integer) - функция аналогична функции Pos(), но позволяет задать отступ от начала строки для поиска. Если значение Offset задано (оно не является обязательным), то поиск начинается с символа Offset в строке. Если Offset больше длины строки Str, то функция возратит 0. Также 0 возвращается, если подстрока не найдена в строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 21:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreatУ функции POS есть 3-й, необязательный параметр. Учи матчасть.Учу и учюсь, rgreat , мог бы тогда и ссылку кинуть, пока только с двумя параметрами попадаются!..( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 21:47 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Начиная с Delphi XE3 у Pos - 3 параметра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 21:50 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Оптимизировать многое что можно Ты уверен, что оно тебе нужно? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 00:32 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Самая главная оптимизация - поиск первого байта. Есть алгоритм, позволяющий считывать сразу несколько байт, и искать первое вхождение за раз. В регистре x86 можно сравнивать сразу 4 байта. В x64 - 8. В SSE - 16. За одну итерацию. Далее. Сравнение цепочки байт. Можно сравнивать не по одному, а до 16 байт за итерацию. Ещё один подход применяют... при нахождении первого байта, сравнить ещё 2: тот что посередине, и тот что в конце. Это позволит избежать большинства ложных сравнивающих циклов. Наконец, если заморочиться, можно делать SSE операции чтения, выровненные на 16 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 00:42 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUОптимизировать многое что можно Ты уверен, что оно тебе нужно? )))Вопрос конечно не только практический, но даже Философский!..))) Практически - вариант поиска и замены мне удобней всего в плане подготовки данных и дальнейших действий! Но на реальных данных - не шибко быстрый... ... Ну а философски - типа "Нафига оно тебе надо... позже или раньше - все Там будем?" Так что ли?..) Отвечу - вот Там то как раз и не нужно ничего будет! А тут - уж пожалуйста, двигайся, ибо движение - это Жизнь! Люби и будь любимым! Бегай, прыгай, ходи в бассейн или загорай на солнышке! Потому, что ты человек! И т.д. и т.п. Ход мыслей моих понятен? ... А может у Вас есть реальное предложение?..) А вот у меня - пожалуй есть Задачка для толкового Кодера-СИшника-Дельфина, только денег заплатить не шибко много могу!..)) (Естественно - подробности не тут! - И так ОффТопим много!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 00:51 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Напиши в приват подробности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 01:08 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreatНапиши в приват подробности.Пардон, но я Приватов тут не нахожу, разве что мыло в профиле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 01:22 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Ну дерзай. Все возможные пути оптимизации я тебе назвал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 01:34 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНу дерзай. Все возможные пути оптимизации я тебе назвал Спасибо!..)) RawByteString добью сначало - где то ошибку допустил и зациклился! С КРЕЩЕНИЕМ, парни!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 01:40 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
А что, алгоритмы группы BM для быстрого поиска уже отменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 09:30 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
white_niggerА что, алгоритмы группы BM для быстрого поиска уже отменили?да вообще какой-то трындец Алгоритм Кнута — Морриса — Пратта это же rocket science ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 09:40 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Алгоритм Кнута — Морриса — Пратта это же rocket scienceИ не говори. Не любят классиков, всё велосипед изобретают оптимизаторы, ля :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 09:55 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
добавим ещё Алгоритм Бойера — Мура как самый простой для понимания ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 10:09 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)добавим ещё Алгоритм Бойера — Мура как самый простой для пониманиядык я с этого начал white_niggerА что, алгоритмы группы BM для быстрого поиска уже отменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 10:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
white_nigger, да ссылочка на всякий случай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 11:19 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
white_niggerА что, алгоритмы группы BM для быстрого поиска уже отменили? А фиг его знает - я его не реализую пожалуй!..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 13:18 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, у тебя ужо всё есть и работает? токо скорость не устраивает? али как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 13:26 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kep-koBellic, у тебя ужо всё есть и работает? токо скорость не устраивает? али как.я уже писал.. на TByte на реальных данных файла в 9Мбайт прога работает чуть меньше 2-х минут, в принципе - я не спешу ни куда, зато алгоритм прозрачен полностью! Сейчас реализовал на RawByteString + Pos(), но в начале цикла накуралесил чуток - зацикливается прога, никак не удается сосредоточиться, чтоб исправить алго... а сюда стыдно недоделку выложить!..(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 13:38 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic9Мбайт прога работает чуть меньше 2-х минут На 9мб должно работать за 0-16 миллисекунд примерно. Т.ч. есть поле для экспериментов :) P.S. На AnsiString (RawByteString) не может оказаться быстрее, чем при работе с байтами. В лучшем случае, если всё правильно сделать (и компилятор всё правильно сделает своей магией работы с автоматическими типами) - так же по скорости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 13:41 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
YuRock, авторНа 9мб должно работать за 0-16 миллисекунд примерно. Т.ч. есть поле для экспериментов :) 9 Метров - это Бин-файл, а еще есть второй файл с фразами Поиска и Замены, от куда они читаются и потом ищутся и меняются в первом файле...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 13:52 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
19.01.2018 13:52, Bellic пишет: > а еще есть второй файл с фразами Поиска и Замены, от куда они читаются и потом ищутся и меняются в первом файле...) если фраза для поиска не одна, имеет смысл наплодить потоков по количеству фраз. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 13:55 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийесли фраза для поиска не одна, имеет смысл наплодить потоков по количеству фраз. Если 2-я замена зависит от 1-й, то надо последовательно делать всё равно. Bellicеще есть второй файл с фразами Поиска и Замены, от куда они читаются Тогда ОжидаемоеВремя = КолвоЗамен*( 0 тире 16мс ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 14:01 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
19.01.2018 14:01, YuRock пишет: > Если 2-я замена зависит от 1-й, то надо последовательно делать всё равно. притянуто за уши Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 14:03 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
YuRock, автор Если 2-я замена зависит от 1-й, то надо последовательно делать всё равно. Замены не зависят друг от друга, но надо делать последовательно, ибо позже введу туда вывод ИНфы для юзера и Подтверждение или Пропуск замены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 14:19 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
19.01.2018 14:19, Bellic пишет: > Замены не зависят друг от друга, но надо делать последовательно, ибо позже введу туда вывод ИНфы для юзера и Подтверждение или Пропуск замены. замены естественно делай последовательно. после того, как ВСЁ найдёшь. а вот сам поиск выполняй в разных потоках. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 14:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellicстыдно недоделку выложить!..(([/i]де не дрейфь, мы хоть алгоритм осознаем, японский подучим )), ну и кодоидей подбросим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 14:53 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)добавим ещё Алгоритм Бойера — Мура как самый простой для понимания Самый простой?.. Да КМП, что выше писали, проще на порядок :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 15:05 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicА фиг его знает - я его не реализую пожалуй!..))Найди готовый. Или в гугле забанили? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 17:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicYuRock, авторНа 9мб должно работать за 0-16 миллисекунд примерно. Т.ч. есть поле для экспериментов :) 9 Метров - это Бин-файл, а еще есть второй файл с фразами Поиска и Замены, от куда они читаются и потом ищутся и меняются в первом файле...) Рефал что ли изобретаешь? для поиска всего и сразу используются вариации автоматных алгоритмов, Axo-Карасик например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 17:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Кстати, согласен Если искомых строк несколько, то предложенный мной вариант не катит В таких ситуациях нужно делать хеш от первого символа В идеале array[Char] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 18:01 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсли искомых строк несколько, то предложенный мной вариант не катит В таких ситуациях нужно делать хеш от первого символа А если делать от первых трёх, то будет ещё быстрее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 20:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
alekcvp, 3 байт или 3 юникодных символов? В любом случае размер быстрого массива становится большим :) А хеш в привычном смысле будет долгим для каждого символа. Ну и потом, кто сказал, что искомые строки обязаны состоять из 3+ символа? Твой вариант такой ситуации не предполагает )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 20:32 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Интересно, а у автора - включена ли галочка оптимизации?? Вообще. Как мне кажется, проект надо его - полностью пересматривать с точку зрения логики. Зачем он ищет в файлах ? И что это, за файлы ??? Что - то вроде архива ???? Если что - то вроде архива, то не легче было создать структурированную базу в начале файла, так называемый PE заголовок, который хранить адреса в фала (Смещения чтения) Нужных текстов, и их размер (С так далее) .... Тогда бы работа с гигантскими файлами занимала считанные секунды, зная к каким данным - в какой области мы обращаемся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 23:30 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Кстати, notepad ++ в файле размером 28,5 МБ (29 944 822 байт) ищет слово "ІеРюdx" за 2 секунды буквально. Которое находится в самом конце файла Вот там алгоритм мощный.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 23:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, а ты SQL где-нибудь используешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 00:12 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
чччДНяшик, а ты SQL где-нибудь используешь? Доводилась используй MySql из PHP пару десятков раз. Я кстати, нашёл алгоритм поиска в файле в notepad ++ https://github.com/notepad-plus-plus/notepad-plus-plus/blob/51797bf59e689b11d80998758790f8a4cade68eb/scintilla/src/Document.cxx#L1648 Обычный while и for .... Интересно, а чего так быстро работает? Неужели компилятор c++ такой быстрый xD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 00:26 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик...Неужели компилятор c++ такой быстрый Дельфи быстрее всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 01:00 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Запили обычный RawByteString из файла и Pos - он сработает быстрее, тем более под x86. А можно сделать ещё быстрее с SSE и применением пары алгоритмов. Насколько я понял, у ТС задача поиска сразу нескольких слов в файле и при нахождении - замена. Все акцентируют своё внимание на поиске, хотя скорее всего проседает замена :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 09:49 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, если нужно несколько фраз сильно быстрее искать 'деревом'. Все фразы представляются как дерево ветвления. Сравнивается первый байт каждой фразы с 'текущим', далее идёт ветвление, либо на выход, если ничего не нашлось, либо на конкретную фразу. Что-то наподобие как lzw работает по своим справочникам. Ну и 'линейный' поиск стоит оптимизировать. Должно на 9 мб искаться моментально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 10:00 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
makhaon, Да, тут уже предлагали Ахо-Карасика Только лучше не дерево, а хеш И хеш по первому символу - array[Char] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 10:30 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикЗачем он ищет в файлах ? И что это, за файлы ??? Что - то вроде архива???? А ты тред с самого начала почитать не пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 12:39 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Опять про хэши..... Не могут быть хэши быстрее, так как - мы генерируем хэш для искаемого слова. И генерируем для сравнения. По этому я в своём интерпретаторе использовал древовидный вид поиска лексем, как предложил выше makhaon Док, Сложно... Чтение не моё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 13:29 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, А кто виноват в том, что ты не умеешь хеши использовать? Хеши в разы быстрее дерева. Тем более, если речь идёт о символах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 14:00 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНяшик, А кто виноват в том, что ты не умеешь хеши использовать? Хеши в разы быстрее дерева. Тем более, если речь идёт о символах. Приведи пример - что ты имеешь введу под поиском - хэшом Если ты собираешься сравнивать хэш, то ты должен для каждой N+1 генерировать новый хэш. Для искаемой строки. Куда быстрее, чем просто сравнить .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 14:06 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Я уже раза 3 написал про массив от первого символа И про алгоритм Ахо-Карасика А твоё дерево лексем - это бред. С точки зрения оптимизации конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 14:15 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, А где там про хэш хоть слово ? https://ru.wikipedia.org/wiki/Алгоритм_Ахо_—_Корасик SOFT FOR YOUА твоё дерево лексем - это бред. С точки зрения оптимизации конечно. Посмотри что генерируют yacc в связке с bsion. Куча goto + switch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 15:26 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, У меня у самого есть суперкрутая утилита CachedSerializer, генерирующая case, и работающая со скоростью света. Но этот подход хорош тогда, когда перечень строковых констант изначально предопределён и длина идентифицируемой строки в момент поиска известна. В ситуации, когда в текстовом потоке мы выхватываем "лексемы", эта схема не работает, т.к. лексема и её длина зависит от последовательности символов. В этом случае актуален Ахо-Карасик, только подход при идентификации символов может быть разный. Можно делать полный перебор, поиск в сортированном массиве, дерево (и для заранее определённых констант можно написать case), но быстрее хешей всёравно ничего не будет. В твоём компиляторе, к примеру, можно существенно ускорить идентификацию лексем до 3 символов за раз с помощью таблиц(хеш). И я хотел это продемонстрировать, только ты из своей же ветки почему-то заблаговременно слился. Такое впечатление, что ты не компилятор пишешь, а рекламируешь дельфовый case. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 15:56 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ну так приведи поиск по хэшам. Мб готовая реализации уже есть на том же гите ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 17:08 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНяшик, В твоём компиляторе, к примеру, можно существенно ускорить идентификацию лексем до 3 символов за раз с помощью таблиц(хеш). И я хотел это продемонстрировать, только ты из своей же ветки почему-то заблаговременно слился. Такое впечатление, что ты не компилятор пишешь, а рекламируешь дельфовый case. У меня всё равно git. Один и тот же файл, два раза никак не перекомпилируется, если не был изменён. (И нет, он не будет весь компилировать. Только те участки, которые были изменены и добавлены) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 17:10 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Ты просто не знаешь, как пользоваться хешами И да, тебе с самого начала говорили, что не нужно заморачиваться на скорости трансляции скриптов, значительно важнее скорость исполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 17:18 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Да ты можешь наконец привести своё этакое чудо на хэшах? Или слился (Слился - слился, по настоящему) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 17:25 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Да не вопрос Приведи в качестве примера штук 20 своих лексем и напиши функцию, которая будет анализировать RawByteString и вызывать калбеки с описанием найденного. А я сделаю то же самое через хеши с упрощённой реализацией ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 17:33 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Няшик, на чё спорите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 17:39 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), На пинок :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 18:07 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Да не на что. Прощу привести пример, нет - же... .... Вот те пример из 21 правда. Но ничё. Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 18:14 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Выкладываю полный код моего генератора Код: php 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 18:16 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Это старый генератор, и не жалко его сливать. В новом я всё под move переделал. К примеру Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 18:25 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Приведи в качестве примера штук 20 своих лексем и напиши функцию, которая будет анализировать RawByteString и вызывать калбеки с описанием найденного. Я что-то не вижу тестового проекта и оговоренной функции. Проверять корректность и замерять производительность мы на чем будем? На заднице? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 18:27 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Замеряйте как угодно и на чём угодно, но в исходном топике (Няшика или чей он там был), а не тут. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 18:44 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, В других случаях я бы с тобой согласился, ибо против офтопика. Но в данном случае ситуация Ахо-Корасика (т.е. ситуация ТС) в чистом виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 18:48 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Вот проект. Тестируемый файл на 9,38 МБ (9 842 560 байт) 29120 строк с содержимым isset return if goto === require_once and var protected use => __DIR__ >= endswitch >> __CLASS__ >> endwhile list === == = >>= > JUTRJHIROTJHOTBHNIkoorth iyko hjisset return if goto === require_once and var protected use => __DIR__ >= endswitch >> __CLASS__ >> endwhile list === == = >>= > JUTRJHIROTJHOTBHNIkoorth iyko hj Время : 0,040280 Код проекта Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 19:40 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Можно удалить StringCASE ... Это случайно попало - отходы промышленности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 19:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, нашёл баг Время реальное - 0,148925 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 19:52 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Ранее ты опубликовал 21 лексему. Я уже пилю пример для них. Запили аналогично Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 19:56 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Няшик вообще то задача найти в тексте позиции содержащие слова из группы заданых строк, а не разложить его на лексемы например, провести следующие подстановки 'abc' -> '1' 'abe' -> '2' .... для порядка будем считать, что формально происходит последовательная подмена Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:03 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Так никто же не спорит Просто Няшик предлагает деревья, а я предлагаю хеши И мы рассматриваем частный случай его парсера, где набор искомых строк изначально известен, а значит, его можно захардкодить. Стандартный case по большому счёту и есть частный вид поиска по бинарному дереву ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:09 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, kealon(Ruslan)вообще то задача найти в тексте позиции содержащие слова из группы заданых строк, а не разложить его на лексемы"разложение на лексемы" куда более примитивная задача ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Привет всем! Я смотрю выходные даром не проходят - тема Топика переместилась в спор Ассов!?..)) Ну и у меня есть результат - допилил реальную свою процедуру на основе RawByteString и Pos() ... Для начала скажу, что та же процедура, но с куском кода на разных "платформах", на одних и тех же входных файлах, дала следующие результаты: - Memory -- 15-17 sec - TByte -- 92-93 sec - Raw+Pos -- 3-4 sec Размер входных файлов: - Бинарник в котором нужно искать и заменять - 10 Мбайт - Файл с данными для Поиска и Замены содержащий 357 пар (время на распарсивание его тоже тратится) - 48 Кбайт Количество произведенных замен - 526 Сам код получился достаточно коротким, но пришлось пошагово выловить несколько ошибок: =Поиск и Замены на RawByteString + Pos() Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Ну и пару вопросов по RawByteString : - если в переменной этого типа уже есть данные, то следующее присваивание новых - выдает не правильный результат, в отличии от Sting?! Может быть тут есть оператор позицирования? Или же нужно тоже указывать начальную позицию? т.е. вместо Код: pascal 1. писать Код: pascal 1. ???) (мне пришлось делать RawPoisk=''; и RawZamena=''; ) - при записи в файл указал начало: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Конечно же ускорить всю процедуру можно, но для этого потребуется всю ее перелопатить! Я же сравнивал быстродействие, меняя чисто отдельный блок кода , отвечающий за Поиск и Замену! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:28 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, ну чтож, значит с задачей угадали, однозначно Рефал переизобретён ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:29 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Выложишь тестовый проект ??? С файлами, с примером что должно получится. И так далее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:29 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
В общем у меня готова реализация, которую можно назвать демонстрационной Идея родилась как раз, когда Няшик мучил нас своими простынями нагенерированного кода для парсера Причём огромная часть токенов имело вид <= >= == $ " >>> + - >>= и прочая штукенция Сначала я сделал табличное преобразование первого символа. От case уйти не удалось, но зато появилась возможность сделать его последовательным, т.е. на x86 бинарное дерево поменять на jmp [eax * 4 + offset], т.е. сделал некое подобие хеша. Соответственно и для задачи ТС предлагалось сделать array[Char] для первого символа, чтобы оперативно определять, символ S[i] является первым символом одной из искомых строк или нет. Вообще array[Char] - это частный быстрый вид хеша, его минус расход памяти, поэтому применим не всегда, но для первого символа - самое то. Так вот, возвращаясь к задаче Няшика, я постоянно настаивал на том, что для скорости компиляции лучше использовать байтовую кодировку (UTF-8, например). Потом возникла мысль, что можно "хешировать" сразу 2 символа, но тогда понадобится 64Кб таблица. А потом возникла мысль, что можно "хешировать" сразу 3 символа, причём это может занять значительно меньше памяти, а все операторные лексемы (типа <= >= ===) будут охвачены, уйдут простыни кода и многочисленные ошибки предсказаний ветвлений. Вот пример. Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. Вот что на выходе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Но многобуквенные лексемы я бы как-нибудь приспособил под универсальный компаратор, честно говоря. Это вообще не та ситуация, где нужно использовать кодогенерацию, ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:34 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Да, и тут у меня спрашивали - включена ли "Оптимизация"? Т.к. сравнивать время выполнения начал еще при Выкл., то для чистоты экспериментов - далее ее не включал! А вот скажите мне пожалуйста - почему она не включена "По умолчанию"? Кстати - переход в режим Релиза, тоже даст результат, но я пока тестировал все в Дебаге! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Убедительная просьба - заведите пожалуйста для своих споров ОТДЕЛЬНУЮ тему!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:37 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SOFT FOR YOU, kealon(Ruslan)вообще то задача найти в тексте позиции содержащие слова из группы заданых строк, а не разложить его на лексемы"разложение на лексемы" куда более примитивная задача Согласен, что примитивная. Так как можно захардкодить. Но зачем ты мне это пишешь? Я ещё раз акцентирую твоё внимание - вопрос поиска подходящих вершин по Ахо-Корасику: деревьями или хешем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:37 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Bellic, ну чтож, значит с задачей угадали, однозначно Рефал переизобретён Не совсем понял о чем речь? - Можно поподробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:38 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicSOFT FOR YOU, Убедительная просьба - заведите пожалуйста для своих споров ОТДЕЛЬНУЮ тему!!! В споре рождается истина Ты просил быстрый поиск нескольких строк или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:39 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Кстати Здесь была интересная ветка про StringReplace, но её, похоже затёрли. Так вот основная проблема StringReplace с множеством вхождений - в реаллоке памяти. Особенно, если речь идёт о нескольких мегабайтах. Решение следующее. Мы анализируем всю строку и создаём массив структур вида <Указатель, Длина>, где Указатель это либо часть исходной строки, либо заменяемая строка. Таким образом, когда анализ исходной строки заканчивается - мы имеем полное представление о результате. Сначала подсчитываем результирующую длину, выделяем требуемое количество памяти, потом последовательно заполняем результат нашими "кусками данных". Там проблема была в том, где хранить массив структур <Указатель, Длина>. В качестве решения был базовый массив на стеке, а при нехватке дополнительно выделялись буферы в куче. На практике всегда хватает стека, но для общего случая реализация тоже подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:56 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикВыложишь тестовый проект ??? С файлами, с примером что должно получится. И так далее А история то начиналась еще с Мемори вот в этом Топике: Поиск и Замена последовательности байт в бинарном файле До этого была жуткая по времени (24 часа) реальная процедура на реальных файлах - на TFileStream , позже выделенный желтым участок кода был переделан на TByte , а сейчас вот на RawByteString ...))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:02 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, А почему код не полны ? Сам меня тыкал выложить полный. А сам свой не выложил. Кстати, у меня UTF8 может обрабатывать, а твой только AnsiString. Как то немного не честно будет.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:11 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Ну во-первых, тут без разницы. Можно хоть PAnsiChar указывать с нулём на конце. Во-вторых, ты свой тест так и не выложил, чтобы сравнить. В-третьих, что не хватило для компиляции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНяшик, Ну во-первых, тут без разницы. Можно хоть PAnsiChar указывать с нулём на конце. Во-вторых, ты свой тест так и не выложил, чтобы сравнить. В-третьих, что не хватило для компиляции? Как не выложил? 21123284 Не хватает THIRD_CHARS и THIRD_CHARS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:30 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик , SOFT FOR YOU , я Вам не мешаю???..))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:32 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикSOFT FOR YOUНяшик, Ну во-первых, тут без разницы. Можно хоть PAnsiChar указывать с нулём на конце. Во-вторых, ты свой тест так и не выложил, чтобы сравнить. В-третьих, что не хватило для компиляции? Как не выложил? 21123284 Не хватает THIRD_CHARS и THIRD_CHARS Я же тебе чёрным по белому написал. Выложи код для 21 токена и байтовой кодировки: 21123290 А таблички я генерю, завтра выложу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 00:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic Няшик , SOFT FOR YOU , я Вам не мешаю???..))) Мы обсуждаем твою тему. Что тебя не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 00:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUКстати Здесь была интересная ветка про StringReplace, но её, похоже затёрли. Так вот основная проблема StringReplace с множеством вхождений - в реаллоке памяти. Особенно, если речь идёт о нескольких мегабайтах. Решение следующее. Мы анализируем всю строку и создаём массив структур вида <Указатель, Длина>, где Указатель это либо часть исходной строки, либо заменяемая строка. Таким образом, когда анализ исходной строки заканчивается - мы имеем полное представление о результате. Сначала подсчитываем результирующую длину, выделяем требуемое количество памяти, потом последовательно заполняем результат нашими "кусками данных". Там проблема была в том, где хранить массив структур <Указатель, Длина>. В качестве решения был базовый массив на стеке, а при нехватке дополнительно выделялись буферы в куче. На практике всегда хватает стека, но для общего случая реализация тоже подходит.Зачем так сложно? Выдели изначально памяти с запасом, потом урежешь. Вот и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 01:20 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreat, А ты не знаешь изначально, сколько будет результирующий размер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 01:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Взять с запасом. Не хватит - увеличить вдвое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 01:31 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
По любому быстрей чем вручную считать. Да и можно тупо OldPattern с NewPattern сравнить для оптимизации памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 01:32 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
rgreat, А чего не втрое? Твоё решение топорное, простое Моё решение академическое, элегантное По скорости получается одинаково, но в моём случае есть гарантия, что лишних реаллоков памяти не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 10:16 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
В продолжении к 21123582 выкладываю таблички Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 11:06 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Короче, выкладывай исходный файл и список замен. Хватит ходить вокруг да около :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 11:09 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Вы в своем споре похоже пропустили или проигнорировали мое сообщение 21123543 ?..((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 12:01 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Ничего не пропустил. Ты делал разные опыты с разными подходами. Но Ахо-Корасика я там не увидел. Почему? Возможно твой вопрос с RawByteString связан с этим. Хоть и до конца не ясно, че ты хотел. Поэтому посыл остаётся прежним. Выкладывай исходный файл и список замен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 12:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, наверное где-то это было, но тема разрослась, а в первом сообщении не нашел: при замене, как я понял, длина новой подстроки совпадает с длиной старой, правильно? (то есть заменяем OldPattern на NewPattern и длины строк OldPattern и NewPattern равны?) Это я делаю вывод из Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 12:39 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
авторНо Ахо-Корасика я там не увидел. Почему?SOFT FOR YOU, ты издеваешься? У меня код поиска и замены получился короче некуда! Просадка во времени в Реальной процедуре - в другом месте видимо! В сообщении 21123543 у меня было пара вопросов... Игнор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 12:51 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
s62 , да, в моем случае RawPoisk b RawZamena - равные по длине! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 12:54 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Алгоритм Ахо — Корасик - конечно интересная штука, но я долго в нем буду разбираться.. Возможно изучу позже - сейчас отвлекают часто..)) Выходные всеж! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 12:59 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Да.. Быстрее в 1.6 раза, я в своём примере убрал сборку строку. И результаты 0,073298 Мой 0,046160 Твой На файле из поста 21123284 Кинь статью почитать, про то, как генерировать такие хэши. Я программку динамическую напишу тогда уж, для генерации подобного Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. 737. 738. 739. 740. 741. 742. 743. 744. 745. 746. 747. 748. 749. 750. 751. 752. 753. 754. 755. 756. 757. 758. 759. 760. 761. 762. 763. 764. 765. 766. 767. 768. 769. 770. 771. 772. 773. 774. 775. 776. 777. 778. 779. 780. 781. 782. 783. 784. 785. 786. 787. 788. 789. 790. 791. 792. 793. 794. 795. 796. 797. 798. 799. 800. 801. 802. 803. 804. 805. 806. 807. 808. 809. 810. 811. 812. 813. 814. 815. 816. 817. 818. 819. 820. 821. 822. 823. 824. 825. 826. 827. 828. 829. 830. 831. 832. 833. 834. 835. 836. 837. 838. 839. 840. 841. 842. 843. 844. 845. 846. 847. 848. 849. 850. 851. 852. 853. 854. 855. 856. 857. 858. 859. 860. 861. 862. 863. 864. 865. 866. 867. 868. 869. 870. 871. 872. 873. 874. 875. 876. 877. 878. 879. 880. 881. 882. 883. 884. 885. 886. 887. 888. 889. 890. 891. 892. 893. 894. 895. 896. 897. 898. 899. 900. 901. 902. 903. 904. 905. 906. 907. 908. 909. 910. 911. 912. 913. 914. 915. 916. 917. 918. 919. 920. 921. 922. 923. 924. 925. 926. 927. 928. 929. 930. 931. 932. 933. 934. 935. 936. 937. 938. 939. 940. 941. 942. 943. 944. 945. 946. 947. 948. 949. 950. 951. 952. 953. 954. 955. 956. 957. 958. 959. 960. 961. 962. 963. 964. 965. 966. 967. 968. 969. 970. 971. 972. 973. 974. 975. 976. 977. 978. 979. 980. 981. 982. 983. 984. 985. 986. 987. 988. 989. 990. 991. 992. 993. 994. 995. 996. 997. 998. 999. 1000. 1001. 1002. 1003. 1004. 1005. 1006. 1007. 1008. 1009. 1010. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 13:09 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, 3 секунды для 10Мб, а особенно с заменой на строки одинаковой длины - это ужасно медленно! А вопросы твои ужасно сформулированы. Сформулируй по-человечески. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 13:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Нашел по вот http://forum.sources.ru/index.php?showtopic=173106&st=60] этому адресу уже готовый проект с алго "Ахо-Корасик"..)) Будет время - потестирую в разрезе своей реальной процедуры! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 13:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Выложи свой проект с исходными данными и заменами. Хватит мучить наши мозги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 13:24 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU3 секунды для 10Мб, а особенно с заменой на строки одинаковой длины - это ужасно медленно!Сказал же уже что проседает в другом месте! А вопросы твои ужасно сформулированы. Сформулируй по-человечески. Код: pascal 1. 2. 3. 4. А теперь попробуйте тоже самое сделать поменяв тип String на RawByteString ! Что-бы получить результат - мне пришлось сделать так: Код: pascal 1. 2. 3. 4. 5. Почему нельзя просто переприсвоить значение новыми данными как со Стрингом? может будет так правильно?: Код: pascal 1. 2. 3. 4. ??? SOFT FOR YOU , надеюсь так мой вопрос понятен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 13:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикДа.. Быстрее в 1.6 раза, я в своём примере убрал сборку строку. И результаты 0,073298 Мой 0,046160 Твой На файле из поста 21123284 Не корректно замерять производительность на таком файле. Там же UNKNOWN идентификаторы типа "JUTRJHIROTJHOTBHNIkoorth" и мой пример для каждой буквы будет выдавать unknown-токен. К тому же на практике буквенные операторы встречаются значительно реже, чем те же <= или $, а ты частоту их использования уравниваешь. НяшикКинь статью почитать, про то, как генерировать такие хэши. Я программку динамическую напишу тогда уж, для генерации подобного Нет никакой статьи. Да и генерацией хешей данную задачку нельзя назвать. Здесь идёт речь о генерации таблиц, и хешами они тут называются из-за отсылки к алгоритму Ахо-Корасика, где нужно идентифицировать символы. Как и в ситуации ТС, так и в общем случае для подобного класса задач, я рекомендую создать array[Char] для первого символа, по которому уже можно будет определить, что с этим символом можно делать. В случае ТС может содержаться указатель на массив искомых идентификаторов по первой букве или nil. В твоём случае это может быть "класс первого символа". Например, для #0 "класс первого символа" равен 0. Для всех пробельных символов (включая символы перевода каретки и табуляции) "класс первого символа" равен 1. Поэтому осуществить пропуск пробелов и отследить конец файла - получается весьма элегантно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Для буквенных лексем я бы выбрал всего один "класс первого символа" и их идентификацию сделал бы в отдельной функции. Ну а второй и третий символ - сделаны для быстрой идентификации всех твоих многочисленных операторов без ветвлений (надеюсь, ты уже в курсе, чем плоха ошибка предсказания ветвления) и простыней кода. Кидаю, как я генерировал таблички: Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 13:59 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Я бы, для замена в строки массово слов. Нашёл сначала все слова которые надо заменить. Дальше бы, выделил новую строку, вместе с длиной всех заменяемых символов. Копировал бы строку в новую, до Н найденного. Копировал найденное. Передвинул указатель до X заменяемого. И так, пока всё не скопирую в новую строку. А старую, бы, попутно через N количество отчищал, что бы память не гадить сильно. .... Такой подход должен быстро работать, за счёт одного раза выделения новой памяти. И простому копирование в неё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 14:01 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicСказал же уже что проседает в другом месте! Ты нас за лохов что ли держишь? У тебя 357 пар замен на 48Кб, где он у тебя ещё может проседать при замене в одинаковую длину? Bellicнадеюсь так мой вопрос понятен? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. На выходе: Код: plaintext 1. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 14:06 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Вот код, одинаковый для фраз Поиска и Замены: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. При повторном прохождении - без оператора во второй строке (RawPoisk := '';) - последняя строка дает неверный результат! (Изначально фразы поиска и замены хранятся в Нех-виде, например: "31 32 33 34 45" - это соответственно цифры 1 2 3 4 5) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 14:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
В данном коде как я понял, строка Код: pascal 1. Примерно аналогична присваиванию: Код: pascal 1. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 14:52 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Приведи полноценный тестовый проект (небольшой) Где можно оттрейсить и найти проблему Пока ты разговариваешь не непонятном языке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 15:05 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicВ данном коде В данном коде нет объявлений переменных, поэтому там может быть всё что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 15:51 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUВ продолжении к 21123582 выкладываю таблички Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. Начал тестировать твой код тщательнее.. И заметил, что у тебя колоссальная ошибка. Ты не проверяешь конец слова, к примеру issetError и isset будут ровны, потому что он сравнит только isset и скипнет 5 символов. И того,если ты добавишь проверки конца слова. Наши коды станут равноценными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 19:15 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Так добавь проверку на конец слова сам в коде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 19:51 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
alekcvpВ данном коде нет объявлений переменных, поэтому там может быть всё что угодно. Прилагаю Тестовый проект в котором возникает ошибка в метке "Err" на втором проходе внешнего цикла (i). В реальном проекте помогало разремливание строчки Код: pascal 1. Тут эта строка тоже выдает ошибку. ... открывать файл "file.tst" в каталоге проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 22:31 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Во первых при диалоги открытии ты должен весь код засунуть в begin а не только извлечения имени файла. Во вторых, у тебя два символа первых будут указывать на $00 = 0 что ровно #0 и твоя строка RawString дальше не выведется. Пользуйся отладчиком. Ёмаё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 23:27 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикВо первых при диалоги открытии ты должен весь код засунуть в begin а не только извлечения имени файла. Няшик, Диалог - не суть вопроса, а просто подготовка!.. Это всеж Тестовый код, без проверок и прочего! Если для тебя это сейчас важно - подправь у себя: Код: pascal 1. 2. 3. 4. Тогда уже и " Try--Finally--End " добавь себе для полноты счастья!..))) ... я таки и смотрел все в отладчике! - Первый проход все нормально идет, как и запланировано! Не придирайся к упрощению - запусти отладчик и посмотри сам лучше! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 23:41 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, там так и задумано - первый $00 = 0 и т.д. И все попадает и в массив и в RawString... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 23:42 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. Нельзя таким образом приводить массив байт к строке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 00:30 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicПоиск последовательности в бинарном массиве "Бинарный массив" - это что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 00:58 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Код: pascal 1. Нельзя таким образом приводить массив байт к строкеТогда как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:04 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
чччД"Бинарный массив" - это что? Вообще то подразумевалось - BFile: TBytes; Но по совету Бывалых - уже давно на RawByteString перешли!..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:07 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНельзя таким образом приводить массив байт к строкеВообще - преобразование через Массив можно и исключить - он остался от реализации на TByte... И даже BFile: TBytes; - файл сразу прочитать в RawByteString... но смысл преобразования должен остаться! Видно мне еще мозгов не хватает, чтоб это преобразование (даже и не знаю как его назвать) сделать оптимально правильным..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:20 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, А теперь, открой диалог, и закрой его - словишь ошибку, отсутствия файла. Когда ты ничего не выбрал, но ты пытаешься открыть файл, читая переменную которая забита мусором. .... Ты в отладчике глянь что там за первый символ, не 0. А #0 конец строки! В начале строки. Вот так ошибок не будет Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:34 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикВот так ошибок не будет Достаточно так: Няшик Код: pascal 1. 2. И лесенка не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:48 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
YuRock, Можно конечно же и так. Хотя в коде, разницы не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:51 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicВообще - преобразование через Массив можно и исключить - он остался от реализации на TByte... И даже BFile: TBytes; - файл сразу прочитать в RawByteString... но смысл преобразования должен остаться!Не нужны никакие "преобразования", ни разу. Сразу прочитать надо весь файл в один кусок памяти (TBytes, PByte, PAnsiChar, RawByteString - не важно) и дальше бегать по нему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:51 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Точнее в ассемблер, коде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 01:52 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicSOFT FOR YOU Код: pascal 1. Нельзя таким образом приводить массив байт к строкеТогда как? Мне лень объяснять Сразу читай в строку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 09:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUМне лень объяснять Сразу читай в строку Дык напиши тогда хоть строку кода - о чем думаешь, без объяснений! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:10 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Его код бред, он собирает по два символа Код: pascal 1. 2. Далее, он пытается перевести в Hex Код: pascal 1. Когда $00 = 0 и будет #0 (Конец строки) А что должно быть ? Притом, хоть он и берёт по два символа. Но он использует стандартный for Код: pascal 1. Что значит, что m будет + 1 и если мы вернёмся к заполнению SPSimvol то мы опять же пишем пред последний символ записанный, + 1 новый. Вместо выделения каких - то байт, мог бы выделить RawString и в неё писать по индексу. .......... Этот код никогда не в какой мере, не должен был работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:12 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикЭтот код никогда не в какой мере, не должен был работать. Ну не знаю.. Предложи конкретный вариант кода... А изначально, когда я еще пытался воспроизвести это на FileStream , там было сразу чтение 2-х байт: Код: pascal 1. 2. Ну и после верхний код как то сам навеял это: Код: pascal 1. 2. А твой вариант: Код: pascal 1. 2. и правда помог, но логичнее было бы вторую строку поставить до начала цикла m , потому что ниже с RawString -гом мне еще предстоит поработать! Но перенеся " PInteger(PByte(RawString) - 8)^ := 0; " выше цикла - получаем Ошибку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:31 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Читай сразу в строку Что не понятного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Ты опять несёшь опять бред. 1) Если ты используешь чтение 2 байт, то и получишь что было 2) Твой Hex перевод, в связке с FileStream даст тоже самое, что у тебя уже есть 3) Читай внимательнее НяшикВместо выделения каких - то байт, мог бы выделить RawString и в неё писать по индексу. 4) Присвоения ссылок обязательна после, потому что ты присвоил массив байт. В котором ничего нету о количесте ссылок, и переменная RawString не на что не указывает, и у неё нет никакого счётчика = муссор = ERROR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:38 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикКогда $00 = 0 и будет #0 (Конец строки) А что должно быть ? Няшик , а ты вижу - сам то брезгуешь глянуть что происходит с переменными в отладчике!? А еще загляни что внутри файла "file.txt"! А там записано "003132333435" и далее куча нулевых байт.. В Hexсе файл выглядит вот так: Код: pascal 1. И задача - прочитать по 2 байта и получить: 00 (тут чисто Ноль), 31h-символ "1", 32h-"2", 33h-"3", ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:42 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Возможно и бред.. но все работает! Через 15 минут я останусь без света и компа, а вы все общими фразами кидаетесь, да оскорблениями! Просили тестовый код - вот он есть! По моему суть перекодировки прозрачна!? Ну может по вашему - не правильная! Возможно! Ни на чего не притендую, но мне было бы проще понят - увидев конкретный вариант замены "моих ошибочных" строк, на "ваши правильные"! А выражения типа "присваивай сразу в строку" - понятие растяжимое! Теперь я попрошу - приведите конкретный свой код, а не пустые слова! Справедливо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:50 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Тебя никто не оскорблял, и тебе уже всем помогли. Не строй из себя бедного, лишь потому что до сих пор понять ничего не можешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:56 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, там ноль и должен быть!!!! Разве нельзя его в RawByteString записать? Это вообще то подготовка к Поиску и Замене, которую мы уже реализовали по вашему предложению на РавБайтСтрингах и Пос! Кстати - нули в реале будут и в конце фраз Поиска и Замены! Это как то противоречит идеалогии RAW? ... Сижу без света...((( На мобиле..(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 13:14 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 16:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Чёрт, совсем забыл :) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 16:44 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, спасибо большое!!! Догадывался, что мою мазню "перекодировки" с двумя байтами можно как то более элегантней реализовать!))) Возможно это даже не единственный вариант.. Надеюсь нули не отбрасывает, ибо они есть немаловажная часть получаемых строк!? Вечером попробую на ХЕ и подопытных кроликах!))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 16:46 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Только как это поможет искать в другом массиве ??? Если другой массив имеет мб другую последовательность байт, а не ту - которую уже тут навыдумывали. ТС кстати похоже и сам не знает что там за последовательность байт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 19:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикТС кстати похоже и сам не знает что там за последовательность байтИ это основная проблема Bellic в данном топике. Все эти копания в сорцах - бессмысленны, пока ТС не поймет что ему нужно сделать. В деталях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 19:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикТолько как это поможет искать в другом массиве ??? Если другой массив имеет мб другую последовательность байт, а не ту - которую уже тут навыдумывали. ТС кстати похоже и сам не знает что там за последовательность байт rgreatИ это основная проблема Bellic в данном топике. Все эти копания в сорцах - бессмысленны, пока ТС не поймет что ему нужно сделать. В деталях. Зачем же так? Программа собственно уже была написана мной и выполняла свою функцию, просто несколько неторопливо... начал с простого распарсивания нужных данных, позже заострил внимание на сравнениях (ссылку не буду давать - помните несколько вариантов - на FileStream, TBufferedFileStream, TMemoryStream, TBytes...). А вот в этой теме, по вашему же совету, в участке кода, отвечающем за Поиск и Замену, воспользовался RawByteString-ом вместо работы с Memory и TByte. Так что "дом уже давно построен"! Или вы думаете, что я щупаю сорцы, намереваясь позже из них строить еще не существующий код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:32 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Большущее всем Вам Спасибо от чистого сердца, что помогали и возможно терпели мое непонимание в некоторых моментах!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Как я уже упоминал ранее - очень заинтересовал Алгоритм Ахо-Корасика в плане применения в программе... Но что-бы его реально пощупать и сравнить - мне придется очень много переделывать в уже достаточно разросшемся коде (на самом деле - ту несколько отдельных утилит), а все из-за того, что для Алго Ахо-Корасика нужно сразу иметь "массив" того, что нужно искать! У меня же пока реализован последовательный тип - распарсиваем одну пару Поиск-Замена, ищем и меняем в бинарнике, затем распарсиваем вторую пару и т.д. А надо бы одним проходом распарсить все-привсе, а потом уже браться за поиск-замену, ну естественно прикрутив Карасика..))) Наверняка там тоже появятся какие-то вопросы..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:45 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Мне непонятно, как ты открыл старый замок - новым ключом.. Да так, что бы он отлично работал... Хотяя, мне кажется что это не последняя твоя тема мольбы о помощи, в том что ты не понимаешь По мне так, string или же RawByteString или же даже AnsiString никакого значения не имеет - совсем. Так как идёт всё тоже самое присвоение по индексу, за счёт одного - раза, выделения памяти под данные. И что бы не быть многословным, приведу примеры, из твоего же кода Код: pascal 1. 2. 3. Присвою им значение, и открою в отладчике. И гляну как ASM код отличается во всех случаях Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Можем заметить, что при присвоении по индексу, в случае RawByte был использован byte прессование, а там word И использованы функции Код: pascal 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. Но как видим, всё это ягоды одного поля, и разница если будет, то очень не большая. Так что, нужно написать тестер - который покажет, есть ли она разница и на сколько Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. Тесты такие String Set Index: 0,294398 RawByteString Set Index: 0,291288 ---------- String Set global: 0,584003 RawByteString Set global: 0,599694 Ураа!!! В случае установки по индексу, ты выиграл целых 0.00311!!!!! Поздравляю!!!! Но в случае с установкой, + дописыванию, ты потеря целых 0.015691 Тестировал с включённой оптимизацией. Без неё String Set Index: 0,288884 RawByteString Set Index: 0,294933 ---------- String Set global: 0,570846 RawByteString Set global: 0,606367 Вообще !!! RawByteString проигрывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 21:08 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, попрошу поосторожней быть в своих выражениях и прочитать еще раз на всякий случай "Правила" данного форума!!! (Цитата из правил: Форум предназначен для обсуждения вопросов, связанных с СУБД и родственными темами. Возможно обсуждение других вопросов согласно наименованию разделов форума.) Я по сути - спрашивал совета знающих и более опытных людей, и получал на них ответы - кому было не лень читать и отвечать - помогали мне в решении вопросов! Никого насильно в Тему я не затаскивал и уж тем более - на коленях с мольбой не стоял! Кстати - еще раз отдельное спасибо SOFT FOR YOU за его терпимость к моему упрощению вызова Диалогового окна: Код: pascal 1. 2. - Человек и так понял суть, и не стал читать морали и уводить в сторону обсуждение! Что касается АСМа, то до таких внутренностей Дэлфи я еще не спустился (или не поднялся), хотя в свое время изучал и EC ЭВМ с его Асмом, а позже - Асм СPU 580, Z80, 1801-1803... Няшик, спасибо и Вам за подсказки и участие в обсуждении! Будут вопросы - конечно же обращусь сюда еще и возможно не раз! Да, пинали, но не до смерти же?!..)) Или Вы против?..))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:08 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Жаль правда, код от SOFT FOR YOU не дал ожидаемого результата, ни с функцией, ни без нее! Вкурю покамесь и пошагово побегаю по нему - может и заработает правильно!..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:39 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Не понял, что ты тестировал Но RawByteString может проигрывать на операции присвоения символа, т.к. при каждом присвоении вызывается UniqueString Bellic, Ну так я тебе тысячу раз говорил, мол выкладывай свой тест. В итоге оказалось, у тебя вообще ничего нет. Мы не сможем показать тебе Ахо-Корасика и быстрый Replace - если ты сам не открываешь код. А что до диалога... ну я согласен, ты просто не знаешь как принято работать с диалогом и ребята тебе на это указали. Я показал try/finally - это тоже стандартный способ создания/удаления объектов. А так дерзай. Здорово, что человек не связанный профессией с программированием, делает такие успехи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:40 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU А что до диалога... ну я согласен, ты просто не знаешь как принято работать с диалогом и ребята тебе на это указали. Я показал try/finally - это тоже стандартный способ создания/удаления объектов. Не поверишь - знаю прекрасно и как Диалогами пользоваться и try/finally - просто для теста упростил код, на скорую руку, чтоб он работал, и не думая что найдутся "умники", желающие щелкнуть на Крестик, открыть файл нулевой длины или вообще отказаться от загрузки файла в открытом диалоге!!! Код для Вас был - в надежде, что сокращение поймете молча! Ну что тут было не понятно??? Сколько можно уже мусолить??? P.S. В своих реальных программах стараюсь ничем не пренебрегать, не упрощать и предусматривать все возможные варианты (возможно даже уж черезчур строго), особенно что касается выбора файлов или же некорректные действия пользователя (например выбор файла - только через диалоговое окно с последующей кучей проверок, ТEdit-ы индикации выбранных файлов при этом делаю ReadOnly и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 23:04 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Ну так я тебе тысячу раз говорил, мол выкладывай свой тест. В итоге оказалось, у тебя вообще ничего нет. Мы не сможем показать тебе Ахо-Корасика и быстрый Replace - если ты сам не открываешь код. Чего это у меня нет? Выкладывать сюда код реального набора утилит?..)) Извините - такого в мои планы не входило! (Три юнита и более 3000 строк включая комменты!) Это породило бы еще больше вопросов и мнений - как бы кто реализовал то или иное место! А еще пришлось бы рассказывать ТехЗадание и форматы файлов - еще неделя пустых разговоров и придирок... Оно Вам надо??? P.S. а Ахо-Красика, будет время, я после и сам думаю сумею освоить! Что касается Replace, то он мне не подходит, потому что: 1. Необходим подсчет произведенных замен 2. Кроме автоматического режима будет еще и полу-автомат с подтверждением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 23:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicНяшик, попрошу поосторожней быть в своих выражениях и прочитать еще раз на всякий случай "Правила" данного форума!!! А что я написал не так ??? Скорее, ты прочитал что - то не так.. Bellicк моему упрощению вызова Диалогового окна: Да ты мог бы написать так Код: pascal 1. 2. Было бы тоже самое. SOFT FOR YOUНяшик, Не понял, что ты тестировал Но RawByteString может проигрывать на операции присвоения символа, т.к. при каждом присвоении вызывается UniqueString Производительность типов. Но, при установки в индексы - слишком маленький выигрыш, у меня на компьютера составляет от 0.00600 до 0.00100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 00:53 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Тебя просили выложить маленький - реальный пример, подобного - имитирующего то, что тебе надо было реализовать. Чтоб, не гадать алгоритмы какие - то, исходя из твоих надуманных годов, и мол - так может быть, но я и сам не знаю. По этому, подскажите мне, гадая на своих шарах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 00:55 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикЧтоб, не гадать алгоритмы какие - то, исходя из твоих надуманных годов, и мол - так может быть, но я и сам не знаю. По этому, подскажите мне, гадая на своих шарахЭто уже не первая его тема такая) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 00:58 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, лично для Вас - дополнил инфу в своем профиле!..))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 08:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellicдополнил инфу в своем профиле!..))) да ты - романтик ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 09:33 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Докда ты - романтик ;) Спасибо за комплемент, Док !..)) Разобрался где ошибка в коде SOFT FOR YOU : Код: pascal 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. PSimvol= $31 получалось $13 , ну и в RawString - полная каша! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 13:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Разве в твоём файле нет бинарных данных ? Юникод там ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 13:37 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикРазве в твоём файле нет бинарных данных ? Юникод там Доброе утро! Только проснулся?...)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 13:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Дай - ка вспомнить, хм... Я пошёл спать в 8 и проснулся в 13:30... Хм.. Сейчас 16:03 и делаем сложный расчёт 16-13 : 30 - 03 получается 3:10 уже кааак А сиго? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 14:04 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, хочешь разминку для мозгов?..)) Мой вариант кода в цикле на 1000 итераций выполнился за 0,85 а быстродействующий SOFT FOR YOU - за 0,92 секунды!..)) Исходники выложить или сам хрустальными шарами сообразишь?..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 14:16 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Вот блин, к чему это??? Конечно же его код, может работать медленнее - при неправильном использование... Кстати, я нАрочно кое где сделал ошибку, а ты и не заметил? ... Меня до сих пор волнует, каким образом - ты его структуру, в свой код применил. И кстати - да, ты правильно заметил что у него в алгоритме ошибка. В SysUtils есть такая функция Код: pascal 1. 2. 3. 4. Которая выполняет ту же логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 14:24 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, ты не только ошибку сделал, ты кое что и проигнорировал в другой теме - ну да ладно, проехали! Няшик... Меня до сих пор волнует, каким образом - ты его структуру, в свой код применил. О какой структуре речь то??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 14:48 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикКстати, я нАрочно кое где сделал ошибку, а ты и не заметил? Где, что, когда? Вот ты негоДяй, а не Няшик!..)))) Видимо я пропустил мимо ушей или же в голове сработал авто-исправлятель и твоя "нАрочная" ошибка не вызвала фотальной ошибки моего вычислительного устройства под названием "Мозг"..)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 14:54 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Вот видишь, как замечательно. На таких примерах лучше познаёшь хекс :) Но насчёт скорости не согласен. Не может мой пример работать медленее твоего. Ты скорее всего в моём коде поменял RawByteString на TBytes и получил профит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:00 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicО какой структуре речь то??? У тебя есть база данных, в каком формате (Алгоритме шифровки) - ты постеснялся написать. Тебе дали код, который пакует несколько байт в один. И ты такой довольный заявляешь : Это - то, что надо! Вопрос, ты переписал базу данных под (hex(c) << 4) + hex(b) Пакуя её компактнее ??? Или же, ты прост воткнул его код, и думаешь что он работает? Ведь, если бы ты свою базу данных не перелопатил, то сравнение бы не произошло BellicГде, что, когда? Когда ты спрашивал давно ли я проснулся. А ты ?) xD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:02 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНо насчёт скорости не согласен. Не может мой пример работать медленее твоего. Ты скорее всего в моём коде поменял RawByteString на TBytes и получил профит. Лови исходники и тестируй сам! Твой код, SOFT FOR YOU: Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. Вот мой код Мой код: Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. Запускай и сравнивай сам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:18 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Выложи отдельный проект с исходным файлом и двумя кнопками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:28 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, ничего не понимаю в твоих вопросах: НяшикУ тебя есть база данных, в каком формате (Алгоритме шифровки) - ты постеснялся написать. Тебе дали код, который пакует несколько байт в один. И ты такой довольный заявляешь : Это - то, что надо! Вопрос, ты переписал базу данных под (hex(c) << 4) + hex(b) Пакуя её компактнее ??? Или же, ты прост воткнул его код, и думаешь что он работает? Ведь, если бы ты свою базу данных не перелопатил, то сравнение бы не произошло База данных - это наборы пар Поиск-Замена. Так понятно? Ничего я не перелопачивал! База осталась в нетронутом состоянии! Просто был выложен код в надежде, что есть иной способ его исполнения. Вот SOFT FOR YOU и предложил читать сразу в RawString вместо Массива. Его вариант с учетом моей поправки - работает, как и правильно работает мой предыдущий! Все! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:30 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Я ему уже сто раз напрямую сказал - выложить исходный файл. А он всё кодами размахивается, как будто в них счастье и ключ ко всему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:30 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUBellic, Выложи отдельный проект с исходным файлом и двумя кнопками Извини, друг!!! А не ах..л ли ты? я только что выложил два кода! ... И вообще - так не честно - ты выкладываешь свой код, даже не удосужившись проверить его правильность, а я тебе должен из Двух уже опубликованных только что - собирать с двумя кнопками???? Копипасть... Мне пора собираться выезжать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicЗапускай и сравнивай сам... ты в основном сравниваешь вывод строк в мемо выкинь мемо сделай цикл хотя бы пару миллионов и сравнивай и увидишь твой код хуже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикЯ ему уже сто раз напрямую сказал - выложить исходный файл. А он всё кодами размахивается, как будто в них счастье и ключ ко всемуНяшик, ты что - слепой??? 21131122 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:36 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear PenguinBellicЗапускай и сравнивай сам... ты в основном сравниваешь вывод строк в мемо выкинь мемо сделай цикл хотя бы пару миллионов и сравнивай и увидишь твой код хуже... Мы говорим о сравнении, а не вообще о времени выполнения! Мемо в обоих случаях теоретически выполняется за одно и то же время и присутствует в обоих кодах! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:39 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
=_= Ребята ??? Ему сказать, что в данных примерах он сравнивает скорость вывода в memo ? Ой.. Похоже уже сказал - как не ловко... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:42 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
...приеду вечером, удалю Мемо и запущу на паре миллионов! А вообще - мне это в общем то не важно, не меряемся мы силой алго, а просто хотяб примерно сравнили два варианта! В итоге - они практически равнозначные оказались... Но Пяток миллионов я всеж заФигачу вечерком!...))))))))))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:42 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
BellicМы говорим о сравнении, а не вообще о времени выполнения! Мемо в обоих случаях теоретически выполняется за одно и то же время и присутствует в обоих кодах! Неверно! Никогда такого не будет. Запусти свой код, без вывода всех memo и увидишь "Время выполнения=0 сек." Я даже не запуская могу сказать это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик=_= Ребята ??? Ему сказать, что в данных примерах он сравнивает скорость вывода в memo ? Ой.. Похоже уже сказал - как не ловко...Няшик, и Две кнопки для SOFT FOR YOU - тоже сделаю, по просьбе трудящихся (если до этого сами их не "нарисуете")...))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:45 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, авторНеверно! Никогда такого не будет. Запусти свой код, без вывода всех memo и увидишь "Время выполнения=0 сек."я такое уже видел сегодня! Мой код в цикле на 2 итерации выдал 0 секунд, а SOFT FOR YOU - ноль с копеками! Пришлось увеличить число итераций до 1000! Все парни, опаздываю.. пардон! До вечера! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:47 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Я сделал адекватный тестер Без включённой оптимизации Nyashik: 1,514717 SOFTFORYOU: 1,541704 Bellic: 10,928764 С включённой оптимизацией Nyashik: 0,743173 SOFTFORYOU: 0,766512 Bellic: 10,819108 Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:07 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик. А не замахнуться ли тебе на собственную версию Кэшед Буфферз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:09 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
чччДНяшик. А не замахнуться ли тебе на собственную версию Кэшед Буфферз? Я для себя уже сделал такое. Работает так - выделяю 16 байт, заканчивается - выделяю ещё раз. И работаю с этими данными с помощью SSE инструкций Кстати, Delphi сам умеет хорошо выделять память (с помощью SysGetMem) по 16 границе, при включённой опции mba16Byte Слепил за пару часиков, и рад, что без мучений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:18 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, для начала - перемести обьявления переменных во всех трех процедурах - вверх, в начало юнита! И кода будет поменьше и думаю подготовка к циклу - это не существенно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:25 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, В моём примере всё сделано идеально. Мы тестируем только алгоритм. А не засранный не понять чем код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:50 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикВ моём примере всё сделано идеально. Мы тестируем только алгоритм. А не засранный не понять чем код. Няшик, ты читать умеешь? Прочти еще раз сообщение 21131776 На алгоритм никто не покушается... пока.. и про код там ни слова! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:13 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Спасибо за тест А то я и сам грешным делом подумал, что там могло сработать медленно Кстати Раз уж у тебя тест под рукой - можешь сделать вывод в TBytes, а не RawByteString. Он по идее ещё раза в полтора должен быстрее работать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:19 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Тут очень странный человек Тебя учат работать с хексом, показывают, как ускорить твой код. А ты говоришь, что я о...ел. Ну если не хочешь - я не стану помогать с твоим кодом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
И вот это по идее должно ускорить Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:26 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Без инлайна Nyashik: 0,719825 SOFTFORYOU: 0,724851 Bellic: 11,049624 С инлайном Nyashik: 0,842163 SOFTFORYOU: 0,896055 Bellic: 11,008099 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:46 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
StartCode: 0,655306 StartCodeTBytes: 0,434061 Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:57 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUТут очень странный человек Тебя учат работать с хексом, показывают, как ускорить твой код. А ты говоришь, что я о...ел. Ну если не хочешь - я не стану помогать с твоим кодом Извини, но у тебя очень странные манеры обучения! Причину моего возмущения - я тебе объяснил! Только не говори, что не понял ее! Если обидел своей несдержиннастью - не серчай, я и правда очень спешил тогда..(( SOFT FOR YOUРаз уж у тебя тест под рукой - можешь сделать вывод в TBytes, а не RawByteString. Он по идее ещё раза в полтора должен быстрее работать Если это касается моей темы "Поиска и замены.." - в этом цикле мы готовили один из параметров для процедуры Поиска и Замены, который Вы, SOFT FOR YOU, предложили сделать на RawByteString и Pos()... Тогда по идее нужно будет переделывать и ее на TBytes? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:57 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Ну как я и говорил ) Полтора раза )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 20:04 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Bellic, Ты же сам всё прекрасно знаешь Что я тебе буду объяснять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 20:05 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Отдыхая, проветривая мозг... Я начал обдумывать твою оптимизацию функции... Полез в asm и увидел, что можно сократить его на 1 лишнюю инструкцию Код: pascal 1. Но увы и ах... Мне не удалось сделать это из кода Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Результат выполнения StartCode: 0,639610 StartCodeTBytes: 0,414529 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 00:18 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Попробуй так (не проверял) function HexToByte(const Value: Cardinal): Cardinal; asm or eax, $20 lea ecx, [eax - $57] cmp eax, $39 lea eax, [eax - $30] cmova eax, ecx end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 00:48 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Стало гораздо лучше StartCode: 0,566828 StartCodeTBytes: 0,411922 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 01:32 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял, о чем идет речь, то можно попробовать по 2 байта за раз Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 15:58 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Мне кажется лучше так (но я не тестировал) Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 16:17 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
shr 6 наверно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 16:18 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, моя переставляет для little endian, если переставлять не надо, то наверно можно проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 16:23 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Да, ты прав. У тебя же ещё микс байт делается. Только Cardinal лучше на Integer заменить - там нет ограничения на регистры. Кстати изложи логику расстановки констант. Ребятам, да и мне тоже, будет познавательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 16:37 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Логика прозрачная. Финальный сдвиг на 24, чтобы не надо было в конце and-ить с $FF. $0F0F - очевидное выделение младших ниблов для цифр и букв. В константе $10010000 старшая единица ставит на место биты 0..3, младшая - биты 8..11, т.е. переставили. Замечаем, что при этом буковки дают результат на 9 меньше положенного. Недостающую 9 формируем аналогично из битов $4040, которые не присутствуют в цифрах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 17:37 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Не одна из функций, не работает правильно... У Aleksandr Sharahov функция не работает как надо. SOFT FOR YOU Asm: 0,414427 SOFT FOR YOU Code: 0,455227 MyAsm: 0,398304 Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Я вздёрнул всех Код: pascal 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. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 17:45 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикНе одна из функций, не работает правильно... Эта фраза не сюда относилась. Перепутал форумы. И пока делал тесты, не заметил что это сюда написал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 17:46 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикУ Aleksandr Sharahov функция не работает как надо. Возможно, я не понимаю, как надо. Поясни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 18:02 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Я просто глянул на результаты, и увидел что они отличаются от того, что было. А потом глянул, что генерируется у SOFT FOR YOU и переделал под ASM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 18:21 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Няшик, Александр (и я неудачно попытался повторить) реализовал чтение не одного, а сразу двух байт. А в твоём тесте его функция вызывается дважды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 18:48 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
НяшикЯ вздёрнул всех смотри, а то пропишут на пмж в баллистическую ракету ( http://smartfiction.ru/prose/sens_of_power/ ) зы. Прeдлагаю затестить табличку в 64KB ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 18:56 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kep-ko, Давно пора :) Но мы оптимизируем чтение хексового буфера ТС с массивом замен А на самом деле надо оптимизировать поиск и замену :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 19:04 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUна самом деле надо оптимизировать поиск и заменуопять-таки 'табличка' по первому байту(символу) искомых строк :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 20:08 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
kep-ko, Ога Ахо-Корасик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 20:10 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovВ константе $10010000 старшая единица ставит на место биты 0..3, младшая - биты 8..11, т.е. переставили. Логически я это понимаю. Не могу самостоятельно в случае чего просчитать такую константу. Вот есть число 00000X0Y Необходимо получить YX~~~~~~ Соответственно Y нужно поместить на место 28 бита, X нужно поместить на 24 бит. Соответственно для Y у меня выходит константа $0001 shl 28 А для X я подставляю $0100 shl (24 - 8). И это не правильно. Расскажи, какой логикой руководствуешься, определяя константу. Туплю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 23:13 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr SharahovВ константе $10010000 старшая единица ставит на место биты 0..3, младшая - биты 8..11, т.е. переставили. Логически я это понимаю. Не могу самостоятельно в случае чего просчитать такую константу. Вот есть число 00000X0Y Необходимо получить YX~~~~~~ Соответственно Y нужно поместить на место 28 бита, X нужно поместить на 24 бит. Соответственно для Y у меня выходит константа $0001 shl 28 А для X я подставляю $0100 shl (24 - 8). И это не правильно. Расскажи, какой логикой руководствуешься, определяя константу. Туплю :) Важно не на какое место поставить, а на сколько битов сдвинуть с прежнего места. И если надо сдвинуть и на A и на B битов, то просто OR-им биты A и B и получаем константу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 00:00 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Оки А как просчитать, не затрут ли биты друг друга Ну вот пример Есть число 000А0БВГ Каждая «буква» это 4 бита. Допустим, я хочу взять от каждой буквы по 3 бита и занять верхние 12 бит. По изложенному принципу я сформирую константу. Как я могу однозначно определить, глядя на константу, что написанная мной операция работает для любых АБВГ? И ещё момент. Насколько я понял, принцип предполагает расположение элементов в обратном порядке? Т.е. сохранить порядок элементов не удастся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 01:07 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, Оки А как просчитать, не затрут ли биты друг друга Ну вот пример Есть число 000А0БВГ Каждая «буква» это 4 бита. Допустим, я хочу взять от каждой буквы по 3 бита и занять верхние 12 бит. По изложенному принципу я сформирую константу. Как я могу однозначно определить, глядя на константу, что написанная мной операция работает для любых АБВГ? Тупо считаем, как описано. Берем худший случай - все 1. Проверяем наложение. Если оно есть, начинаем дополнительно изворачиваться при помощи масок, чтобы сделать по частям. SOFT FOR YOUИ ещё момент. Насколько я понял, принцип предполагает расположение элементов в обратном порядке? Т.е. сохранить порядок элементов не удастся. Если внимательно посмотришь на произведение, в нем всегда есть все возможные порядки. А порядок расположения и наличие битов в нужном месте определяется коэффициентом (т.е. заданными тобой сдвигами). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 09:42 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 09:48 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Спасибо тебе за познавательную лекцию Кстати я так и не разобрался, как расчитывать константу и сдвиг для целочисленного деления. Причём там целая кипа особенностей: * если Cardinal делится на Cardinal - там один код * причём результат может не убраться в нижние 32 бита - тогда приходится делать умножение в Int64 - и смотреть старшие 32 бита * если Integer делится на Cardinal - то там используется корректировка в зависимости от знака * если Integer делится на отрицательное - я не знаю, можно ли обойтись без операции neg * не всегда понятно, удастся ли обойтись imul или нужен mul Сейчас я обхожусь полным перебором, нахожу подходящие константы. Например, если X в диапазоне 0..9999, то его деление на 100 у меня выглядит так: (X * $147B) shr 19 Но всё это не серьезно. Хочется иметь динамическое решение. Так что если напишешь толковую статью по сему поводу - цены тебе не будет :) Кстати через FPU тоже вариант, но выполняется дольше, и вопросы по точности. Поэтому если есть возможность решать через целочисленные регистры - я стараюсь делать через них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 15:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 17:06 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, о много нам открытий чудных готовит просвещенья дух Александру спасибо. Твои алгоритмы всегда были лучшими :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 17:31 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUполным перебором, нахожу подходящие константы ...а это уже полный перебор! Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 21:40 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovSOFT FOR YOU, а это читал? http://guildalfa.ru/alsha/node/34 Видимо оно Почитаю на досуге :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 21:56 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Статья конечно хорошая, но считаю её как минимум не полной. Вот к примеру Си-шный дизасм деления на 10: Код: sql 1. 2. 3. 4. 5. Конечно, можно сказать, что здесь двойная длинна, которую на чистом Delphi без ущерба производительности реализовать не удастся. Но во-первых, сейчас активно используют x64 и подобную манипуляцию совершат в два счёта. Во-вторых, при ограниченном диапазоне делимого - вполне можно реализовать деление через обычный imul и сдвиг, что я продемонстрировал на примере ранее. Немаловажно то, что делимое может и скорее всего будет со знаком. В этом случае логика сильно меняется, и заслуживает детального рассмотрения. Опять таки при ограниченном делимом наверняка можно делать "короткое" умножение. Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 22:46 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, Статья конечно хорошая, но считаю её как минимум не полной. Вот к примеру Си-шный дизасм деления на 10: Код: sql 1. 2. 3. 4. 5. Конечно, можно сказать, что здесь двойная длинна, которую на чистом Delphi без ущерба производительности реализовать не удастся. Но во-первых, сейчас активно используют x64 и подобную манипуляцию совершат в два счёта. Во-вторых, при ограниченном диапазоне делимого - вполне можно реализовать деление через обычный imul и сдвиг, что я продемонстрировал на примере ранее. Немаловажно то, что делимое может и скорее всего будет со знаком. В этом случае логика сильно меняется, и заслуживает детального рассмотрения. Опять таки при ограниченном делимом наверняка можно делать "короткое" умножение. Код: sql 1. 2. 3. 4. 5. 6. 7. Во-первых, эти алгоритмы не вместо, а кроме. Во-вторых, у меня нет ограничения диапазона - перечитай, если не уловил это. В-третьих, и как ты тогда на x64 тогда будешь делить 64-битные? Там двойная длина 128 бит. Знак - это как раз хорошо, ты снова не въехал. Это свободный лишний бит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 22:56 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Я не хотел унизить или оскорбить. Я указал на то, что статью имеет смысл доработать, раскрыв вопрос в полной мере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 23:22 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, Я не хотел унизить или оскорбить. Я указал на то, что статью имеет смысл доработать, раскрыв вопрос в полной мере. Ну, ты же не понял самой сути. Предлагается ОРИГИНАЛЬНЫЙ, СОВЕРШЕННО НОВЫЙ, РАНЕЕ НИГДЕ НЕ ОПИСАННЫЙ АЛГОРИТМ. Так понятнее? Нафига описание нового алгоритма превращать в обзор существующих? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 23:28 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Я понимаю, что ты хочешь явить миру изобретение. Но практический смысл его только в том случае, если человек не умеет сделать дизасм си-кода (я его кстати делал онлайн), реализовать обратное умножение через FPU, или подобрать константы перебором для своего диапазона чисел. Как минимум в двух случаях из трёх код выполнится быстрее. Согласен, у тебя универсальный способ, и с ассемблером, тем боле ARM, мучиться не нужно. Но если цель не только попиариться, а ещё и раскрыть тему деления, то без описанных мной выше нюансов - статью считаю не полной. Алгоритм в литературе раскрыт слабо или практически не раскрыт. У одного чувака псевдокод касался только Cardinal/Cardinal и вроде бы не работал, точно не помню. У второго только Integer/Integer, с сопутствующими ограничениями. Во всяком случае диапазон значений делимого не учитывался нигде, поэтому короткий вариант операции не был рассмотрен нигде. Может быть ты сталкивался с другой литературой. Но тем и хороши твои статьи, что написаны для людей. С примерами и рассуждениями. По крайней мере на то претендуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 23:52 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUМожет быть ты сталкивался с другой литературой. Довольно подробно известный алгоритм с двойной шириной описан и у Фога, и Уоррена (+ на сайте Уоррена есть дополнения). Для того чтобы понять идею и, используя шаблоны, написать деление самому без дизасма и перебора вполне достаточно. Останется только прогнать полную проверку написанного, ну, уж без этого никуда. Описывать то, что всем и так давно известно, в сотый раз совершенно не за чем. Все равно, чтоб получилось подробнее чем у Уоррена ни сил, ни умения, ни терпения не хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 00:11 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЯ понимаю, что ты хочешь явить миру изобретение. Но практический смысл его только в том случае, если человек не умеет сделать дизасм си-кода (я его кстати делал онлайн), реализовать обратное умножение через FPU, или подобрать константы перебором для своего диапазона чисел. Как минимум в двух случаях из трёх код выполнится быстрее. Добавь сюда ИМХО, и я забуду этот бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 00:20 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, В смысле бред? Твоё деление на 10 выполняется дольше на 1 сдвиг, вычитание и операцию чтения из памяти, чем в сишном дизасме Моё (на диапазоне) деление на 100 делается вообще в две операции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 00:35 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUAleksandr Sharahov, В смысле бред? Твоё деление на 10 выполняется дольше на 1 сдвиг, вычитание и операцию чтения из памяти, чем в сишном дизасме Моё (на диапазоне) деление на 100 делается вообще в две операции Бред в том, что ты говоришь "Мне никогда не понадобится велосипед, я воспользуюсь автомобилем", как будто у тебя всегда под рукой есть автомобиль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 00:43 |
|
||
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Та никто не говорит, что твой алгоритм никогда не понадобится Собственно и статьи твои обычно описывают то, что ранее кем-то было описано Я смотрю с практической точки зрения. Ранее ты разжёвывал и более хорошо описанные подходы. Сейчас деление NativeInt/UInt наиболее оптимально подсматривается в си-выхлопе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 01:26 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041298]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
189ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 629ms |

| 0 / 0 |
