|
|
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
Поставлена задача: 1) Таблица FILEA.DBF записей 3000000 2) Таблица FILEB.DBF записей 4000000 3) За минимально короткое время (примерно за 1 час работы программы) вывести записи повторяющиеся в FILEB.DBF более 1 раза. На VFP vers 8 сейчас могу это сделать за 7 часов. Долго! Может быть кто подскажет быстроходный алгоритм ? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 13:57 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
ALEXPFRПоставлена задача: 1) Таблица FILEA.DBF записей 3000000 2) Таблица FILEB.DBF записей 4000000 3) За минимально короткое время (примерно за 1 час работы программы) вывести записи повторяющиеся в FILEB.DBF более 1 раза. На VFP vers 8 сейчас могу это сделать за 7 часов. Долго! Может быть кто подскажет быстроходный алгоритм ? Заранее спасибо. Э-э-э, уточняющие вопросы 1. Эти таблички имеют первичные ключи и если ДА, то является ли их совпадение совпадением и в данных. 2. Надо ли сравнивать значения полей для таблички fileb со значениями полей в табличке filea и все ли поля необходимо сравнивать или надо найти дубли только во второй табличке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 14:12 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
Ключей нетю Голые таблицы. Сравнить только одно поле в каждой табл. - NOM [ numeric, 9] Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 14:18 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
ALEXPFR... вывести записи повторяющиеся в FILEB.DBF более 1 раза...А причем тут FILEA.DBF ? Уточни постановку задачи ALEXPFRКлючей нетю Голые таблицы. Сравнить только одно поле в каждой табл. - NOM [ numeric, 9] Спасибо А индекс по NOM есть? если нет, то возможно открыть монопольно и проиндексировать? При наличии индексов отловить можно в один проход, по времени думаю уложится в несколько минут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 15:03 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
ALEXPFRПоставлена задача: 1) Таблица FILEA.DBF записей 3000000 2) Таблица FILEB.DBF записей 4000000 3) За минимально короткое время (примерно за 1 час работы программы) вывести записи повторяющиеся в FILEB.DBF более 1 раза. На VFP vers 8 сейчас могу это сделать за 7 часов. Долго! Может быть кто подскажет быстроходный алгоритм ? Заранее спасибо. Либо нужно уточнение задачи, либо первая табличка не нужна, либо задача формулируется так: вывести из таблицы B те записи которые есть в таблице А, но повторяющиеся в таблице B более одного раза. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 15:08 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
Спасибо всем. Дотумкал. Работает 27 минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 15:22 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
ALEXPFRСпасибо всем. Дотумкал. Работает 27 минут. Вы считаете, что 27 мин - удовлетворительный результат? Наверное, надо ещё ПоДотумкать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 15:35 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
PaulWist ALEXPFRСпасибо всем. Дотумкал. Работает 27 минут. Вы считаете, что 27 мин - удовлетворительный результат? Наверное, надо ещё ПоДотумкать. Думаю идеальное время работы измеряется так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 16:10 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
Dima TДумаю идеальное время работы измеряется так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Скорее не идеальое а максимально возможное, Вы показали простой перебор, на самом деле Rushmore использует численные алгоритмы поиска, если принять в простом случае метод дихотомии, то поиск из 400000 записей займет 19 шагов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 16:33 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
PaulWistСкорее не идеальое а максимально возможное, Вы показали простой перебор, на самом деле Rushmore использует численные алгоритмы поиска, если принять в простом случае метод дихотомии, то поиск из 400000 записей займет 19 шагов. То что ты написал - это работа команды SEEK по индексу, а в данном случае надо найти все повторения, а не конкретное значение ключа. Индекс хранит только порядок сортировки, поэтому поиск повторений делается полным перебором таблицы. Максимально эффективный алгоритм можно построить только перебором. В данном случае надо просто идти в цикле по двум таблицам одновременно, запоминая предыдущее значение ключа для выявления повторений. А то что я в примере показал два цикла, а не один - это для наглядности, на скорость это никак не повлияет, в реальном коде конструкция будет примерно такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 07:23 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
Dima Tв данном случае надо найти все повторения, а не конкретное значение ключа. Что бы не быть голословным, напиши тестовый пример на "найти все повторения". Dima TИндекс хранит только порядок сортировки, поэтому поиск повторений делается полным перебором таблицы Что-то это для меня новое, если не секрет то какой конкретно индекс реализует ТОЛЬКО такую технологию (а именно порядок сортировки). Dima Tпоэтому поиск повторений делается полным перебором таблицы Численные методы поиска как раз и позволяют избежать "тупого" перебора записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 12:49 |
|
||
|
Показать задвоенные записи. Срочно!
|
|||
|---|---|---|---|
|
#18+
PaulWist... Что бы не быть голословным, напиши тестовый пример на "найти все повторения". Вот пример (вместо NOM поле NSUM): Код: plaintext 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. Ожидал большего. Выигрыш времени 12%, а гемороя написания ... Да и читабельность кода никакая. Так что согласен, оно того не стоит. PaulWistЧто-то это для меня новое, если не секрет то какой конкретно индекс реализует ТОЛЬКО такую технологию (а именно порядок сортировки). Признаю, неправ, слишком сильно был в этом уверен, что внутрь файла не заглянул. Просто как-то хитро значения ключа храниться: таблица (справочник) 250000 записей, поле с неповторяющимися значениями с(100), индекс по этому полю 7,85 МБ, т.е. в среднем 31.4 байта на 1 запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 16:08 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34638683&tid=1589057]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 367ms |

| 0 / 0 |
