Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсчёт совпадений в массиве [D6, Win95/98]


Страницы:   1 2 3

AL2002 ©   (2002-08-08 16:21:00) 

Как поизящнее подсчитать, сколько раз повторяется значение Arr[0] в массиве Arr[1..99999] of String;


MBo   (2002-08-09 06:46:00) [1]

>AL2002
Нужно бы полностью поставить задачу. Вполне возможно, подойдут другие пути решения - например, добавление строк в сортированный список без повторов с отслеживанием количества каждого элемента.


TTCustomDelphiMaster   (2002-08-08 22:02:00) [2]

Если массив строк береться из БД тогда можно его сразу отсортировать по алфавиту, а потом ...


Jeer   (2002-08-08 21:14:00) [3]

Вот это
for i:= 1 to N do
if s[1] =lst[i][1] then
if s = lst[i] then Inc(cnt);
быстрее чем
for i:= 1 to N do
if s = lst[i] then Inc(cnt);

примерно в 2-3 раза, зависит от соотношений.


AL2002   (2002-08-08 19:00:00) [4]

Т.е. ага.


AL2002   (2002-08-08 18:59:00) [5]

Fuf.


MBo   (2002-08-08 18:40:00) [6]

если у тебя действительно десятки тысяч строк, то нужно использовать хэширование - вот это будет быстрее.


AL2002   (2002-08-08 18:35:00) [7]

>MBo
Кода много. А точно будет быстрее?


MBo   (2002-08-08 18:24:00) [8]

Кстати, при таком количестве надо подумать о хэшировании!


MBo   (2002-08-08 18:22:00) [9]

если все же когда-нибудь придет мысль использовать вместо массива список, то подойдет нечто подобное


for i:=0 to StringList.Count-1 do begin
k:=StringList.IndexOf(StringList[i]);
if (k<>i) and (k>=0) then begin
StringList.Objects[k]:=
Pointer(Integer(StringList.Objects[k])+1);
StringList.Objects[i]:=Pointer(1000000+k);
end else
StringList.Objects[i]:=Pointer(1);


теперь, если Integer(Objects[i])<1000000, то в нем содержится количество таких строк в списке, а если больше, то номер первого элемента(+1000000), в котором хранится их количество.


AL2002   (2002-08-08 18:04:00) [10]

>2002LA
Неправильно элементы подсчитал?

>Anatoly Podgoretsky
>изящный мой ответ или нет.
Да.


Skier   (2002-08-08 18:00:00) [11]

>Anatoly Podgoretsky
Правильный ответ всегда(!) изящнее неправильного...:)))


Anatoly Podgoretsky   (2002-08-08 17:57:00) [12]

Skier © (08.08.02 17:48)
Я тебея понимаж, но вопрос был поставлен одназначно, поэтому и ответ одназначный, единственно о чем стоит спорить изящный мой ответ или нет.


2002LA   (2002-08-08 17:56:00) [13]

Эк меня покорежило от ваших постов :^[


AL2002   (2002-08-08 17:54:00) [14]

Да мне и первого случая у Анаталолия с головой хватит.
Спасибо, Анатолий, Скаер, Джиэр, ЛеранДвеТыщиДва, Кул.

Ал2002, вы болван.


Skier   (2002-08-08 17:48:00) [15]

>Anatoly Podgoretsky
Да ! Для посчёта вхождения Arr[0] ты абсолютноправ !
(см. Skier © (08.08.02 17:24) ).
Но вот незадача - вдруг выясняется что автор хочет :

"Да. Нужно узнать количество повторений каждого элемента масства"

А это уже другой случай...


AL2002   (2002-08-08 17:47:00) [16]

Хотя бы один элемент (Arr[0]) в массиве Arr[1..99999] Of String.
Надо узнать, сколько раз он повторяется.

А если узавать все элементы из массива Арр, значит, надо создать ещё один массив и записывать в него количества совпадений для каждого элемента массива Арр.


Anatoly Podgoretsky   (2002-08-08 17:42:00) [17]

Skier © (08.08.02 16:53)
Count := 0;
for i := 1 to 99999 do if Arr[i] = Arr[0] then Count := Count + 1


Leran2002   (2002-08-08 17:39:00) [18]


> AL2002 © (08.08.02 17:33)

Дык, дык ничего не понял... В смысле скоко раз встречается каждая строка чоли???


Jeer   (2002-08-08 17:39:00) [19]

Есть массив A[N]
Делаем второй массив I[N]: integer;

for i:= 1 to N do
if s[1] =lst[i][1] then
if s = lst[i] then Inc(I[i]);



Jeer   (2002-08-08 17:37:00) [20]

>AL2002 © (08.08.02 16:21)
>Как поизящнее подсчитать, сколько раз повторяется значение Arr[0] в массиве Arr[1..99999] of String;

Вариант 2
Как поизящнее подсчитать, сколько раз повторяется значение Arr[i] в массиве Arr[1..99999] of String;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо