Một bước tiến tới tính toán như một khoa học

Các thuật toán và cấu trúc dữ liệu đơn giản trong JS

Ảnh của J. Craig trên Un-Splash

Một thuật toán là các bước được thực hiện để giải quyết vấn đề. Một cấu trúc dữ liệu là dữ liệu được tổ chức để truy cập hiệu quả. Bạn có thể sử dụng một thuật toán để giải quyết tất cả các loại vấn đề (nghĩa là tìm kiếm một phần dữ liệu hoặc sắp xếp một bộ sưu tập dữ liệu) cho một cấu trúc dữ liệu nhất định.

Vì vậy, liên quan đến máy tính, thuật toán là phương pháp của những gì bạn đang làm (nghĩa là tìm kiếm tuyến tính, tìm kiếm nhị phân, sắp xếp bong bóng, sắp xếp lựa chọn, sắp xếp chèn, v.v.), trong khi cấu trúc dữ liệu là thứ bạn đang làm đến (nghĩa là các đối tượng được ghép nối mảng, khóa-giá trị, v.v.). Vì vậy, bạn có thể tìm kiếm một cách có phương pháp thông qua, sắp xếp hoặc tạo một bộ dữ liệu có tổ chức.

Cấu trúc dữ liệu đơn giản

Mảng

Một mảng giống như các hộp được đánh số (chỉ mục) được sắp xếp từ nhãn thấp nhất (0) đến nhãn cao nhất (2). Mỗi hộp được cố định tại chỗ và vẫn được đặt hàng bởi nhãn của nó.

Bạn có thể chuyển đến bất kỳ hộp được gắn nhãn nào để xem nội dung của nó (mảngName [2]), để thêm nội dung hoặc thay thế nội dung của nó (mảngName [2] = Drake Sherlock Holmes trộm). Bạn có thể đẩy nội dung mới được đóng hộp đến cuối bộ sưu tập của mình (ArrayName.push (Hồi ký của Sherlock Holmes Cuộc)).

Điều này cung cấp cho hộp đến nhãn tiếp theo trong chuỗi (3). Để trở về bộ sưu tập được đóng hộp ban đầu của bạn, bạn có thể bật ra phần cuối (mảngName.pop ()).

Bạn cũng có thể tắt hộp đầu tiên của mình (mảngName.shift ()), nhưng điều này sẽ yêu cầu tái định cư tất cả các hộp khác của bạn.

Bộ sưu tập Sherlock Holmes của bạn hiện nằm trong hộp có nhãn 1. Nếu bạn không dịch chuyển bộ sưu tập hộp của mình, bạn có thể thêm vào đầu bộ sưu tập của mình một hộp nội dung mới (ArrayName.shift (của Tiến sĩ Strange Strange)).

Điều này mang lại cho chúng tôi bộ sưu tập Dr. Strange & Sherlock Holmes của chúng tôi tại các hộp có nhãn 0 & 2.

Tìm kiếm cấu trúc dữ liệu

Tìm kiếm tuyến tính

Tìm kiếm tuyến tính giống như đi dọc theo một mảng các hộp (tức là 0 - 16) và mở từng bìa để xem nội dung của nó có phải là thứ bạn đang tìm kiếm hay không (ví dụ: 37).

nguồn

Vì vậy, đối với một chỉ mục từ đầu bộ sưu tập (giả sử 0) cho đến hết (chiều dài của nó ít hơn một), chúng ta có thể tìm kiếm nội dung mong muốn trong một hộp và chuyển sang tiếp theo. Chúng tôi có thể tăng từ hộp này sang hộp tiếp theo cho đến khi tìm thấy kết quả khớp.

Tìm kiếm nhị phân

Tìm kiếm nhị phân giống như tìm kiếm trong một loạt các hộp, có nội dung được sắp xếp (nghĩa là bằng số hoặc theo thứ tự chữ cái), bằng cách nhảy nửa chừng đến hộp giữa và kiểm tra nội dung của nó cho mục bạn muốn. Nếu bạn vượt qua, bạn nhảy lùi lại, giữa chừng vị trí hiện tại của bạn và điểm bắt đầu. Nếu không, bạn nhảy về phía trước, giữa vị trí hiện tại của bạn và điểm cuối.

nguồn

Vì vậy, những gì bạn có thể làm là theo dõi các vị trí chỉ số thấp (ban đầu 0), giữa (8) và cao (ban đầu 16). Vị trí giữa luôn bằng một nửa tổng chỉ số thấp & cao. Bạn kiểm tra hộp giữa cho một trận đấu (tức là, 37). Nếu nó ít hơn những gì bạn mong đợi (<37), thì bạn sẽ nhảy về phía trước. Bạn đặt lại chỉ số thấp của mình để được thông qua vị trí giữa hiện tại của bạn bằng một (8 + 1 = 9). Sau đó, tính toán lại vị trí giữa mới ((9 + 16) / 2 12).

Nói cách khác, bạn có thể nhảy vọt trong tìm kiếm của mình bằng cách đặt lại chỉ số thấp của bạn và tính toán lại một chỉ số giữa mới. Ngược lại, nếu bạn vượt qua, bạn có thể nhảy lùi lại bằng cách đặt lại chỉ số cao của bạn và tính toán lại một chỉ số giữa mới.

Không giống như tìm kiếm tuyến tính, loại này là nhị phân. Bạn luôn đoán xem mặt hàng của bạn nằm ở nửa đầu hay nửa sau của bộ sưu tập đóng hộp của bạn.

Sắp xếp cấu trúc dữ liệu

Sắp xếp bong bóng

Một loại bong bóng đang sắp xếp một bộ sưu tập bằng cách liên tục hoán đổi một giá trị cao hơn với một ít hơn liền kề, dẫn đến hiệu ứng của giá trị cao nhất sủi bọt lên đến đỉnh.

nguồn

Vì vậy, đối với độ dài của bộ sưu tập của bạn, bắt đầu từ chỉ số 0, bạn trao đổi nội dung của một chỉ mục hiện tại (i) với nội dung của một chỉ mục sau (i + 1), nếu giá trị trước đó lớn hơn. Sau đó, bạn chuyển sang bộ chỉ mục tiếp theo (i + 1 so với i + 2), v.v.

Tại một số thời điểm, bạn sẽ đến một hộp có giá trị cao nhất trong bộ sưu tập của bạn. Và vì vậy, nó sẽ là nội dung tiếp tục được hoán đổi về phía trước. Do đó nó sủi bọt lên trên. Bạn lặp lại quá trình này cho đến khi bộ sưu tập của bạn được sắp xếp, từ giá trị thấp đến cao.

Vì hộp cuối cùng của mỗi lần lặp sẽ kết thúc với giá trị cao nhất, bạn lặp lại quy trình bằng cách loại trừ các hộp cuối cùng.

Lựa chọn sắp xếp

Sắp xếp lựa chọn là sắp xếp một bộ sưu tập bằng cách liên tục chọn giá trị thấp nhất và hoán đổi nó thành một đầu.

nguồn

Vì vậy, ở đây bạn quét qua toàn bộ bộ sưu tập của bạn để tìm giá trị thấp nhất. Khi nó được tìm thấy, bạn trao đổi nội dung của nó với hộp có nhãn chỉ mục thấp nhất (chỉ mục ban đầu là 0). Bạn lặp lại quá trình này bắt đầu với chỉ số thấp nhất tiếp theo (chỉ số 1) vì giá trị thấp nhất của bạn nằm ở vị trí chính xác. Với mỗi lần lặp, phạm vi độ dài cho lần quét của bạn giảm đi 1, cho đến khi toàn bộ bộ sưu tập của bạn được sắp xếp từ giá trị thấp nhất đến giá trị cao nhất.

Sắp xếp chèn

Một loại sắp xếp chèn là sắp xếp một bộ sưu tập bằng cách chèn từng giá trị gặp phải vào vị trí chính xác của nó.

nguồn

Vì vậy, ở đây, thay vì quét toàn bộ bộ sưu tập trên mỗi lần lặp (nghĩa là Sắp xếp bong bóng & lựa chọn), bạn bắt đầu ở chỉ số 0 & 1 để so sánh các giá trị của chúng. Nếu giá trị sau này thấp hơn, nếu nội dung của chỉ số 1 có giá trị thấp hơn chỉ số 0, bạn trao đổi nội dung của chúng. Bạn di chuyển đến hộp tiếp theo tại chỉ mục 2 và so sánh với các hộp được sắp xếp trước đó của bạn (chỉ mục 1, sau đó chỉ mục 0).

Mỗi khi bạn gặp một giá trị cao hơn, bạn trao đổi nội dung của nó sang bên phải. Khi bạn đã tìm đúng vị trí, bạn chèn nội dung (trước đó ở chỉ số 2) vào ô đúng. Vì vậy, nó giống như là bạn đã rút ra các nội dung của hộp sau đó và chuyển sang hộp trước đó.

Nếu hộp trước đó có giá trị cao hơn hộp bạn đang giữ, bạn chuyển nội dung của nó sang hộp sau. Bạn tiếp tục làm điều này cho đến khi bạn tìm thấy vị trí chính xác để chèn những gì bạn đang giữ.

Một cấu trúc dữ liệu đơn giản khác

Khóa - Đối tượng được ghép giá trị

Một đối tượng được kết hợp khóa - giá trị giống như một tập hợp các hộp ký gửi không ghi nhãn. Mỗi khóa duy nhất mở ra một phần dữ liệu cụ thể. Không giống như một mảng, nó là dữ liệu không có thứ tự có thể truy cập bằng các khóa duy nhất.

nguồn

Vì vậy, bạn truy cập vào một hộp ký gửi bằng cách sử dụng khóa của nó (objectName [‘s,]), ​​thay đổi nội dung của nó hoặc tạo một khóa mở ra một nội dung được chỉ định (objectName [‘ s tựa] =, Sherlock Holmes đấm). Bạn có thể truy cập tất cả các khóa được tạo cho hoặc tất cả nội dung được lưu trữ trong tất cả các hộp ký gửi của bạn (Object.keys (objectName) hoặc Object.values ​​(objectName)).

Phần kết luận

Các thuật toán cơ bản (tìm kiếm tuyến tính & nhị phân; bong bóng, sắp xếp lựa chọn & chèn) & cấu trúc dữ liệu (đối tượng mảng & giá trị khóa) dẫn đến các câu hỏi về thời gian và không gian liên quan đến quản lý dữ liệu. Việc xem xét thời gian thực hiện để tìm kiếm, sắp xếp hoặc truy cập dữ liệu và không gian bộ nhớ cần thiết cho các quy trình này có thể nâng cao nhà phát triển phần mềm từ lập trình máy tính đến khoa học máy tính. Nó đưa bạn từ suy nghĩ về lập trình cho hiệu quả đến lập trình cho hiệu quả.