Обновить
12
Виктор Павлович Гришко@Yeah

Пользователь

16
Подписчики
Отправить сообщение
Хм, может, я редко смотрю телевизор, но мне не показалось, что ТВ рекламы стало меньше…
Кстати, хотелось бы выступить в защиту Фортрана!
На той странице — это единственная нерекурсивная реализация алгоритма. Отсюда и сложность!
Абсолютно согласен! Но вы же должны понимать, что все, что представляется в данном топике имеет чисто спортивный интерес.
Кстати, если переписать на PHP 5.3 (с замыканиями), то думаю график еще уменьшился бы.
Переделал реализацию заново, с минимальным использованием функций PHP.
Заранее предупреждаю: это чисто спортивный интерес, реализовывать quicksort на PHP (да еще и так!) не нужно!
Получилась вообще какая-то вакханалия…
function q($s) {
	$l = count($s);
	$r = $s;
	if ($l != 0) {
		$x = $y = $r = array();
		$d = $f = 0;
		$k = $s[0];
		for($i=1; $i < $l; $i++) {
			if($s[$i] <= $k) {
				$x[] = $s[$i];
				$d++;
			} else {
				$y[] = $s[$i];
				$f++;
			}
		}
		$a = q($x);
		$b = q($y);
		for($i=0;$i<$d;$i++){
			$r[] = $a[$i];
		}
		$r[] = $k;
		for($i=0;$i<$f;$i++){
			$r[] = $b[$i];
		}
	}
	return $r;
}

Ну и результат:
image
Тогда у Haskell будет совершенно иной граф.
Вы-то строили при 2.
Вот я и пытаюсь выправить положение :)
Подсмотрел, что нахваливаемый всеми Haskell добивается такого графа за счет того, что программа уважаемого автора (точнее GraphViz) не учитывает в качестве слов последовательности меньшие по длине, чем 2 буквы. Соответственно, модифицировал исходник и получил вот что:
function q($s) {
	$f = array('count', 'array_shift', 'array_filter', 'create_function', 'array_diff', 'array_merge');
	$l = $f[0]($s);
	$r = $s;
	if ($l != 0) {
		$x = $y = $m = array();
		$k = $f[1]($s);
		$x = $f[2]($s, $f[3]('$s', 'return $s <= '.$k.';'));
		$y = $f[4]($s, $x);
		$m[] = $k;
		$r = $f[5](q($x), $m, q($y));
	}
	return $r;
}

Правда, получился уже какой-то ассемблер.
Вот результат:
image
Переработал исходник на PHP и получил вот это:
function mine_quicksort($seq) {
	$f = array('count', 'array_shift', 'array_filter', 'create_function', 'array_diff', 'array_merge', 'mine_quicksort');
	$l = $f[0]($seq);
	$r = $seq;
	if ($l != 0) {
		$x = $y = array();
		$k = $f[1]($seq);
		$x = $f[2]($seq, $f[3]('$s', 'return $s <= '.$k.';'));
		$y = $f[4]($seq, $x);
		$r = $f[5]($f[6]($x), array($k), $f[6]($y));
	}
	return $r;
}

Теперь граф выглядит так:
image
При этом погонял код в профайлере и выяснил, что мой код в 3 раза медленнее кода из теста автора и в 73(!!!) раза медленнее встроенной функции sort.
Модифицировал функцию для PHP, сделав ее более лаконичной:
function mine_quicksort($seq) {
	$length = count($seq);
	if ($length == 0) {
		return $seq;
	}
	$x = $y = array();
	$k = array_shift($seq);
	$x = array_filter($seq, create_function('$s', 'return $s <= '.$k.';'));
	$y = array_diff($seq, $x);
	return array_merge(mine_quicksort($x), array($k), mine_quicksort($y));
}

… что, однако, не повлияло, как мне показалось, на красивость графа:
image
Странно, что вы Perl упустили? довольно лаконично:
image
Угадал оба! Но скорее не в силу экстрасенсорных способностей, а потому что по невнимательности не заметил ассемблер и алгол :). Ну а с хаскеллом все ясно было с самого начала.
На мой взгляд это неправильно. Тут владельцы проекта должны решать, что им нужно индексировать, а что — нет. Лучше уж потратить часть времени на то, чтобы сделать выдачу части закрытого материала только для поисковых ботов, чем запросто отдать все логины и пароли неизвестно кому.
Интеграция в ZF Dojo мне непонятна… А мне, например ExtJS нравится, и что???
А вот интеграция SOAP (наконец-то!!!) — это очень большой плюс.
Кстати, есть еще одно добавление, которое не указано в списке:
В ZF 1.6.0 можно использовать UNION в Zend_Db_Select!
Например так:
$adapter = $this->getAdapter();
$criteria = $adapter->select()
	->from($adapter->select()->union(array(
		$adapter->select()
			->from($this->_name, array('user_id', 'x' => "('user_name')"))
			->where('user_name=:user_name')
			->limit(1),
		$adapter->select()
			->from($this->_name, array('user_id', 'x' => "('email')"))
			->where('email=:email')
			->limit(1)
	), Zend_Db_Select::SQL_UNION_ALL), array(
				'user_id' => 'GROUP_CONCAT(user_id)', 
				'x' => 'GROUP_CONCAT(x)')
			);
$duplicate = $adapter->fetchRow($criteria, array('user_name' => $user_name, 'email' => $email));
Что я хочу (в порядке приоритета):
1. Уважительное отношение к работникам — не только ко мне лично (никаких «эй, слыш, сгоняй за пивом» или «я не помню как тебя зовут, но у меня для тя проект есть»)…
2. Не следить за тем, что я делаю в тот или иной момент. Если я на удафф.коме, но при этом как-то укладываюсь в сроки, то просто радуйся.
3. Не лезть в мою работу, если не понимаешь. Не указывать мне как выполнять задание.
4. Не лезть ко мне с нравоучениями (об успешности, о том, как нужно работать, как классно живут в Европе, Америке и т.д.)
5. Очень желательно — компетентность руководства в своих обязанностях. Как показывает практика, обычно — это только мечты.

Что для меня необязательно (или даже нежелательно):
1. Нефиксированный рабочий день (я могу себя заставить встать рано утром, хотя и очень не хочется)
2. Бесплатная еда в офисе (это я вообще воспринимаю даже, как нежелательный момент. Некоторые работодатели думают, что если они купили в офис за свой счет пачку чая, то работники должны ползать перед ними на коленях)
п.6 и п.7 говворят о том, что пользователь сам несет ответственность за сохранность своих паролей, но ни слова нет о том, что Гугл не претендует на эти данные.
Ничего подобного. Прочитайте определение Content и Services. Services — это любой сайт, веб-сервис или приложение Гугла. То есть Chrome относится к Services. А по поводу Content не путайте п.8, который говорит о правах на контент третьей стороне, с п.11, который говорит о содержимом с вашими авторскими правами. В п.11 нигде не сказано, что это относится к сервисам третьей стороны.
Я не юрист, но слово «заключаемого» меня приводит в замешательство… Тут важен нюанс, является ли нажатие на кнопку «да, я согласен» заключением юридического соглашения.
А вы думали, что шара будет бесплатной?..
Не совсем. У меня стоит SpeedDial (а в Хроме есть аналогичный функционал) и при закрытии последней вкладки показывается домашняя, то есть speeddial.
А мне не нравится, что при закрытии вкладки (если она единственная) закрывается весь браузер.

Информация

В рейтинге
Не участвует
Откуда
Харьков, Харьковская обл., Украина
Дата рождения
Зарегистрирован
Активность