<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wojciech Jamrozy blog &#187; algorithm</title>
	<atom:link href="http://www.wojtekrj.net/tag/algorithm/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wojtekrj.net</link>
	<description>Blog about computer science, programming and linux</description>
	<lastBuildDate>Sun, 23 Oct 2011 21:57:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>[Scheme] Scheme &#8211; examples &#8211; 3 sorting algorithms + depth of tree</title>
		<link>http://www.wojtekrj.net/2009/04/scheme-scheme-examples-3-sorting-algorithms-depth-of-tree/</link>
		<comments>http://www.wojtekrj.net/2009/04/scheme-scheme-examples-3-sorting-algorithms-depth-of-tree/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 18:15:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Scheme]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[sorting]]></category>

		<guid isPermaLink="false">http://www.wojtekrj.net/?p=185</guid>
		<description><![CDATA[Here are my 3 basic sorting algorithms written in Scheme: insertion sort: &#40;define &#40;part x y&#41; &#40;if &#40;eqv? &#40;car x&#41; y&#41; &#40;cdr x&#41; &#40;cons &#40;car x&#41; &#40;part &#40;cdr x&#41; y&#41;&#41; &#41; &#41; &#160; &#40;define &#40;sort2 x&#41; &#40;if &#40;null? x&#41; x &#40;cons &#40;apply min x&#41; &#40;sort2 &#40;part x &#40;apply min x&#41;&#41;&#41;&#41; &#41; &#41; &#160; &#40;sort2 '&#40;4 [...]]]></description>
			<content:encoded><![CDATA[<p>Here are my 3 basic sorting algorithms written in Scheme:<span id="more-185"></span></p>
<ul>
<li> insertion sort:

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>part x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eqv?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> y<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>part <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sort2 x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> x<span style="color: #66cc66;">&#41;</span>
      x
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>apply <span style="color: #b1b100;">min</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>sort2 <span style="color: #66cc66;">&#40;</span>part x <span style="color: #66cc66;">&#40;</span>apply <span style="color: #b1b100;">min</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>sort2 '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>&gt; &gt; (-4 0 1 2 3 4 5 5)</li>
<li>merge sort:

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>part x a b <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> x<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> a b<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #b1b100;">f</span>
          <span style="color: #66cc66;">&#40;</span>part <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span>  a<span style="color: #66cc66;">&#41;</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>part <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#41;</span>   <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>merge a b x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> b<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> a<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span>merge <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> a<span style="color: #66cc66;">&#41;</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> a<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span>merge a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> b<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sortm x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      x
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let*</span> <span style="color: #66cc66;">&#40;</span>
            	<span style="color: #66cc66;">&#40;</span>par <span style="color: #66cc66;">&#40;</span>part x '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> #t<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            	<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">l</span> <span style="color: #66cc66;">&#40;</span>sortm <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> par<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       	  	<span style="color: #66cc66;">&#40;</span>r <span style="color: #66cc66;">&#40;</span>sortm <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> par<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> <span style="color: #66cc66;">&#40;</span>merge <span style="color: #b1b100;">l</span> r '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>sortm '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">2342</span> <span style="color: #cc66cc;">56421</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">213</span> <span style="color: #cc66cc;">52</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">5451</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">111</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>>>(-111 -5 -4 -1 1 1 2 2 4 52 213 2342 5451 56421)</li>
<li>Quicksort

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>part x a b <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> x<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> a b<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>part <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span>  a<span style="color: #66cc66;">&#41;</span> b <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>part <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#41;</span>  <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>qsort x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> x<span style="color: #66cc66;">&#41;</span>
       x
       <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
           x
           <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let*</span> <span style="color: #66cc66;">&#40;</span>
                  <span style="color: #66cc66;">&#40;</span>par <span style="color: #66cc66;">&#40;</span>part <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">l</span> <span style="color: #66cc66;">&#40;</span>qsort <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> par<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span>r <span style="color: #66cc66;">&#40;</span>qsort <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> par<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> <span style="color: #b1b100;">l</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> r<span style="color: #66cc66;">&#41;</span>
           <span style="color: #66cc66;">&#41;</span>
       <span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>qsort '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">54</span> <span style="color: #cc66cc;">4562</span> <span style="color: #cc66cc;">243</span> <span style="color: #cc66cc;">26345</span> <span style="color: #cc66cc;">123</span> <span style="color: #cc66cc;">53</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">234</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">9</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>&gt; &gt; (-234 -6 -5 -5 -4 -2 0 1 4 5 5 9 53 54 123 243 4562 26345)
</li>
</ul>
<p>And here is an example of computing depth of tree:</p>
<ul>
<li>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span>
  <span style="color: #66cc66;">&#40;</span>depth x<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">or</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
            <span style="color: #cc66cc;">0</span>
            <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">max</span>
                 <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span>depth <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
                 <span style="color: #66cc66;">&#40;</span>depth <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>depth '<span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">6</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">7</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>depth '<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>depth '<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>&gt; &gt; 5<br />
&gt; 1<br />
&gt; 4</li>
</ul>
<p>I&#8217;ve used <a target="_blank" href="http://www.plt-scheme.org/software/mzscheme/">http://www.plt-scheme.org/software/mzscheme/</a></p>
<p><a class="a2a_button_wykop" href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Wykop" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Digg" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a><a class="a2a_button_msdn" href="http://www.addtoany.com/add_to/msdn?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="MSDN" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/msdn.png" width="16" height="16" alt="MSDN"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_technotizie" href="http://www.addtoany.com/add_to/technotizie?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="Technotizie" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technotizie.png" width="16" height="16" alt="Technotizie"/></a><a class="a2a_button_technet" href="http://www.addtoany.com/add_to/technet?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;linkname=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" title="TechNet" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technet.png" width="16" height="16" alt="TechNet"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.wojtekrj.net%2F2009%2F04%2Fscheme-scheme-examples-3-sorting-algorithms-depth-of-tree%2F&amp;title=%5BScheme%5D%20Scheme%20%26%238211%3B%20examples%20%26%238211%3B%203%20sorting%20algorithms%20%2B%20depth%20of%20tree" id="wpa2a_2">Share/Save</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.wojtekrj.net/2009/04/scheme-scheme-examples-3-sorting-algorithms-depth-of-tree/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[Python,Algorithms] Fast Modular exponentiation script</title>
		<link>http://www.wojtekrj.net/2008/09/pythonalgorithms-fast-modular-exponentiation-script/</link>
		<comments>http://www.wojtekrj.net/2008/09/pythonalgorithms-fast-modular-exponentiation-script/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 19:26:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[exponentiation]]></category>

		<guid isPermaLink="false">http://www.wojtekrj.net/?p=125</guid>
		<description><![CDATA[If we want to know the last ten digits of number an – we have to evaluate expression an mod 1010. Using brute force approach, we have to do O(n) ( If you don&#8217;t understand big „O” notation, visit: Big O notation &#8211; it&#8217;s VERY important) multiplications and modulo divisions. When n is greater than [...]]]></description>
			<content:encoded><![CDATA[<p>If we want to know the last ten digits of number <em>a<sup>n</sup></em> – we have to evaluate expression <em>a<sup>n</sup> mod 10<sup>10</sup></em>. Using brute force approach, we have to do<em> O(n) </em>( If you don&#8217;t understand big „O” notation, visit: <a href="http://en.wikipedia.org/wiki/Big_O_notation" target="_blank">Big O notation</a> &#8211; it&#8217;s VERY important) multiplications and modulo divisions. When<em> n</em> is greater than <em>10<sup>9</sup></em>, it will take a lot of time. Fortunately, we can use more „mathematical” approach, which has<em> O(log n) </em>complexity.<span id="more-125"></span><br />
Firstly, we have to notice, that:<br />
(1) a<sup>2c</sup> mod r =  (a<sup>c</sup>)<sup>2</sup> mod r<br />
(2) a<sup>2c+1</sup> mod r =  a*(a<sup>c</sup>)<sup>2</sup> mod r</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#! /usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># Author: Wojtek Jamrozy (www.wojtekrj.net)</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> modexp<span style="color: black;">&#40;</span>a, n, m<span style="color: black;">&#41;</span>:
	bits = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">while</span> n:
		bits.<span style="color: black;">append</span><span style="color: black;">&#40;</span>n<span style="color: #66cc66;">%</span>2<span style="color: black;">&#41;</span>
		n /= <span style="color: #ff4500;">2</span>
	solution = <span style="color: #ff4500;">1</span>
	bits.<span style="color: black;">reverse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> bits:
		solution = <span style="color: black;">&#40;</span>solution<span style="color: #66cc66;">*</span>solution<span style="color: black;">&#41;</span><span style="color: #66cc66;">%</span>m
		<span style="color: #ff7700;font-weight:bold;">if</span> x:
			solution = <span style="color: black;">&#40;</span>solution<span style="color: #66cc66;">*</span>a<span style="color: black;">&#41;</span><span style="color: #66cc66;">%</span>m
	<span style="color: #ff7700;font-weight:bold;">return</span> solution
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> modexp<span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">34</span>, <span style="color: #008000;">pow</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span>,<span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> modexp<span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>,<span style="color: #008000;">pow</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span>,<span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>, <span style="color: #008000;">pow</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span>,<span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>output:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000;">7179869184</span>
<span style="color: #000000;">1787109376</span></pre></div></div>

<p>Function <em>pow(a,b)</em> is Python&#8217;s function, which computes <em>a<sup>b</sup></em><br />
Function <em>modexp(a, n, m)</em> computes <em>a<sup>n</sup> mod m</em>. Here is example, which shows running of the function a=2, n=34, m=10<sup>10</sup><br />
Firstly, we want to have bits of binary notation of <em>n</em> in list <em>bits</em>.<br />
Before reversion,<em> bits </em>have following content: [0, 1, 0, 0, 0, 1] (2<sup>1</sup> + 2<sup>5</sup> = 33)<br />
After reversion of list: <em>bits</em>= [1, 0, 0, 0, 1, 0]<br />
Bits of binary notation of <em>n</em> are in order from &#8220;bigger&#8221; powers to &#8220;lower&#8221; ones.<br />
I will use (b) for binary notation of number: 33 = 100001(b)<br />
At the beggining, <em>solution</em> = 2<sup>0</sup> mod 10<sup>10</sup> = 1. Then, during execution of <em>for</em> loop,<em> solution </em>has following values: 2<sup>1(b)</sup> mod 10<sup>10</sup>, 2<sup>10(b)</sup> mod 10<sup>10</sup>, 2<sup>100(b)</sup> mod 10<sup>10</sup>, 2<sup>1000(b)</sup> mod 10<sup>10</sup>, 2<sup>10001(b)</sup> mod 10<sup>10</sup> and finally  2<sup>100010(b)</sup> mod 10<sup>10</sup>.<br />
Using (1) and (2) we can calcualte every <em>solution&#8217;s</em> value if we know previous one.<br />
Loop <em>for</em> is executed for each element of <em>bits</em>. <em>Bits</em> size is <em>log<sub>2</sub>n</em>, so the complexity of whole alghorithm is <em>O(log n)</em></p>
<p>You can download code here:<br />
Note: There is a file embedded within this post, please visit this post to download the file.</p>
<p><a class="a2a_button_wykop" href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Wykop" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Digg" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a><a class="a2a_button_msdn" href="http://www.addtoany.com/add_to/msdn?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="MSDN" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/msdn.png" width="16" height="16" alt="MSDN"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_technotizie" href="http://www.addtoany.com/add_to/technotizie?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="Technotizie" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technotizie.png" width="16" height="16" alt="Technotizie"/></a><a class="a2a_button_technet" href="http://www.addtoany.com/add_to/technet?linkurl=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;linkname=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" title="TechNet" rel="nofollow" target="_blank"><img src="http://www.wojtekrj.net/wp-content/plugins/add-to-any/icons/technet.png" width="16" height="16" alt="TechNet"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.wojtekrj.net%2F2008%2F09%2Fpythonalgorithms-fast-modular-exponentiation-script%2F&amp;title=%5BPython%2CAlgorithms%5D%20Fast%20Modular%20exponentiation%20script" id="wpa2a_4">Share/Save</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.wojtekrj.net/2008/09/pythonalgorithms-fast-modular-exponentiation-script/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

