九章演算法系列(一)

2021-08-31 21:34:36 字數 1661 閱讀 3521

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

問題:實現乙個memcpy函式

本題主要考慮兩點:1)記憶體重疊與否2)重疊記憶體的copy方式

無重疊的記憶體copy:

void *mymemcpy

(void *dst,const

void *src,size_t num)

if(des>=src+num||src>dst+num)       return dst;}

"code" class="cpp" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 25.2px;">void * mymemcpy(void *dest, const

void *src, size_t count)    }    else        }    return dest;}

對於記憶體重疊的copy基於src與dst的相對位置,可能會有人不太清楚,這裡給出我自己畫的圖

此外,給出有關void*的深入理解,也有助於本題的解決,有興許的朋友可以看一下

void的含義

void即「無型別」,void *則為「無型別指標」,可以指向任何資料型別。

void指標使用規範

①void指標可以指向任意型別的資料,亦即可用任意資料型別的指針對void指標賦值。例如:

int *pint;

void *pvoid;

pvoid = pint; /* 不過不能 pint = pvoid; */

如果要將pvoid賦給其他型別指標,則需要強制型別轉換如:pint = (int *)pvoid;

②在ansi c標準中,不允許對void指標進行算術運算如pvoid++或pvoid+=1等,而在gnu中則允許,因為在預設情況下,gnu認為void *與char *一樣。sizeof( *pvoid )== sizeof( char ).

void的作用

①對函式返回的限定。

②對函式引數的限定。

當函式不需要返回值時,必須使用void限定。例如: void func(int, int);

當函式不允許接受引數時,必須使用void限定。例如: int func(void)。

由於void指標可以指向任意型別的資料,亦即可用任意資料型別的指針對void指標賦值,因此還可以用void指標來作為函式形參,這樣函式就可以接受任意資料型別的指標作為引數。例如:

void * memcpy( void *dest, const void *src, size_t len );

void * memset( void * buffer, int c, size_t num );

給我老師的人工智慧教程打call!

動態規劃 九章演算法

最近看了九章演算法的動態規劃班,受益匪淺,一點簡要的筆記分享給大家 什麼是動態規劃?簡而言之,就是計算並儲存小問題的解,並將這些解組合成大問題的解。動態規劃題目的特點 1 計數 1 有多少種方式走到右下角 2 有多少種方法選出k個數使得和為sum 2 求最大值最小值 1 從左上角到右下角路徑的最大數...

演算法導論 第九章

這章介紹了中位數和順序統計學 中位數即乙個序列中最中間的數字,在快速排序中非常有意義,在其它的一些應用中也很有效,因為可以2分序列,這樣會有更好的效率。這章主要介紹如何不排序來找到序列的順序,由於不需要排序,可以減少很多比較的操作,最終可以獲得一些線性的演算法,得到排名第i的數字。演算法的基礎是首先...

九章強化最後一章

1 find peak element public int findpeak int a else return start view code 2 子陣列之和0 乙個整數矩陣有如下一些特性 相鄰的整數都是不同的 矩陣有 n 行 m 列。對於所有的 i m,都有 a 0 i a 1 i a n 2...