Conways_game_of_life_breeder_animation

排序演算法

認識排序

電腦科學數學中,一個排序演算法英語:Sorting algorithm)是一種能將一串資料依照特定排序方式進行排列的一種演算法。最常用到的排序方式是數值順序以及字典順序。有效的排序演算法在一些演算法(例如搜尋演算法合併演算法)中是重要的,如此這些演算法才能得到正確解答。排序演算法也用在處理文字資料以及產生人類可讀的輸出結果。基本上,排序演算法的輸出必須遵守下列兩個原則:

  1. 輸出結果為遞增序列(遞增是針對所需的排序順序而言)
  2. 輸出結果是原輸入的一種排列、或是重組

雖然排序演算法是一個簡單的問題,但是從電腦科學發展以來,在此問題上已經有大量的研究。舉例而言,氣泡排序在1956年就已經被研究。雖然大部分人認為這是一個已經被解決的問題,有用的新演算法仍在不斷的被發明。

氣泡排序

氣泡排序法(Bubble Sort)是最容易理解和實作的一種排序演算法,也翻譯作冒泡排序法。由於它很容易學習,所以也是許多演算法課程中第一個學習的排序演算法。

由於他的演算法過程會將最大的數值移動到陣列最後面,而較小的數值則逐漸的往陣列前端移動,就像有許多氣泡慢慢從底部浮出,因此成為氣泡排序法。他的運作流程如下:

  1. 比較相鄰的兩個元素,若前面的元素較大就進行交換。
  2. 重複進行1的動作直到最後面,最後一個元素將會是最大值。
  3. 重複進行1,2的動作,每次比較到上一輪的最後一個元素。
  4. 重複進行以上動作直到沒有元素需要比較。

實作上直接使用迭代法迴圈就可以很容易的完成。另外可以使用額外的旗標(Flag)來判斷這一輪是否有發生交換情形,若都沒有發生交換表示數列已經是排序好的,即可跳出迴圈,因此最佳時間複雜度是有可能達到O(n)。

//JS
<script>
var swap = function(data, i, j){ 
    var tmp = data[i];
    data[i] = data[j];
    data[j] = tmp;
};
    
var bubbleSort = function(data){
    var flag = true;
    for(var i = 0; i < data.length - 1 && flag; i++){
        flag = false;
        for(var j = 0; j < data.length - i - 1; j++){
           if(<pre>data[j+1]<pre> < <pre>data[j]<pre> ) { 
                swap(data, j+1, j);
                flag = true;
            }
        }
    }
};  
</script>
//JS
//Python

#選擇排序法

def showdata(data):
    for i in range(8):
        print('%3d' %data[i],end='')
        print() 
def select (data):
    for i in range(7):
        for j in range(i+1,8):
            if data[i]>data[j]: #比較第i及第j個元素
                data[i],data[j]=data[j],data[i] 
        print()       
data=[16,25,39,27,12,8,45,63]
print('原始資料為:')
for i in range(8):
    print('%3d' %data[i], end='')
print('\n----------------------------------------')
select(data)
print("排序後資料")
for i in range(8):
    print('%3d' %data[i],end='')
print('')  

//Python

選擇排序法

選擇排序法 (Selection Sort)

時間複雜度為 O(n²) 的演算法,代表著執行步驟會跟著輸入 n 成次方比例的增加。最基礎的排序法之一:選擇排序法(Selection Sort) 是 O(n²) 複雜度的代表。

基本來說,選擇排序只需要重複執行兩個步驟,分別是:

找最小值

  • 從「未排序好的數字」中找到最小值

丟到左邊

  • 把最小值丟到「未排序好的數字」的最左邊,把它標示成已排序好

假設有一個 [41, 33, 17, 80, 61, 5, 55] 的陣列,我們用圖的例子來一步一步理解選擇排序是如何進行,在下面的圖中,我們把尚未排序好的數字用紅色標示,這輪找到的最小值以橘色標示,排序好的以藍色標示。


//python

#選擇排序法

def showdata(data):
for i in range(8):
print('%3d' %data[i],end='')
print()
def select (data):
for i in range(7):
for j in range(i+1,8):
if data[i]&gt;data[j]: #比較第i及第j個元素
data[i],data[j]=data[j],data[i]
print()
data=[16,25,39,27,12,8,45,63]
print('原始資料為:')
for i in range(8):
print('%3d' %data[i], end='')
print('\n----------------------------------------')
select(data)
print("排序後資料")
for i in range(8):
print('%3d' %data[i],end='')
print('')
//python

出處:按此連結

插入排序法

同樣擁有 O(n²) 時間複雜度,插入排序法 Insertion Sort 則是另外一個非常常見的排序法。簡單來說,插入排序法就是你玩撲克牌時用到的排序法。

讀一個數字

  • 從「未排序過的數字」中讀取一個數

插入合適位置

  • 把這個讀取的數往前插入一個位置
<pre>//python

//插入排序:

SIZE=8
def showdata(data):
for i in range(SIZE):
print('%3d' %data[i], end='')
print()

def insert(data):
for i in range(1,SIZE):
tmp=data[i]
no=i-1
while no &gt;= 0 and
tmp &lt; data[no]:
data[no+1]=data[no]
no-=1
data[no+1]=tmp

def main():
data=[16,25,39,27,12,8,45,63]
print('原始陣列:')
showdata(data)
insert(data)
print('排序後:')
showdata(data)

main()

//python

</pre>

謝耳排序法


#謝耳排序
SIZE = 8
def showdata(data):
for i in range(SIZE):
print('%3d' %data[i],end='')
print()

def shell(data,size):
k=1
jmp=size//2

while jmp != 0:
for i in range(jmp, size):
tmp=data[i]
j=i-jmp
while tmp&lt;data[j] and j&gt;=0:
data[j+jmp] = data[j]
j = j-jmp
data[jmp+j]=tmp
print('第 %d 次排序過程:' %k,end='')
k+=1
showdata (data)
print('----------------')
jmp=jmp//2

def main():
data=[16,25,39,27,12,8,45,63]
print('原始陣列:')
showdata (data)
print('---------------')
shell(data,SIZE)

main()
0
2017120714143479-1

資料結構

認識資料結構

電腦科學中,資料結構英語:data structure)是電腦中儲存、組織資料的方式。

資料結構是資料進入電腦化處理的一套完整邏輯

程式設計師必須選擇一種結構來進行資料的新增、修改、刪除、儲存等動作

資料結構方式:

陣列

二維陣列

 

三維陣列

鏈結串列

堆疊

佇列

樹狀結構

什麼是樹狀結構?
樹狀結構的定義為每個點之間都可以找到路徑連通,但不會形成循環(cycle),且設定其中一個點為root(根節點),與root(根節點)相連的子樹(子樹1、子樹2、…與子樹n),任兩個子樹之間沒有邊相連。
以下是樹狀結構,點1到點9每個點之間都可以找到路徑連通,且沒有形成循環(cycle)。點1為root(根節點),其下方有三個子樹,子樹之間沒有邊相連,點2、點3與點4也是子樹。

圖形簡介

雜湊函數

0
1_85eZc1aesbrPA3Rj55dVHw

演算法

遞回法


//====遞回法=====

$number = 12;
$counter = 0;

function fib($number)
{

    if ($number == 0) {

        return 0;

    } else if ($number == 1 or $number == 2) {

        return 1;

    } else {
        return (fib($number - 1) + fib($number - 2));
    }
}

for ($counter; $counter〈 $number; $counter++) {

    //echo "|| I (".fib($counter).") | N".fib($number)."|| ";
    echo fib($counter) . " ";
}
//====遞回法=====

貪心法


//====貪心法=====

$counter = 0;

function Fibonacci($number)
{

// if and else if to generate first two numbers
if ($number == 0) {

return 0;

} else if ($number == 1 or $number == 2) {

return 1;

}

// Recursive Call to get the upcoming numbers
else {
return (Fibonacci($number - 1) + Fibonacci($number - 2));
}

}
while ($counter 〈 $number) {
$counter++;
echo fibonacci($counter) . " ";
}

//====貪心法=====

疊代法

//====疊代法=====
<?php

$sum = 1;
$number = 4;

for ($i = 0; $i <= $number; $i++) {

for ($j = $i; $j >= 0; $j--) {

$sum *= $j;
echo $i . " " . $j . " " . $sum . "
";

}
$sum = 1;
}

?>
//====疊代法=====

枚舉法

//====枚舉法=====
<?php
//找出減到變負數時候的值
$x = 1;

$num = 1000;

while ($num <= 0){
$num -= $x;
$x = $x+1;
//echo $num.' ';
//echo ($x+1).' ';
//echo ($x-1).' ';
// echo ($x-1).' ';
}

echo ($x-1).' ';
?>
//====枚舉法=====

回溯法

if($x == 1){

    $num = 1000;

}else if($x == 2){
    $num = 2000;
}else{
    $num = 3000;
}

echo ($num).' ';
0
图像 1

Laravel 基礎(二)

Response

//Route

Route::get('/blade','UserController@blade');

//Controller

public function blade()
{
$arr = ['name'=>'brian','age'=>'tel'=>'62111122'];
return view('admin.user.index',['title'=>'用戶列表',
'brian'=>$arr,
'page'=>'<a href="/1.html">1</a> <a href="/2.html">2</a> <a href="/3.html">3</a>']);
}

//view

TIME: {{date('Y-m-d')}}
字串: {{mb_substr($title,0,2)}}
<table>
<tbody>
<tr>
<td>名稱</td>
<td>{{$brian['name']}}</td>
</tr>
<tr>
<td>年齡</td>
<td>{{$brian['age']}}</td>
</tr>
<tr>
<td>電話</td>
<td>{{$brian['tel']}}</td>
</tr>
</tbody>
</table>
{!!$page!!}

VIEW

//Route

Route::get('/layout','UserController@layout');
      Route::get('/extend','UserController@extend');
      Route::get('/proess','UserController@proess');

//Controller

    public function layout()
    {
       return view('layout.index');
    }

    public function extend()
    {
       return view('layout.extend');
    }

    public function proess()
    {
       return view('control.proess',['total'=>200,'sex'=>1, 'users' => [
           ['name'=>'Brian1', 'age'=>30], 
           ['name'=>'Brian2', 'age'=>34], 
           ['name'=>'Brian3', 'age'=>44]]]);
    }


//VIEW
//index.blade

<div>header01</div>
@section('content')
<div>content01</div>
@show
<div>footer01</div>

//extend.blade

@extends('layout.index')
@section('title','test')

@section('content')
<div>content002</div>
@endsection


//VIEW
//proess.blade

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>proess</title>
</head>


<body>
OUTOUT
@if($total >= 90 && $total <=100)
COMECOME
@elseif($total >= 80 && $total <=90)
SHOPSHOP
@else
GOGO
@endif

<hr>

<input type="radio" name="sex" value="1" @if($sex == 1) checked="checked" @endif>男
<input type="radio" name="sex" value="0" @if($sex == 0) checked="checked" @endif>女

<ul>
@foreach($users as $k=>$v)
<li>
name: {{$v['name']}}<br>
age: {{$v['age']}}<br>
</li>
<hr>
@endforeach
</ul>
</body>
</html>

DB

//正確在 env FILE 修改
// config/database.php

        'test01' => [
            'driver' => 'mysql',
            'host' => '127.0.0.1',
            'database' => 'goods',
            'username' => '',
            'password' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
        ],

//view

Route::get('/db','UserController@db');
Route::get('/builder','UserController@builder');


//Controller

    public function db()
    {
        // 查詢
    //    $res = DB::select("select * from event01 where id = ?", [2]);
    //    echo '<pre>';
    //    var_dump($res);

       //插入
      // $res = DB::insert("insert into event01 (name, age, tel, message) values('brianCC',31,232323, 'OK YOU WIN')");
    //    $res = DB::insert("insert into event01 (name, age, tel, message) values(?,?,?,?)", ['brianCC',31,232323, 'OK YOU WIN']);
    //    echo '<pre>';
    //    var_dump($res);

       //修改
    
    //   $res = DB::update("update event01 set age = '32'");
    //   echo '<pre>';
    //   var_dump($res);

        //刪除
    
        // $res = DB::delete("delete from event01 where id = 4");
        // echo '<pre>';
        // var_dump($res);

        //建立
        // $res = DB::statement("create table test (id int primary key auto_increment,name char(40))");
        // echo '<pre>';
        // var_dump($res);

//事務操作

// DB::beginTransaction();
// //扣錢
// $res = DB::update("update event01 set price = price + 2000 where id = 1");

//     $res2 = DB::update("update event01 set price = price - 2000 where id = 2");

//     if($res && $res2){
// //提交
//         DB::commit();
//     echo '提交成功';
//     }else{
//         DB::rollback();
//         echo '提交失敗';
//     }

//     echo '<pre>';
//     var_dump($res);


//另一個資料庫
$res = DB::connection('test01')->select("select * from event01 where id = ?", [2]);

    echo '<pre>';
    var_dump($res);

}

//快速使用

public function builder()
{
    $res=DB::table('event01')->insert(

        [
            'name'=>'hoki',
            'age'=>'23'
        ]);


       //多条插入
        // $res = DB::table('event01')->insert([
        //     ['username'=>'xdl-北京','password'=>'xdl','account'=>100],
        //     ['username'=>'xdl-天津','password'=>'xdl','account'=>200],
        //     ['username'=>'xdl-上海','password'=>'xdl','account'=>300]
        //     ]);

        //插入并获取id
        // $res = DB::table('event01')->insertGetId([
        //     'username'=>'xdl-深圳','password'=>'xdl','account'=>400
        //     ]);

        //更新操作
        // $res = DB::table('event01')->where('id','=',2)->update(['username'=>"兄弟连"]);

        //删除
        // $res = DB::table('event01')->where('id','<',100)->delete();

        //查询
        // 查询多条
        // $res = DB::table('event01')->get();

        //获取单条数据
        // $res = DB::table('event01')->first();

        //获取单个结果中的某个字段值
        // $res = DB::table('event01')->value('account');

        //获取结果集中的某i个字段的所有制
        // $res = DB::table('event01')->lists('username');

        //设置字段查询
        // $res = DB::table('event01')->select('username','password')->get();

        //设置where条件
        // $res = DB::table('event01')->where('username','=','xdl')->first();

        //orWhere
        // $res = DB::table('event01')->where('id','=',2)->orWhere('username','=','lampbrother')->get();

        //whereBetween
        // $res = DB::table('event01')->whereBetween('id',[5,10])->get();

        //whereIn
        // $res = DB::table('event01')->whereIn('id',[9, 11, 12])->get();


        //排序
        $res = DB::table('user')->orderBy('id','desc')->get();

        //分页操作
        $res = DB::table('user')->skip(5)->take(4)->get();

        //连接表的操作
        $res = DB::table('good_test')
            ->leftJoin('cate','cate.id','=','good_test.cid')
            ->where('good_test.gid','<',20)
            ->get();


        //运算
        // /统计
        // $res = DB::table('goods')->where('id','<',300)->count();
        //最大值
        // $res = DB::table('good_test')->max('price');
        //平均值
        // $res = DB::table('good_test')->avg('price');

        // dd($ res);

}

4
laravel

Laravel 基礎(一)

http協議模擬發送

<?php 
	
	//创建连接
	$fp = fsockopen('localhost', 80, $errno, $errstr, 10);

	//判断
	if(!$fp) {
		echo $errstr;die;
	}

	$http = '';

	//请求行
	$http .= "POST /class/Public/laravel/http/server.php HTTP/1.1\r\n";

	//请求头
	$http .= "Host: localhost\r\n";
	$http .= "Connection: close\r\n";
	$http .= "Cookie: username=admin;uid=200\r\n";
	$http .= "User-agent: firefox-chrome-safari-ios-android\r\n";
	$http .= "Content-type: application/x-www-form-urlencoded\r\n";
	$http .= "Content-length: 37\r\n\r\n";

	//请求体
	$http .= "email=xiaohigh@163.com&username=admin\r\n";
	
	//发送
	fwrite($fp, $http);

	$res = '';
	//获取结果
	while(!feof($fp)) {
		$res .= fgets($fp);
	}

	echo $res; 
?>

載入Class & Obj

<?php 
	//命名空间使用的演示
	
	namespace one\two;
	//引入类文件
	include '2_1.php';
	include '2_2.php';
	include '2_3.php';

	//实例化对象  /  /   绝对路径   (完全限定名称)
	$obj = new \one\Obj;
	$obj2 = new \one\two\Obj;
	$obj4 = new \one\two\three\Obj;

	//直接实例化  如果当前代码的空间跟类文件的空间是一致的话 可以直接实例化   (非限定名称)
	// $obj3 = new Obj;

	//相对路径  (限定名称)
	// $obj5 = new three\Obj;
	// var_dump($obj5); 

	
 ?>

Laravel 架構圖

Routes

// local: web\laravel\routes\web.php

<?php
     Route::get('/form', function () {
      return view('/form');
     });
 
     Route::get('/put', function () {
      return view('/put');
     });
 
     Route::post('/insert', function () {
        echo 'insert';
     });
     Route::get('/put', function () {
        return view('put');
     });
 
     Route::put('/update', function () {
        return 'update';
     });
 
     Route::get('/delete', function () {
        return view('delete');
     });
 
     Route::delete('/del', function () {
        return 'delete';
     });
 
     Route::get('/article/{id}', function ($id) {
        return 'article'.$id;
     });
     Route::get('/goods/{id}', function ($id) {
        return 'goods'.$id;
     })->where('id', '\d+');
 
     Route::get('/{type}-{id}', function ($type, $id) {
        return 'type'.$type.'&'.$id;
    });
?>

Middleware 中間件

//SSH
php72 artisan make:middleware Login


//\web\laravel\app\Http\Middleware\Login.php

public function handle($request, Closure $next)
    {
        if(!session('uid')){

            return redirect('/login');

        }
        return $next($request);
    }



//\web\laravel\app\Http\Kernel.php

protected $routeMiddleware = [
'login' => \App\Http\Middleware\Login::class,
];


// \web\laravel\routes\web.php

 Route::get('/setting', [
         'middleware' => 'login',
         'uses' => function(){
             echo 'setting page';
         }
     ]);

Route::get('/session', function () {
        session(['uid' => 10]);
       });

Controllers

//Route

Route::get('/controller', 'UserController@show');

       Route::get('/user/edit/{id}','UserController@edit');

       Route::get('/user/delete/{id}',[
           'as' => 'udelete',
           'uses' => 'UserController@delete'
           ]);

      Route::get('/user/update',[

        'middleware' => 'login',
        'uses' => 'UserController@update',

      ]);

      Route::get('/user/block','UserController@block')->middleware('login');

      Route::resource('articles','ArticleController');


//php72 artisan make:controller ArticleController --resource

\\\web\laravel\app\Http\Controllers

    public function index()
    {
        echo 'home';
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        echo 'id';
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        return view('edit');
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        echo 'update';
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        echo 'del';
    }
}


//php72 artisan make:controller ArticleController
// \web\laravel\app\Http\Controllers 

class UserController extends Controller
{
    public function show()
    {
        return 'I Love You';

    }
    public function edit($id)
    {
        echo 'editor'.$id;

    }

    public function delete()
    {
        echo route('udelete',['id'=>100]);

    }

    public function update()
    {
        echo 'updateing';

    }

    public function block()
    {
        echo 'blocked';

    }
}



// web\laravel\resources\views

<form action="/articles/20" method="post">

<input type="text" name="username">
<input type="hidden" name="_method" value="PUT">
{{csrf_field()}}

<input type="submit" value="edit">

</form>

<form action="/articles/300" method="post">

<input type="text" name="username">
<input type="hidden" name="_method" value="DELETE">
{{csrf_field()}}

<input type="submit" value="del">

</form>

Request

//Route

Route::get('/request', 'UserController@request');

//显示一个form表单
Route::get('/user-form', 'UserController@form');

Route::post('/form', 'UserController@insert');


Route::get('/file', 'UserController@show');

Route::post('/upload', 'UserController@upload');

//cookie操作
Route::get('/cookie', 'UserController@cookie');

//闪存操作
Route::get('/flash', 'UserController@flash');
Route::get('/old', 'UserController@old');
Route::get('/flash_1', 'UserController@flash_1');
Route::get('/get_flash', 'UserController@get_flash');


Route::post('/flash','UserController@doflash');


//Controllers

    public function request(Request $request)
    {
       //$method = $request->method();
       //echo $method;
      // $url = $request->ip();
       

       $username = $request->input('username');
       $password = $request->input('password');

       var_dump($username);
       var_dump($password);


    }
    public function form()
    {
       return view('user');
    }

    public function insert(Request $request)
    {
        $username = $request->input('username');
        //$password = $request->input('password');
        var_dump($username);

        $res = $request->has('username');
        //$password = $request->input('password');
        var_dump($res);

        $res2 = $request->only(['username','password']);
        //$password = $request->input('password');
        var_dump($res2);

        $res3 = $request->except(['username','password']);
        //$password = $request->input('password');
        var_dump($res3);

        $res4 = $request->header('Cookie');
        //$password = $request->input('password');
        var_dump($res4);


    }

    public function show()
    {
       return view('upload');
    }

    public function upload(Request $request)
    {
        //检测文件是否有上传
         //$res = $request->hasFile('profile');
        //php脚本中的相对路径,都是相对于当前正在请求的文件。
        if($request->hasFile('profile')) {
              //file_get_contents(filename)
              //file_put_contents(filename, data)
              //fopen(filename, mode)
              //include
            $request->file('profile')->move('./upload', 'liuyan.jpg');
        }
//var_dump($res);


    }

        /**
     * cookie操作
     */
    public function cookie(Request $request)
    {
        //写入cookie setcookie
        // \Cookie::queue('name','xdl',20); //时间单位为分钟不是秒
        return response('')->withCookie('xiongdilian','zhenbang', 5);

        //读取
        // $res = \Cookie::get('name');

        //获取
        // $res = $request->cookie('xiongdilian');

    }

    /**
     * 闪存的演示
     */
    public function flash()
    {
        return view('flash');
    }

    public function doflash(Request $request)
    {
        // var_dump($request->all());
        $request->flash();//将请求过来的参数 都闪存起来
        //跳转到原来页面重写填写参数
        return back();
    }

    public function old()
    {
        var_dump(old('username'));
    }

    /**
     * 自定义闪存
     */
    public function flash_1()
    {
        //手动闪存数据
        \Session::flash('name','xiaohigh');
    }

    /**
     * 读取闪存
     */
    public function get_flash()
    {
        echo session('name');
    }
2