Показать сообщение отдельно
  #7 (permalink)  
Старый 25.09.2013, 17:46
Новичок на форуме
Отправить личное сообщение для Papazol Посмотреть профиль Найти все сообщения от Papazol
 
Регистрация: 24.09.2013
Сообщений: 4

Сообщение от vashurin Посмотреть сообщение
Для начала покажите весь код, а не кусок с if. Да и вообще интересно, в массиве точно цифры.
Получаю массив пар кодов примерно такой
(на самом деле их тысячи)
var source = 
[
[743,434],
[743,968],
[310,968],
[262,434],
[695,677],
[695,274],
[145,274],
[695,174],
[743,871],
[145,532],
[922,677],
[485,677],
[821,729],
[743,336],
[111,274],
[588,729],
[743,274],
[695,968],
[695,677],
[821,174],
[111,871],
[821,871],
[145,968],
[922,968],
[588,729],
[111,532]
]


Нужно подсчитать, какие пары встречаются часто, какие реже - частотность, короче. Ну я и считаю эту частотность (что получается), а потом пытаюсь ее сортировать (что не получается)

На самом деле в массиве могут быть некачественные данные,
поэтому я привожу их в int

function freqPairs( source )
{
	var pairs_matched = new Array();
	var pairsmatched_n=0;

	var pairs = new Array();
	var pairs_n=0;

	var tmp_pairs_freq = [-1,-1,-1];
	var tmp_pair = [-1,-1];

	// насильно конвертим source в десятичный инт
	for (var b=0; b < source.length; b++)
	{
		tmp_pair[0] = parseInt(source[b][0],10);
		tmp_pair[1] = parseInt(source[b][1],10);
		
		pairs_n = pairs.push( tmp_pair );
		
		tmp_pair = [-1,-1];
	 }
	
	// подсчитываем частотность пар
	var cnt2=0;
	var pair_flag=1;
	tmp_pairs_freq[0] = pairs[0][0];
	tmp_pairs_freq[1] = pairs[0][1];
	tmp_pairs_freq[2] = parseInt(1,10);
	pairsmatched_n = pairs_matched.push( tmp_pairs_freq );
	for (G=1; G < pairs.length; G++) 
	{
		tmp_pairs_freq = [-1,-1,-1];
		pair_flag=1;
		for (F=0; F < pairs_matched.length; F++) 
		{
			if ( pairs[G][0] === pairs_matched[F][0] )
			{
				if ( pairs[G][1] === pairs_matched[F][1] )
				{
					pair_flag=0;
					cnt2=pairs_matched[F][2];
					cnt2++;
					pairs_matched[F][2]=cnt2;
				 }
			 }
		}
		if ( pair_flag )
		{
			tmp_pairs_freq[0] = pairs[G][0];
			tmp_pairs_freq[1] = pairs[G][1];
			tmp_pairs_freq[2] = parseInt(1,10);
			pairsmatched_n = pairs_matched.push( tmp_pairs_freq );
		 }
	}	
	
	// сортируем пары по частотности
	var A = 0;
	var B = 0;
	var С = 0;
	var change_flag = 1;
	
	while ( change_flag > 0 )
	{
		A = pairs_matched[0][0];
		B = pairs_matched[0][1];
		С = pairs_matched[0][2];
		
		change_flag = 0;
		for (var S=0; S < pairs_matched.length-1; S++) 
		{
			A = pairs_matched[S][0];
			B = pairs_matched[S][1];
			C = pairs_matched[S][2];
			
                        //вот тут периодически не срабатывает			
                        if ( С < pairs_matched[S+1][2] )	
			{
				pairs_matched[S][0] = pairs_matched[S+1][0];
				pairs_matched[S][1] = pairs_matched[S+1][1];
				pairs_matched[S][2] = pairs_matched[S+1][2];
				
				pairs_matched[S+1][0] = A;
				pairs_matched[S+1][1] = B;
				pairs_matched[S+1][2] = C;
				
				change_flag = 1;
			}
		}
	}
}
Ответить с цитированием