|
|
|
Поиск последовательности в бинарном массиве
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39587856&tid=2041298]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
212ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 581ms |

| 0 / 0 |
