vimmax
							
								Модератор 
								Декан
								      
								
								Карма: +42/-3
								   Offline
								Пол:   Награды:  
								Сообщений: 1713
								
								 
								♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 «  : Февраль 15, 2007, 10:45:44  »  | 
								
								 | 
							  
							 
							Написать подпрограмму, вычисляющую количество единиц в бинарном представлении целого числа, например в числе 6 две единицы (6 = 0110bin), в числе 7 три единицы (7 = 0111bin).
  Условия: Реализацию этого алгоритма можно предложить на любом языке программирования. Мой  ответ на ANSI С.
  Будет защитан только самый быстрый алгоритм, т.е. подпрограмма должна быть оптимизирована по времени. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: Февраль 22, 2007, 08:34:02  от vimmax »
								 | 
								
									 
									Записан
								 | 
							  
							 
							♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫ 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							BODROV
							
								Mодератор 
								Доцент
								      
								
								Карма: +37/-1
								   Offline
								Пол:   
								Сообщений: 550
								
								 
								хде я?
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : Февраль 15, 2007, 03:14:31  »  | 
								
								 | 
							  
							 
							     mov bx, x      mov ax, 0      mov cx, 16 m: rcl bx, 1      adc ax, 0      loop m
  в результате в ax кол-во единиц. но что-то мне подсказыавет, что это не самый лучший вариат....  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							vimmax
							
								Модератор 
								Декан
								      
								
								Карма: +42/-3
								   Offline
								Пол:   Награды:  
								Сообщений: 1713
								
								 
								♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : Февраль 15, 2007, 04:12:13  »  | 
								
								 | 
							  
							 
							BODROV - Ответ #1 -  вау, скока программистов на асме нашлось!!!! Ответ хороший, но не самый быстрый. Фишка данной задачи в том, что ответ можно реализовать на любом языке программирования. Хотя ответ немного абсурдный.....но самый быстрый. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫ 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Archangel
							
								Профессор 
								    
								
								Карма: +17/-2
								   Offline
								Пол:   
								Сообщений: 999
								
								 
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : Февраль 16, 2007, 11:59:01  »  | 
								
								 | 
							  
							 
							Ставишь мультиплексоры, а после них счетчики:). Работать будет быстрее всего остального. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Птицей Гермеса меня называют. Крылья свои пожирая, сам я себя укрощаю. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							vimmax
							
								Модератор 
								Декан
								      
								
								Карма: +42/-3
								   Offline
								Пол:   Награды:  
								Сообщений: 1713
								
								 
								♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : Февраль 16, 2007, 01:42:07  »  | 
								
								 | 
							  
							 
							Archangel - Ответ #3 -  Может быть и быстрее, но сейчас тема "Искусство программирования", а не "Искусство схемотехники" ))) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫ 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							vimmax
							
								Модератор 
								Декан
								      
								
								Карма: +42/-3
								   Offline
								Пол:   Награды:  
								Сообщений: 1713
								
								 
								♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : Февраль 16, 2007, 05:10:44  »  | 
								
								 | 
							  
							 
							Такс,....ну что товарисчи ?? Даже никто и не пытается? В общем даю подсказку: Оптимизация программ обычно ведется в одном из двух направлений: 1.оптимизация по скорости с увеличением занимаемой памяти 2.оптимизация по занимаемой памяти в ущерб скорости.
  В данной задаче время выполнения алгоритма уменьшается за увеличения занимаемой памяти... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫ 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							BODROV
							
								Mодератор 
								Доцент
								      
								
								Карма: +37/-1
								   Offline
								Пол:   
								Сообщений: 550
								
								 
								хде я?
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : Февраль 16, 2007, 05:27:29  »  | 
								
								 | 
							  
							 
							создать массив скажем из 65535 элементов, где заведомо указать в i-том элементе количество единиц числа i      
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Sochin
							
								Злой модератор 
								Декан
								      
								
								Карма: +108/-6
								   Offline
								Пол:   
								Сообщений: 1518
								
								 
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : Февраль 16, 2007, 05:37:00  »  | 
								
								 | 
							  
							 
							создать массив скажем из 65535 элементов, где заведомо указать в i-том элементе количество единиц числа i     А для оптимизации по времени поиска элемента использовать хеш-таблицу или двоичное дерево.    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							vimmax
							
								Модератор 
								Декан
								      
								
								Карма: +42/-3
								   Offline
								Пол:   Награды:  
								Сообщений: 1713
								
								 
								♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : Февраль 16, 2007, 05:46:51  »  | 
								
								 | 
							  
							 
							BODROV, Sochin - Все бы хорошо, но приведите пример кода, можно без компиляции и без лишних элементов. Хоть пару строк.... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫ 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							BODROV
							
								Mодератор 
								Доцент
								      
								
								Карма: +37/-1
								   Offline
								Пол:   
								Сообщений: 550
								
								 
								хде я?
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : Февраль 16, 2007, 06:00:09  »  | 
								
								 | 
							  
							 
							const   a: array [0..65535] of integer = (0,1,1,2,1,2,2,3,1,2 ...и так далее... 16); var   z: word; begin   readln(z);   writeln('код-во единиц: ', a[z]); end.
    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							vimmax
							
								Модератор 
								Декан
								      
								
								Карма: +42/-3
								   Offline
								Пол:   Награды:  
								Сообщений: 1713
								
								 
								♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : Февраль 16, 2007, 06:07:00  »  | 
								
								 | 
							  
							 
							BODROV - Ответ#9 -  Правильный ответ, самый быстрый. Скорость в ущерб памяти       +1. Sochin - Ответ #7 -  интересно было-бы посмотреть реализацию с хеш-таблицами и бинарным деревом.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫ 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							BODROV
							
								Mодератор 
								Доцент
								      
								
								Карма: +37/-1
								   Offline
								Пол:   
								Сообщений: 550
								
								 
								хде я?
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : Февраль 16, 2007, 06:11:30  »  | 
								
								 | 
							  
							 
							BODROV - Ответ#9 -  Правильный ответ, самый быстрый. Скорость в ущерб памяти       +1.    супер!!! в ущерб не только памяти, но психичекого состояния программера... я б после заполнения матрицы а точно двинулся бы   вообже такой вариант еще вчера появлялся, но я его отбросил, как ответ абсурдней абсурдного     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Sochin
							
								Злой модератор 
								Декан
								      
								
								Карма: +108/-6
								   Offline
								Пол:   
								Сообщений: 1518
								
								 
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : Февраль 17, 2007, 03:58:40  »  | 
								
								 | 
							  
							 
							Sochin - Ответ #7 -  интересно было-бы посмотреть реализацию с хеш-таблицами и бинарным деревом.
  Вот так с помощью хэша можно искать для целых или скажем для строк(C#):     public class BitCounter     {         static BitCounter()         {             hash.Add(0, 0);             hash.Add(1, 1);             hash.Add(2, 1);             hash.Add(3, 2);             ...             hash.Add(65535, 16);             hash.Add("0", 0);             hash.Add("1", 1);             hash.Add("2", 1);             hash.Add("3", 2);             ...             hash.Add("65535", 16);         }
          static Hashtable hash = new Hashtable();
          public static int Count(object x)         {             if (hash.Contains(x)) return (int) hash[x];             return 0;         }     }
      class Program     {         static void Main(string[] args)         {             Console.WriteLine("Кол-во единиц: {0:D}", BitCounter.Count(3));             Console.WriteLine("Кол-во единиц: {0:D}", BitCounter.Count("3"));             Console.ReadLine();         }     } Кстати насчет абсурдности идеи как таковой, индексы в СУБД MS SQL Server предназначены для ускорения поиска и представляют собой ничто иное как сбалансированные деревья.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							mars
							
								Магистр 
								   
								
								Карма: +10/-0
								   OfflineНаграды:  
								Сообщений: 221
								
								 
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : Февраль 27, 2007, 12:56:33  »  | 
								
								 | 
							  
							 
							Ставишь мультиплексоры, а после них счетчики:). Работать будет быстрее всего остального.
  Очень хотелось бы схемку с мультиплексором увидеть .... хе-хе  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мне говорили: «Ты злой», и я соглашался. Мне говорили: «Ты не злой», и я не находил возражений. Сам-то я не хотел ни добра, ни зла и даже не думал об этом. Я просто шел своим Путем, а люди потом подбирали названия для моих поступков. М.Симонс 
						 | 
					 
				 
			 |  
		 
	 | 
	 |