英語
少なくとも週に一度、問題や虐待について尋ねてください。
├──Package │ ├── Sort 排序篇 │ │ ├── BubbleSort.php 冒泡排序 │ │ ├── HeapSort.php 堆排序 大根堆 │ │ ├── MBaseSort.php 基数排序 MSD │ │ ├── LBaseSort.php 基数排序 LSD │ │ ├── QuickSort.php 快速排序 │ │ ├── ShuttleSort.php 飞梭排序 │ │ ├── ShellSort.php 希尔排序 │ │ ├── MergeSort.php 归并排序 │ │ ├── InsertSort.php 插入排序 │ │ └── SelectSort.php 选择排序 │ │ │ ├── Query 查找篇 │ │ ├── BinaryQuery.php 二分查找 │ │ ├── InseertQuery.php 插入查找 │ │ ├── FibonacciQuery.php 斐波那契查找 │ │ ├── BFSQuery.php 广度优先查找 │ ├── Kmp.php 算法导论-KMP算法 │ ├── DijkstraQuery.php 迪克斯特拉算法 │ │ └── QulickQuery.php 快速查找 │ │ │ ├── Structure 数据结构 │ │ ├── StackExample.php 堆栈 先进后出 LIFO (Last In First Out) │ │ ├── LinearChain.php 线性表 单链存储 │ │ └── LinearOrder.php 线性表 顺序存储 │ │ └── BinarySearchTree.php 二叉搜索树 │ │ │ ├── Tools 小工具集 │ │ └── SystemSwitch.php 堆栈实现进制转换 │ │ │ └── Other 其他 │ ├── MonkeyKing.php 约瑟夫环 │ ├── DynamicProgramming.php 动态规划 │ ├── Fibonacci.php 斐波那契数列 │ ├── StealingApples.php 偷苹果求余 │ ├── HanoiGames.php 汉诺塔游戏 │ ├── BidirectionalQueue.php 双向队列 │ ├── ColorBricks.php 彩色砖块 │ ├── GetCattle.php 牛年求牛 │ ├── OnlyNumbers.php 求唯一数 │ ├── PokerGames.php 洗扑克牌 │ ├── Interval.php 抽奖区间算法 │ ├── Maze.php 迷宫寻址算法 │ ├── AntsClimb.php 蚂蚁爬杆算法 │ ├── Encryption.php 对称加密算法 │ ├── ElevatorDispatch.php 编程之美-电梯调度算法 │ ├── PointInTriangle.php 向量叉集计算点是否在三角形中 │ ├── TraversalOfBinary.php 二叉树非递归遍历算法实现 │ ├── Knapsack.php 贪心算法之背包问题实现 │ └── BigSmallReplace.php Hello World 输出 Olleh Dlrow │ └── Solution.php Facebook面试题之岛屿周长算法 │ └── RotationSort.php Facebook面试题之顺时针回旋算法 │ └── Square.php Facebook面试题之判断四个点能否组成正方形算法 │ └── Prim.php Prim算法(最小生成树算法) │ └── CartesianProduct.php 笛卡尔积算法 │ └── Square.php 面试题之平面任意四点能否组成一个矩形 │ └── Judge.php 面试题之扑克牌中任选五张判断是不是顺子 │ └── Factorial.php 面试题之N的阶乘末尾有多少个0 | └── HashTable.php HashTable | └── RotateSort.php 面试题之风车旋转排序算法 │ ├──LICENSE └──README.md
记录自己理解算法,数据结构的过程,尽可能的简单全面以及详细,让算法学习运用灵活自如,加油(ง •̀_•́)ง
用 PHP 实现算法并替代官方提供的函数是愚蠢的事情 .但这决不代表斟酌算法就是件无意义的事 , 每个算法都是一种思想的结晶 , 学习优秀的思想 , 开拓思维
正確に言うと、算法とは、入力として特定の値または集合を受け取り、特定の値を生成する、あらゆる明白な計算プロセスです。このように、計算は入力を出力に変換する一連の計算プロセスです。 H. Cormen、Chales E. Leiserson (2009)、《算法导论 第 3 版》。
端的に言えば、私たちは、特定の仕事の一連のステップを解決するために算術法が使用されていると考えています (コンピュータが算術法を使用しているのは当然のことですが、人間も同様です)。
それは有限である必要があります。転送された計算法が継続的に問題を解決するのであれば、それは役に立ちません。
それらは、明確な命令、つまりアルゴリズムのすべてを標準的に定義する必要があり、どのような環境下でも命令は存在しません。
それは効果的である必要があります。ある計算法は、ある問題を解決するために設計されており、その問題を解決することができ、紙と紙を使用するだけでその計算法が効果的であることを証明できます。
log 10 100 は、「10 個の結果を 100 にする」に相当します。答えは当然 2 なので、log 10 100=2、つまり、数値計算は単数計算の逆計算です。
左 | 右 |
---|---|
2 3 = 8 | 対数2 8 = 3 |
2 4 = 16 | 対数2 16 = 4 |
2 5 = 32 | 対数2 32 = 5 |
例として、どの程度の時間を節約できるかを使用すると、リストに 100 個の数字が含まれている場合、最も多くても 100 回ずつ数字が検査されます。言い換えれば、最も必要な検査の回数は列表の長さと同じであり、これは線形時間 (線形時間) と呼ばれますが、列表に 100 個の元素が含まれている場合は 2 分ごとに異なります。最長で 7 回、列表に 40 桁の数字が含まれている場合、最長で 32 回必要となり、分割の実行時間は数時間O(log)
になります。
O表示法は、計算法の速度が速いことを示す特殊な表示法である。有快有遅
算法の実行時間が異なる速度で増加する
例: 1 つの区と 2 つの区
元素 | 简单查找 | 二分查找 |
---|---|---|
100元素 | 100ミリ秒 | 7ミリ秒 |
10000元素 | 10代 | 14ミリ秒 |
1 000 000 000 个元素 | 11日 | 30ミリ秒 |
大O
表示法は、多数の計算法を指します。たとえば、列表にはn
個の要素が含まれており、各要素を検査する必要があるため、 n
回目の操作を実行する必要があります。大O
表示法を使用すると、この実行時間はO(n)
であり、2回の実行が必要です。 log n回目の操作、使用大O
表示はO(log n)
ごく一般的な実行時間
O(log n) 、または数時間、このような算法には二分算法が含まれます
O(n)は線形時間とも呼ばれ、このような計算には単純な計算が含まれる。
O(n * log n) 快速排序
O(n 2 ),选择排序
O(n!) 即阶乘時間
ここが注目です
計算法の速度は時間ではなく、演算数の増加速度を指します
計算法の速度時間、私たちの意見では、入力が増加するにつれて、その実行時間は何十倍もの速度で増加します
算法の実行時間を大O表示法で表す
O(log n) より O(n) が速く、検索が必要な要素が多いほど、前者が後者よりも速い
データ形式を使用して問題をどのように記述するか、つまり、問題の抽象化を数学モデルとする
問題に含まれるデータ量の大きさとデータ間の関係
コンピュータ内にデータと本体データをどのように保存するかに関する関係
データの処理時には、データに対して実行される操作が必要です
编記のプログラムのパフォーマンスは良好かどうか
これは、ゲストのシンボルを表し、コンピュータに入力され、コンピュータ プログラムによって処理されるすべてのシンボルを指します。
データ要素 (Data Element): データの基本単位であり、通常、プログラム内で 1 つの全体として考慮され、処理されます。
データテーブル(データ項目):データの分割不可能な最小単位。データテーブルは、ゲストの視聴に対する特定の特性を記述するデータです。
データオブジェクト (Data Object) : 性質が同じデータ要素の集合であり、データの子の集合です。文字集合 C={'A','B','C,…} など。
データ構造:相互に一定の関係を持つデータ要素の集合。
データの相互構造: データ要素間の相互関係は、相互構造と呼ばれます。
データ操作: データに対して実行される計算
データタイプ (Data Type): 1 つの値のセットと、その値のセットにおける 1 つのオペレーションの総称を指します。
集合:構造中のデータ要素間に「同じ集合に属する」以外に他の関係はありません
線形構造:構造内のデータ要素は一対一の関係を持っています
形構造:構造中に存在するデータ要素には複数の関係があります
ネットワーク状または図状の構造:構造内のデータ要素が多数存在する
コンピュータには、データ要素間の関係により、順序表示と非順序表示という 2 つの異なる表現方法があり、順序記憶構造と順序記憶構造の 2 種類の記憶方法が存在します。
順序記憶構造: メモリ内のデータ要素の相対位置を使用して、データ要素間の相互構造 (関係) を示します。データ要素が格納されるアドレスは連続しています。
链式記憶構造: 各データ要素に保存されている要素の位置にある指针(ポインタ)を追加します。 、この指示は、データ要素間の仮想構造 (関係)、データ要素が保存されている場所が要求されていないかどうかを示します。
データの仮想構造と物理構造は密接な二つの側面であり、計算法の設計は選択された仮想構造に依存し、計算法の実現は使用される記憶構造に依存します。
これは、特定のリクエストの解決方法(ステップ)に関する記述であり、各命令が 1 つまたは複数の動作を表す命令の有限シーケンスです。
算法には以下の5つの特徴があります
性質: 1 つの計算法は必ず実行後に終了し、毎回一定の時間内に完了する必要があります。
確定性: 算法の各命令には明確な内容が含まれなければならず、二項対立は存在せず、算法には 1 つの入口と 1 つの出口だけが存在する
実行可能性: 1 つの計算法が実行可能である、つまり、計算法で記述された操作はすべて、すでに実現されている基本的な計算によって何度でも実行可能です。
入力: 1 つの計算法には 0 個以上の入力があり、これらの入力は特定のオブジェクト集合から取得されます。
出力: 1 つの計算法には 1 つまたは複数の出力があり、これらの出力は特定の特定の量とともに入力されます。
算法と手順は 2 つの異なる概念です
あるコンピュータ プログラムは、あるコンピュータ プロセスに対して特定のプログラムを使用する特定の実装である必要があります。
评价一好的算法は以下の基準を持っています
正确性(正しさ): 算法应满特定のニーズを満たす
可読性(可読性): 算法は人の蘊蓄と交流を容易にし、可読性の高い算法は算法の理解と修正に役立つ
健壮性(ロバストネス): 算法应有容错処理,当输入非法または错误データ時,算法应能適切出反应或行処理処理,而不会生莫名其妙的输出结果
汎用性(Generality): 算法には一般性がある、つまり一般的なデータ集合に対して算法の処理結果が成立すること
効率と必要な記憶量: 効率とは、計算の実行時間を指します。必要な記憶量とは、計算の実行中に必要な最大記憶空間を指します。一般に、この 2 つは重要な規則に関係します。
算法における基本的な操作の繰り返し実行回数は、T(n)=O(f(n))として表される時間量であり、算法の近似時間計算量(漸近時間計算量)と呼ばれます。名高い時間复度
これは、計算法を記述した後、コンピュータの実行中に必要な空間サイズの量を意味し、式:S(n)=O(f(n))、ここで n は次の計算式になります。
プログラムを見ると、ボタンは自己調整用であるように見え、循環はそのような形式ではありません。
递归は、深刻な問題からの最終的な目標であり、徐々に深刻な問題が深刻な問題に変化し、深刻な問題の解決策の思考回路と複雑な問題が同時に存在します。基本的には、最終的に問題が得られるのは逆方向です。一方、循環は、単一の問題から、一歩前に向かって展開し、最終的に問題が得られる方向です。
全てのサイクルは、ピンボタンを使用して表すことができますが、サイクルを使用してピンピンを実行するには(一方向ピンピンと尾ピンピンを除いて)、圧力出力を行うためにすべてのサイクルを組み込む必要があります。
一般に、非スイッチングの効率はスイッチングよりも高く、また、スイッチング関数の使用には制限があり、スイッチングの次回の蓄積サイズには制限がある。
フォーク我的项目并提交你的idea
プルリクエスト
マージ
大家が何か問題を発見した場合は、問題を発行するか、プルリクエストを発行することができます。
补充:発行プル要求のコミット メッセージ请参照文章コミット メッセージと変更ログ 编写指南
感谢以下の友友の問題またはプルリクエスト:
ひょう
張玄如
iffreesec
オープンセット
ネロクシエジ
マサチューセッツ工科大学