ಅನುಗುಣವಾದ ಅಲ್ಗಾರಿದಮ್ ಪ್ರಕಾರ ಕಾರ್ಯಕ್ರಮದ ಸಮಯದ ದಕ್ಷತೆ. ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಮತ್ತು ಡೇಟಾ ರಚನೆಗಳ ಸಂಕೀರ್ಣತೆ ಮತ್ತು ದಕ್ಷತೆಯ ಪರಿಕಲ್ಪನೆಗಳು. ಸ್ವೀಕರಿಸಿದ ವಸ್ತುಗಳೊಂದಿಗೆ ನಾವು ಏನು ಮಾಡುತ್ತೇವೆ?

ಅಲ್ಗಾರಿದಮ್ ದಕ್ಷತೆಅಲ್ಗಾರಿದಮ್ ಬಳಸುವ ಕಂಪ್ಯೂಟೇಶನಲ್ ಸಂಪನ್ಮೂಲಗಳೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಅಲ್ಗಾರಿದಮ್‌ನ ಆಸ್ತಿಯಾಗಿದೆ. ಅಲ್ಗಾರಿದಮ್‌ಗೆ ಅಗತ್ಯವಿರುವ ಸಂಪನ್ಮೂಲಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ವಿಶ್ಲೇಷಿಸಬೇಕು. ಅಲ್ಗಾರಿದಮ್ ದಕ್ಷತೆಯನ್ನು ಪುನರಾವರ್ತಿತ ಅಥವಾ ನಿರಂತರ ಪ್ರಕ್ರಿಯೆಗಳ ಉತ್ಪಾದನಾ ಉತ್ಪಾದಕತೆಗೆ ಸದೃಶವಾಗಿ ಪರಿಗಣಿಸಬಹುದು.

ಗರಿಷ್ಠ ದಕ್ಷತೆಯನ್ನು ಸಾಧಿಸಲು, ನಾವು ಸಂಪನ್ಮೂಲ ಬಳಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಬಯಸುತ್ತೇವೆ. ಆದಾಗ್ಯೂ, ವಿಭಿನ್ನ ಸಂಪನ್ಮೂಲಗಳನ್ನು (ಸಮಯ ಮತ್ತು ಸ್ಮರಣೆಯಂತಹವು) ನೇರವಾಗಿ ಹೋಲಿಸಲಾಗುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ಎರಡು ಅಲ್ಗಾರಿದಮ್‌ಗಳಲ್ಲಿ ಯಾವುದನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಹೆಚ್ಚಾಗಿ ಯಾವ ಅಂಶವು ಹೆಚ್ಚು ಮುಖ್ಯವಾಗಿರುತ್ತದೆ ಎಂಬುದರ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ, ಉದಾಹರಣೆಗೆ ಹೆಚ್ಚಿನ ವೇಗದ ಅವಶ್ಯಕತೆ, ಕನಿಷ್ಠ ಮೆಮೊರಿ ಬಳಕೆ ಅಥವಾ ಇನ್ನೊಂದು ಅಳತೆ ದಕ್ಷತೆ.

ಈ ಲೇಖನವನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ ಅಲ್ಲಅಲ್ಗಾರಿದಮ್ ಆಪ್ಟಿಮೈಸೇಶನ್ ಬಗ್ಗೆ, ಇದನ್ನು ಲೇಖನಗಳ ಪ್ರೋಗ್ರಾಂ ಆಪ್ಟಿಮೈಸೇಶನ್, ಆಪ್ಟಿಮೈಜಿಂಗ್ ಕಂಪೈಲರ್‌ನಲ್ಲಿ ಚರ್ಚಿಸಲಾಗಿದೆ, ಸೈಕಲ್ ಆಪ್ಟಿಮೈಸೇಶನ್, ಆಬ್ಜೆಕ್ಟ್ ಕೋಡ್ ಆಪ್ಟಿಮೈಜರ್, ಮತ್ತು ಇತ್ಯಾದಿ. "ಆಪ್ಟಿಮೈಸೇಶನ್" ಎಂಬ ಪದವು ತಪ್ಪುದಾರಿಗೆಳೆಯುತ್ತಿದೆ ಏಕೆಂದರೆ ಮಾಡಬಹುದಾದ ಎಲ್ಲವೂ "ಸುಧಾರಣೆ" ಯ ಅಡಿಯಲ್ಲಿ ಬರುತ್ತದೆ.

ಹಿನ್ನೆಲೆ

1843 ರಲ್ಲಿ ಚಾರ್ಲ್ಸ್ ಬ್ಯಾಬೇಜ್‌ನ ಯಾಂತ್ರಿಕ ವಿಶ್ಲೇಷಣಾತ್ಮಕ ಎಂಜಿನ್‌ಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ಅದಾ ಲವ್ಲೇಸ್ ಅವರು ಮರಣದಂಡನೆಯ ಸಮಯದ ಮೇಲೆ ಒತ್ತು ನೀಡುವ ಮೂಲಕ ದಕ್ಷತೆಯ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಒತ್ತಿಹೇಳಿದರು:

"ಬಹುತೇಕ ಎಲ್ಲಾ ಕಂಪ್ಯೂಟಿಂಗ್‌ಗಳಲ್ಲಿ, ಪ್ರಕ್ರಿಯೆಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಿರುವ ಸಂರಚನೆಗಳ ದೊಡ್ಡ ಆಯ್ಕೆ ಇದೆ, ಮತ್ತು ಲೆಕ್ಕಾಚಾರವನ್ನು ನಿರ್ವಹಿಸುವ ಉದ್ದೇಶಕ್ಕಾಗಿ ವಿಭಿನ್ನ ಸಂಪ್ರದಾಯಗಳು ಆಯ್ಕೆಯ ಮೇಲೆ ಪ್ರಭಾವ ಬೀರಬೇಕು. ಲೆಕ್ಕಾಚಾರವನ್ನು ನಿರ್ವಹಿಸಲು ಅಗತ್ಯವಿರುವ ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಕಾರಣವಾಗುವ ಸಂರಚನೆಯನ್ನು ಆರಿಸುವುದು ಅತ್ಯಗತ್ಯ ವಿಷಯವಾಗಿದೆ."

ಆರಂಭಿಕ ಎಲೆಕ್ಟ್ರಾನಿಕ್ ಕಂಪ್ಯೂಟರ್‌ಗಳು ವೇಗ ಮತ್ತು ಮೆಮೊರಿ ಎರಡರಲ್ಲೂ ಬಹಳ ಸೀಮಿತವಾಗಿತ್ತು. ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಸಮಯ-ಮೆಮೊರಿ ಟ್ರೇಡ್-ಆಫ್ ಇದೆ ಎಂದು ಅರಿತುಕೊಂಡಿದೆ, ಇದರಲ್ಲಿ ಒಂದು ಕಾರ್ಯವು ಹೆಚ್ಚಿನ ವೇಗವನ್ನು ಸಾಧಿಸಲು ಹೆಚ್ಚಿನ ಪ್ರಮಾಣದ ಮೆಮೊರಿಯನ್ನು ಬಳಸಬೇಕು ಅಥವಾ ಕಡಿಮೆ ಪ್ರಮಾಣದ ವರ್ಕಿಂಗ್ ಮೆಮೊರಿಯನ್ನು ಬಳಸುವ ನಿಧಾನವಾದ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಬಳಸಬೇಕು. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಲಭ್ಯವಿರುವ ಮೆಮೊರಿಯು ಸಾಕಾಗುವಷ್ಟು ವೇಗವಾದ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಬಳಸಲಾಯಿತು.

ಆಧುನಿಕ ಕಂಪ್ಯೂಟರ್‌ಗಳು ಆ ಆರಂಭಿಕ ಕಂಪ್ಯೂಟರ್‌ಗಳಿಗಿಂತ ಹೆಚ್ಚು ವೇಗವಾಗಿರುತ್ತವೆ ಮತ್ತು ಹೆಚ್ಚು ಮೆಮೊರಿಯನ್ನು ಹೊಂದಿವೆ (ಕಿಲೋಬೈಟ್‌ಗಳ ಬದಲಿಗೆ ಗಿಗಾಬೈಟ್‌ಗಳು). ಆದಾಗ್ಯೂ, ದಕ್ಷತೆಯು ಒಂದು ಪ್ರಮುಖ ಅಂಶವಾಗಿ ಉಳಿದಿದೆ ಎಂದು ಡೊನಾಲ್ಡ್ ಕ್ನೂತ್ ಒತ್ತಿಹೇಳುತ್ತಾರೆ:

"ಸ್ಥಾಪಿತ ಇಂಜಿನಿಯರಿಂಗ್ ವಿಭಾಗಗಳಲ್ಲಿ, 12% ಸುಧಾರಣೆಯನ್ನು ಸುಲಭವಾಗಿ ಸಾಧಿಸಬಹುದು ಮತ್ತು ಅದನ್ನು ಎಂದಿಗೂ ನಿಷೇಧಿಸಲಾಗಿದೆ ಎಂದು ಪರಿಗಣಿಸಲಾಗಿಲ್ಲ, ಮತ್ತು ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ನಲ್ಲಿ ಇದು ನಿಜವಾಗಿರಬೇಕು ಎಂದು ನಾನು ನಂಬುತ್ತೇನೆ."

ಸಮೀಕ್ಷೆ

ಅದರ ಸಂಪನ್ಮೂಲ ಬಳಕೆ (ಅಥವಾ ಸಂಪನ್ಮೂಲ ವೆಚ್ಚ) ಕೆಲವು ಸ್ವೀಕಾರಾರ್ಹ ಮಟ್ಟದಲ್ಲಿ ಅಥವಾ ಕಡಿಮೆ ಇದ್ದರೆ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಸ್ಥೂಲವಾಗಿ ಹೇಳುವುದಾದರೆ, ಇಲ್ಲಿ "ಸ್ವೀಕಾರಾರ್ಹ" ಎಂದರೆ "ಲಭ್ಯವಿರುವ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಅಲ್ಗಾರಿದಮ್ ಸಮಂಜಸವಾದ ಸಮಯದವರೆಗೆ ರನ್ ಆಗುತ್ತದೆ." 1950 ರ ದಶಕದಿಂದಲೂ ಕಂಪ್ಯೂಟರ್‌ಗಳ ಸಂಸ್ಕರಣಾ ಶಕ್ತಿ ಮತ್ತು ಲಭ್ಯವಿರುವ ಮೆಮೊರಿಯಲ್ಲಿ ಗಮನಾರ್ಹ ಹೆಚ್ಚಳ ಕಂಡುಬಂದಿರುವುದರಿಂದ, ಪ್ರಸ್ತುತ "ಸ್ವೀಕಾರಾರ್ಹ ಮಟ್ಟ" 10 ವರ್ಷಗಳ ಹಿಂದೆ ಸಹ ಸ್ವೀಕಾರಾರ್ಹವಾಗಿರಲಿಲ್ಲ.

ಕಂಪ್ಯೂಟರ್ ತಯಾರಕರು ನಿಯತಕಾಲಿಕವಾಗಿ ಹೊಸ ಮಾದರಿಗಳನ್ನು ಬಿಡುಗಡೆ ಮಾಡುತ್ತಾರೆ, ಆಗಾಗ್ಗೆ ಹೆಚ್ಚು ಶಕ್ತಿಯುತವಾದವುಗಳು. ಸಾಫ್ಟ್‌ವೇರ್‌ನ ವೆಚ್ಚವು ಸಾಕಷ್ಟು ಹೆಚ್ಚಿರಬಹುದು, ಆದ್ದರಿಂದ ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ನಿಮ್ಮ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕಂಪ್ಯೂಟರ್‌ಗೆ ಹೊಂದಿಕೆಯಾಗುವ ವೇಗದ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಖರೀದಿಸುವ ಮೂಲಕ ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಪಡೆಯುವುದು ಸುಲಭ ಮತ್ತು ಅಗ್ಗವಾಗಿದೆ.

ಅಲ್ಗಾರಿದಮ್ ಬಳಸುವ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಅಳೆಯಲು ಹಲವು ಮಾರ್ಗಗಳಿವೆ. ಎರಡು ಹೆಚ್ಚು ಬಳಸಿದ ಅಳತೆಗಳೆಂದರೆ ವೇಗ ಮತ್ತು ಮೆಮೊರಿ ಬಳಸಿದ. ಇತರ ಮಾಪನಗಳು ವರ್ಗಾವಣೆ ವೇಗ, ತಾತ್ಕಾಲಿಕ ಡಿಸ್ಕ್ ಬಳಕೆ, ದೀರ್ಘಾವಧಿಯ ಡಿಸ್ಕ್ ಬಳಕೆ, ವಿದ್ಯುತ್ ಬಳಕೆ, ಮಾಲೀಕತ್ವದ ಒಟ್ಟು ವೆಚ್ಚ, ಬಾಹ್ಯ ಸಂಕೇತಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯೆ ಸಮಯ, ಇತ್ಯಾದಿಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಈ ಮಾಪನಗಳಲ್ಲಿ ಹೆಚ್ಚಿನವು ಅಲ್ಗಾರಿದಮ್‌ನ ಇನ್‌ಪುಟ್ ಡೇಟಾದ ಗಾತ್ರವನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ (ಅಂದರೆ, ಡೇಟಾ ಪ್ರಕ್ರಿಯೆಗೆ ಅಗತ್ಯವಿರುವ ಪ್ರಮಾಣಗಳು). ಮಾಪನಗಳು ಡೇಟಾವನ್ನು ಪ್ರಸ್ತುತಪಡಿಸುವ ವಿಧಾನವನ್ನು ಅವಲಂಬಿಸಿರಬಹುದು (ಉದಾಹರಣೆಗೆ, ಕೆಲವು ವಿಂಗಡಣೆ ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಈಗಾಗಲೇ ವಿಂಗಡಿಸಲಾದ ಡೇಟಾದಲ್ಲಿ ಕಳಪೆಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಅಥವಾ ಡೇಟಾವನ್ನು ಹಿಮ್ಮುಖ ಕ್ರಮದಲ್ಲಿ ವಿಂಗಡಿಸಿದಾಗ).

ಪ್ರಾಯೋಗಿಕವಾಗಿ, ಅಗತ್ಯವಿರುವ ನಿಖರತೆ ಮತ್ತು/ಅಥವಾ ವಿಶ್ವಾಸಾರ್ಹತೆಯಂತಹ ಅಲ್ಗಾರಿದಮ್‌ನ ಪರಿಣಾಮಕಾರಿತ್ವದ ಮೇಲೆ ಪ್ರಭಾವ ಬೀರುವ ಇತರ ಅಂಶಗಳಿವೆ. ಕೆಳಗೆ ವಿವರಿಸಿದಂತೆ, ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ವಿಧಾನವು ನಿಜವಾದ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ಗಮನಾರ್ಹ ಪರಿಣಾಮವನ್ನು ಬೀರುತ್ತದೆ, ಆದಾಗ್ಯೂ ಅನುಷ್ಠಾನದ ಹಲವು ಅಂಶಗಳು ಆಪ್ಟಿಮೈಸೇಶನ್ ಸಮಸ್ಯೆಗಳಾಗಿವೆ.

ಸೈದ್ಧಾಂತಿಕ ವಿಶ್ಲೇಷಣೆ

ಕ್ರಮಾವಳಿಗಳ ಸೈದ್ಧಾಂತಿಕ ವಿಶ್ಲೇಷಣೆಯಲ್ಲಿ, ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಅದರ ಲಕ್ಷಣರಹಿತ ನಡವಳಿಕೆಯಲ್ಲಿ ಅಂದಾಜು ಮಾಡುವುದು ಸಾಮಾನ್ಯ ಅಭ್ಯಾಸವಾಗಿದೆ, ಅಂದರೆ, ಇನ್‌ಪುಟ್‌ನ ಗಾತ್ರದ ಕಾರ್ಯವಾಗಿ ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವುದು. ಎನ್ದೊಡ್ಡ O ಸಂಕೇತವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಈ ಅಂದಾಜು ಸಾಮಾನ್ಯವಾಗಿ ದೊಡ್ಡದಕ್ಕೆ ಸಾಕಷ್ಟು ನಿಖರವಾಗಿದೆ ಎನ್, ಆದರೆ ಸಣ್ಣ ಮೌಲ್ಯಗಳಲ್ಲಿ ತಪ್ಪಾದ ತೀರ್ಮಾನಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು ಎನ್(ಹೀಗಾಗಿ, ಬಬಲ್ ವಿಂಗಡಣೆಯನ್ನು ನಿಧಾನವೆಂದು ಪರಿಗಣಿಸಲಾಗಿದೆ, ನೀವು ಕೆಲವು ಅಂಶಗಳನ್ನು ಮಾತ್ರ ವಿಂಗಡಿಸಬೇಕಾದರೆ ತ್ವರಿತ ವಿಂಗಡಣೆಗಿಂತ ವೇಗವಾಗಿರುತ್ತದೆ).

ಹುದ್ದೆ ಹೆಸರು ಉದಾಹರಣೆಗಳು
O(1) (\ಡಿಸ್ಪ್ಲೇಸ್ಟೈಲ್ O(1)\,) ಶಾಶ್ವತ ಸಂಖ್ಯೆ ಸಮ ಅಥವಾ ಬೆಸ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುವುದು. ಸ್ಥಿರ ಗಾತ್ರದ ಲುಕಪ್ ಟೇಬಲ್ ಅನ್ನು ಬಳಸುವುದು. ಒಂದು ಅಂಶವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಸೂಕ್ತವಾದ ಹ್ಯಾಶ್ ಕಾರ್ಯವನ್ನು ಬಳಸುವುದು.
O (ಲಾಗ್ ⁡ n) (\ಡಿಸ್ಪ್ಲೇಸ್ಟೈಲ್ O(\log n)\,) ಲಾಗರಿಥಮಿಕ್ ಬೈನರಿ ಸರ್ಚ್ ಅಥವಾ ಬ್ಯಾಲೆನ್ಸ್ಡ್ ಟ್ರೀ ಬಳಸಿ ವಿಂಗಡಿಸಲಾದ ರಚನೆಯಲ್ಲಿ ಒಂದು ಅಂಶವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು, ದ್ವಿಪದ ರಾಶಿಯಲ್ಲಿನ ಕಾರ್ಯಾಚರಣೆಗಳಂತೆಯೇ.
O(n) (\ಡಿಸ್ಪ್ಲೇಸ್ಟೈಲ್ O(n)\,) ರೇಖೀಯ ವಿಂಗಡಿಸದ ಪಟ್ಟಿ ಅಥವಾ ಅಸಮತೋಲಿತ ಮರದಲ್ಲಿ ಅಂಶವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು (ಕೆಟ್ಟ ಸಂದರ್ಭದಲ್ಲಿ). ಎರಡು ಸೇರ್ಪಡೆ ಎನ್ಎಂಡ್-ಟು-ಎಂಡ್ ಕ್ಯಾರಿ ಬಳಸುವ ಬಿಟ್ ಸಂಖ್ಯೆಗಳು.
O (n log ⁡ n) (\ displaystyle O(n\log n)\,) ಕ್ವಾಸಿಲಿನಿಯರ್, ಲಾಗರಿಥಮಿಕ್ ರೇಖೀಯ ವೇಗದ ಫೋರಿಯರ್ ರೂಪಾಂತರ, ಹೀಪ್‌ಸಾರ್ಟ್, ಕ್ವಿಕ್‌ಸಾರ್ಟ್ (ಅತ್ಯುತ್ತಮ ಮತ್ತು ಸರಾಸರಿ ಪ್ರಕರಣ), ವಿಲೀನ ವಿಂಗಡಣೆಯನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿ
O (n 2) (\ ಡಿಸ್ಪ್ಲೇಸ್ಟೈಲ್ O(n^(2))\,) ಚೌಕ ಎರಡನ್ನು ಗುಣಿಸುವುದು ಎನ್ಸರಳ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಬಳಸುವ ಅಂಕಿ ಸಂಖ್ಯೆಗಳು, ಬಬಲ್ ವಿಂಗಡಣೆ (ಕೆಟ್ಟ ಪ್ರಕರಣ), ಶೆಲ್ ವಿಂಗಡಣೆ, ಕ್ವಿಕ್‌ಸಾರ್ಟ್ (ಕೆಟ್ಟ ಪ್ರಕರಣ), ಆಯ್ಕೆ ವಿಂಗಡಣೆ, ಅಳವಡಿಕೆ ವಿಂಗಡಣೆ
O (c n) , c > 1 (\ displaystyle O(c^(n)),\;c>1) ಘಾತೀಯ ಡೈನಾಮಿಕ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರಯಾಣಿಸುವ ಮಾರಾಟಗಾರರ ಸಮಸ್ಯೆಗೆ (ನಿಖರವಾದ) ಪರಿಹಾರವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು. ಸಮಗ್ರ ಹುಡುಕಾಟವನ್ನು ಬಳಸಿಕೊಂಡು ಎರಡು ತಾರ್ಕಿಕ ಹೇಳಿಕೆಗಳು ಸಮಾನವಾಗಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸುವುದು

ಪರಿಶೀಲನೆ ಪರೀಕ್ಷೆಗಳು: ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಅಳೆಯುವುದು

ಸಾಫ್ಟ್‌ವೇರ್‌ನ ಹೊಸ ಆವೃತ್ತಿಗಳಿಗೆ ಅಥವಾ ಪ್ರತಿಸ್ಪರ್ಧಿ ವ್ಯವಸ್ಥೆಗಳೊಂದಿಗೆ ಹೋಲಿಕೆಯನ್ನು ಒದಗಿಸಲು, ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಸಾಪೇಕ್ಷ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೋಲಿಸಲು ಮಾನದಂಡಗಳನ್ನು ಕೆಲವೊಮ್ಮೆ ಬಳಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಒಂದು ಹೊಸ ವಿಂಗಡಣೆ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿದರೆ, ಅಲ್ಗಾರಿದಮ್ ಇತರರಂತೆ ತಿಳಿದಿರುವ ಡೇಟಾದಲ್ಲಿ ಕನಿಷ್ಠ ಪರಿಣಾಮಕಾರಿಯಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಅದರ ಪೂರ್ವವರ್ತಿಗಳೊಂದಿಗೆ ಹೋಲಿಸಬಹುದು. ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ವಿಷಯದಲ್ಲಿ ಯಾವ ಉತ್ಪನ್ನವು ಅವರ ಅವಶ್ಯಕತೆಗಳಿಗೆ ಸರಿಹೊಂದುತ್ತದೆ ಎಂಬುದನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು ವಿಭಿನ್ನ ತಯಾರಕರ ಉತ್ಪನ್ನಗಳನ್ನು ಹೋಲಿಸಲು ಕಾರ್ಯಕ್ಷಮತೆ ಪರೀಕ್ಷೆಗಳನ್ನು ಬಳಕೆದಾರರು ಬಳಸಬಹುದು.

ಕೆಲವು ಮಾನದಂಡ ಪರೀಕ್ಷೆಗಳು ರಾಯ್ ಲಾಂಗ್‌ಬಾಟಮ್‌ನ PC ಬೆಂಚ್‌ಮಾರ್ಕ್ ಕಲೆಕ್ಷನ್‌ನಂತಹ ವಿವಿಧ ಕಂಪೈಲಿಂಗ್ ಮತ್ತು ಇಂಟರ್‌ಪ್ರಿಟಿಂಗ್ ಭಾಷೆಗಳ ತುಲನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಕಂಪ್ಯೂಟರ್ ಭಾಷಾ ಮಾನದಂಡಗಳ ಆಟಕೆಲವು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳಲ್ಲಿ ವಿಶಿಷ್ಟ ಕಾರ್ಯಗಳ ಅನುಷ್ಠಾನಗಳ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೋಲಿಸುತ್ತದೆ.

ಅನುಷ್ಠಾನದ ಸಮಸ್ಯೆಗಳು

ಅನುಷ್ಠಾನದ ಸಮಸ್ಯೆಗಳು ನಿಜವಾದ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರಬಹುದು. ಇದು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯ ಆಯ್ಕೆ ಮತ್ತು ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ವಾಸ್ತವವಾಗಿ ಕೋಡ್ ಮಾಡಲಾದ ವಿಧಾನ, ಆಯ್ಕೆಮಾಡಿದ ಭಾಷೆಗೆ ಅನುವಾದಕನ ಆಯ್ಕೆ ಅಥವಾ ಬಳಸಿದ ಕಂಪೈಲರ್ ಆಯ್ಕೆಗಳು ಮತ್ತು ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ಸಹ ಒಳಗೊಂಡಿದೆ. ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಇಂಟರ್ಪ್ರಿಟರ್ ಆಗಿ ಅಳವಡಿಸಲಾದ ಭಾಷೆಯು ಕಂಪೈಲರ್ ಆಗಿ ಅಳವಡಿಸಲಾಗಿರುವ ಭಾಷೆಗಿಂತ ಗಮನಾರ್ಹವಾಗಿ ನಿಧಾನವಾಗಿರಬಹುದು.

ಪ್ರೋಗ್ರಾಮರ್ ನಿಯಂತ್ರಣಕ್ಕೆ ಮೀರಿದ ಸಮಯ ಅಥವಾ ಮೆಮೊರಿ ಬಳಕೆಯ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವ ಇತರ ಅಂಶಗಳಿವೆ. ಇದು ಡೇಟಾ ಜೋಡಣೆಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ವಿವರವಾಗಿ, ಕಸ ಸಂಗ್ರಹಣೆ, ಸೂಚನಾ ಮಟ್ಟದ ಸಮಾನಾಂತರತೆ ಮತ್ತು ಸಬ್ರುಟೀನ್ ಕರೆ.

ಕೆಲವು ಪ್ರೊಸೆಸರ್‌ಗಳು ವೆಕ್ಟರ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿವೆ, ಇದು ಒಂದು ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಬಹು ಒಪೆರಾಂಡ್‌ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಅಥವಾ ಸಂಕಲನ ಮಟ್ಟದಲ್ಲಿ ಅಂತಹ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸಲು ಸುಲಭವಾಗಬಹುದು ಅಥವಾ ಇರಬಹುದು. ಅನುಕ್ರಮ ಕಂಪ್ಯೂಟಿಂಗ್‌ಗಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಅಲ್ಗಾರಿದಮ್‌ಗಳಿಗೆ ಸಮಾನಾಂತರ ಕಂಪ್ಯೂಟಿಂಗ್‌ಗೆ ಸರಿಹೊಂದಿಸಲು ಸಂಪೂರ್ಣ ಮರುವಿನ್ಯಾಸ ಅಗತ್ಯವಿರಬಹುದು.

ಪ್ರೊಸೆಸರ್ ಹೊಂದಾಣಿಕೆಯೊಂದಿಗೆ ಮತ್ತೊಂದು ಸಮಸ್ಯೆ ಉದ್ಭವಿಸಬಹುದು, ಅಲ್ಲಿ ಸೂಚನೆಗಳನ್ನು ವಿಭಿನ್ನವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು, ಇದರಿಂದಾಗಿ ಕೆಲವು ಮಾದರಿಗಳಲ್ಲಿನ ಸೂಚನೆಗಳು ಇತರ ಮಾದರಿಗಳಲ್ಲಿ ತುಲನಾತ್ಮಕವಾಗಿ ನಿಧಾನವಾಗಿರಬಹುದು. ಉತ್ತಮಗೊಳಿಸುವ ಕಂಪೈಲರ್‌ಗೆ ಇದು ಸಮಸ್ಯೆಯಾಗಿರಬಹುದು.

ಸಂಪನ್ಮೂಲ ಬಳಕೆಯನ್ನು ಅಳೆಯುವುದು

ಅಳತೆಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರವೇಶದ್ವಾರದ ಗಾತ್ರದ ಕಾರ್ಯವಾಗಿ ವ್ಯಕ್ತಪಡಿಸಲಾಗುತ್ತದೆ ಎನ್.

ಎರಡು ಪ್ರಮುಖ ಆಯಾಮಗಳು:

  • ಸಮಯ: CPU ನಲ್ಲಿ ಅಲ್ಗಾರಿದಮ್ ಎಷ್ಟು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.
  • ಸ್ಮರಣೆ: ಅಲ್ಗಾರಿದಮ್‌ಗೆ ಎಷ್ಟು ವರ್ಕಿಂಗ್ ಮೆಮೊರಿ (ಸಾಮಾನ್ಯವಾಗಿ RAM) ಅಗತ್ಯವಿದೆ. ಇದಕ್ಕೆ ಎರಡು ಅಂಶಗಳಿವೆ: ಕೋಡ್‌ಗಾಗಿ ಮೆಮೊರಿಯ ಪ್ರಮಾಣ ಮತ್ತು ಕೋಡ್ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಡೇಟಾದ ಮೆಮೊರಿಯ ಪ್ರಮಾಣ.

ಬ್ಯಾಟರಿ-ಚಾಲಿತ ಕಂಪ್ಯೂಟರ್‌ಗಳಿಗೆ (ಉದಾಹರಣೆಗೆ ಲ್ಯಾಪ್‌ಟಾಪ್‌ಗಳು) ಅಥವಾ ದೀರ್ಘ/ದೊಡ್ಡ ಲೆಕ್ಕಾಚಾರಗಳಿಗೆ (ಸೂಪರ್‌ಕಂಪ್ಯೂಟರ್‌ಗಳಂತಹವು), ವಿಭಿನ್ನ ರೀತಿಯ ಮಾಪನವು ಆಸಕ್ತಿ ಹೊಂದಿದೆ:

  • ನೇರ ಶಕ್ತಿಯ ಬಳಕೆ: ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಚಲಾಯಿಸಲು ಬೇಕಾದ ಶಕ್ತಿ.
  • ಪರೋಕ್ಷ ಶಕ್ತಿಯ ಬಳಕೆ: ಕೂಲಿಂಗ್, ಲೈಟಿಂಗ್ ಇತ್ಯಾದಿಗಳಿಗೆ ಬೇಕಾದ ಶಕ್ತಿ.

ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಇತರ, ಕಡಿಮೆ ಸಾಮಾನ್ಯ ಅಳತೆಗಳು ಅಗತ್ಯವಿದೆ:

  • ಗೇರ್ ಗಾತ್ರ: ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್ ಸೀಮಿತಗೊಳಿಸುವ ಅಂಶವಾಗಿರಬಹುದು. ವರ್ಗಾವಣೆಯಾದ ಡೇಟಾದ ಪ್ರಮಾಣವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸಂಕೋಚನವನ್ನು ಬಳಸಬಹುದು. ಗ್ರಾಫಿಕ್ ಅಥವಾ ಚಿತ್ರವನ್ನು ಪ್ರದರ್ಶಿಸುವುದು (ಉದಾಹರಣೆಗೆ Google ಲೋಗೋ) ಹತ್ತಾರು ಸಾವಿರ ಬೈಟ್‌ಗಳನ್ನು ವರ್ಗಾಯಿಸಲು ಕಾರಣವಾಗಬಹುದು (ಈ ಸಂದರ್ಭದಲ್ಲಿ 48K). ಇದನ್ನು "ಗೂಗಲ್" ಪದದಲ್ಲಿನ ಆರು ಬೈಟ್‌ಗಳನ್ನು ರವಾನಿಸುವುದಕ್ಕೆ ಹೋಲಿಸಿ.
  • ಬಾಹ್ಯ ಸ್ಮರಣೆ: ಡಿಸ್ಕ್ ಅಥವಾ ಇತರ ಬಾಹ್ಯ ಶೇಖರಣಾ ಸಾಧನದಲ್ಲಿ ಮೆಮೊರಿ ಅಗತ್ಯವಿದೆ. ಈ ಮೆಮೊರಿಯನ್ನು ತಾತ್ಕಾಲಿಕ ಶೇಖರಣೆಗಾಗಿ ಅಥವಾ ಭವಿಷ್ಯದ ಬಳಕೆಗಾಗಿ ಬಳಸಬಹುದು.
  • ಪ್ರತಿಕ್ರಿಯೆ ಸಮಯ: ಬಾಹ್ಯ ಘಟನೆಗಳಿಗೆ ಕಂಪ್ಯೂಟರ್ ತ್ವರಿತವಾಗಿ ಪ್ರತಿಕ್ರಿಯಿಸಬೇಕಾದ ನೈಜ-ಸಮಯದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಈ ಸೆಟ್ಟಿಂಗ್ ವಿಶೇಷವಾಗಿ ಮುಖ್ಯವಾಗಿದೆ.
  • ಮಾಲಿಕತ್ವದ ಒಟ್ಟು ಮೊತ್ತ: ಒಂದೇ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಉದ್ದೇಶಿಸಿದಾಗ ನಿಯತಾಂಕವು ಮುಖ್ಯವಾಗಿದೆ.

ಸಮಯ

ಸಿದ್ಧಾಂತ

ಈ ರೀತಿಯ ಪರೀಕ್ಷೆಯು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆ, ಕಂಪೈಲರ್ ಮತ್ತು ಅದರ ಆಯ್ಕೆಗಳ ಆಯ್ಕೆಯ ಮೇಲೆ ಗಮನಾರ್ಹವಾಗಿ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ, ಆದ್ದರಿಂದ ಹೋಲಿಸಿದ ಕ್ರಮಾವಳಿಗಳನ್ನು ಅದೇ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ಅಳವಡಿಸಬೇಕು.

ಸ್ಮರಣೆ

ಈ ವಿಭಾಗವು ಅಲ್ಗಾರಿದಮ್‌ಗೆ ಅಗತ್ಯವಿರುವ ಮುಖ್ಯ ಮೆಮೊರಿಯ (ಸಾಮಾನ್ಯವಾಗಿ RAM) ಬಳಕೆಯೊಂದಿಗೆ ವ್ಯವಹರಿಸುತ್ತದೆ. ಮೇಲಿನ ಸಮಯದ ವಿಶ್ಲೇಷಣೆಯಂತೆ, ಅಲ್ಗಾರಿದಮ್‌ನ ವಿಶ್ಲೇಷಣೆಯು ಸಾಮಾನ್ಯವಾಗಿ ಬಳಸುತ್ತದೆ ಅಲ್ಗಾರಿದಮ್ನ ಪ್ರಾದೇಶಿಕ ಸಂಕೀರ್ಣತೆಇನ್‌ಪುಟ್ ಗಾತ್ರದ ಕಾರ್ಯವಾಗಿ ಅಗತ್ಯವಿರುವ ರನ್‌ಟೈಮ್ ಮೆಮೊರಿಯನ್ನು ಅಂದಾಜು ಮಾಡಲು. ಫಲಿತಾಂಶವನ್ನು ಸಾಮಾನ್ಯವಾಗಿ "O" ದೊಡ್ಡ ಪದಗಳಲ್ಲಿ ವ್ಯಕ್ತಪಡಿಸಲಾಗುತ್ತದೆ.

ಮೆಮೊರಿ ಬಳಕೆಯ ನಾಲ್ಕು ಅಂಶಗಳಿವೆ:

  • ಅಲ್ಗಾರಿದಮ್ ಕೋಡ್ ಅನ್ನು ಸಂಗ್ರಹಿಸಲು ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯ ಪ್ರಮಾಣ.
  • ಇನ್‌ಪುಟ್ ಡೇಟಾಗೆ ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯ ಪ್ರಮಾಣ.
  • ಯಾವುದೇ ಔಟ್‌ಪುಟ್‌ಗೆ ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯ ಪ್ರಮಾಣ (ವಿಧಗಳಂತಹ ಕೆಲವು ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಇನ್‌ಪುಟ್ ಅನ್ನು ಆಗಾಗ್ಗೆ ಮರುಹೊಂದಿಸುತ್ತವೆ ಮತ್ತು ಔಟ್‌ಪುಟ್‌ಗೆ ಹೆಚ್ಚುವರಿ ಮೆಮೊರಿ ಅಗತ್ಯವಿಲ್ಲ).
  • ಗಣನೆಯ ಸಮಯದಲ್ಲಿ ಕಂಪ್ಯೂಟೇಶನಲ್ ಪ್ರಕ್ರಿಯೆಗೆ ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯ ಪ್ರಮಾಣ (ಇದು ಹೆಸರಿಸಲಾದ ವೇರಿಯೇಬಲ್‌ಗಳು ಮತ್ತು ಸಬ್‌ರುಟೀನ್ ಕರೆಗಳಿಗೆ ಅಗತ್ಯವಿರುವ ಯಾವುದೇ ಸ್ಟಾಕ್ ಜಾಗವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಇದು ಪುನರಾವರ್ತನೆಯನ್ನು ಬಳಸುವಾಗ ಗಮನಾರ್ಹವಾಗಿರುತ್ತದೆ).

ಆರಂಭಿಕ ಎಲೆಕ್ಟ್ರಾನಿಕ್ ಕಂಪ್ಯೂಟರ್‌ಗಳು ಮತ್ತು ಹೋಮ್ ಕಂಪ್ಯೂಟರ್‌ಗಳು ತುಲನಾತ್ಮಕವಾಗಿ ಕಡಿಮೆ ಕೆಲಸ ಮಾಡುವ ಮೆಮೊರಿ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೊಂದಿದ್ದವು. ಹೀಗಾಗಿ, 1949 ರಲ್ಲಿ EDSAC 1024 17-ಬಿಟ್ ಪದಗಳ ಗರಿಷ್ಠ ಕಾರ್ಯ ಸ್ಮರಣೆಯನ್ನು ಹೊಂದಿತ್ತು, ಮತ್ತು 1980 ರಲ್ಲಿ ಸಿಂಕ್ಲೇರ್ ZX80 1024 ಬೈಟ್‌ಗಳ ವರ್ಕಿಂಗ್ ಮೆಮೊರಿಯೊಂದಿಗೆ ಬಿಡುಗಡೆಯಾಯಿತು.

ಆಧುನಿಕ ಕಂಪ್ಯೂಟರ್‌ಗಳು ತುಲನಾತ್ಮಕವಾಗಿ ದೊಡ್ಡ ಪ್ರಮಾಣದ ಮೆಮೊರಿಯನ್ನು ಹೊಂದಿರಬಹುದು (ಬಹುಶಃ ಗಿಗಾಬೈಟ್‌ಗಳು), ಆದ್ದರಿಂದ ಅಲ್ಗಾರಿದಮ್ ಬಳಸುವ ಮೆಮೊರಿಯನ್ನು ಕೆಲವು ನಿರ್ದಿಷ್ಟ ಪ್ರಮಾಣದ ಮೆಮೊರಿಗೆ ಸಂಕುಚಿತಗೊಳಿಸುವುದು ಮೊದಲಿಗಿಂತ ಕಡಿಮೆ ಅಗತ್ಯವಿದೆ. ಆದಾಗ್ಯೂ, ಮೆಮೊರಿಯ ಮೂರು ವಿಭಿನ್ನ ವರ್ಗಗಳ ಅಸ್ತಿತ್ವವು ಗಮನಾರ್ಹವಾಗಿದೆ:

  • ಸಂಗ್ರಹ (ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಥಿರ RAM) - CPU ಗೆ ಹೋಲಿಸಬಹುದಾದ ವೇಗದಲ್ಲಿ ಚಲಿಸುತ್ತದೆ
  • ಮುಖ್ಯ ಭೌತಿಕ ಮೆಮೊರಿ (ಸಾಮಾನ್ಯವಾಗಿ ಡೈನಾಮಿಕ್ RAM) - CPU ಗಿಂತ ಸ್ವಲ್ಪ ನಿಧಾನವಾಗಿ ಚಲಿಸುತ್ತದೆ
  • ವರ್ಚುವಲ್ ಮೆಮೊರಿ (ಹೆಚ್ಚಾಗಿ ಡಿಸ್ಕ್ನಲ್ಲಿ) - ದೊಡ್ಡ ಮೆಮೊರಿಯ ಭ್ರಮೆಯನ್ನು ನೀಡುತ್ತದೆ, ಆದರೆ RAM ಗಿಂತ ಸಾವಿರಾರು ಪಟ್ಟು ನಿಧಾನವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

ಕಂಪ್ಯೂಟರ್‌ನ ಕ್ಯಾಶ್‌ಗೆ ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯು ಹೊಂದಿಕೊಳ್ಳುವ ಅಲ್ಗಾರಿದಮ್ ಮುಖ್ಯ ಮೆಮೊರಿಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಅಲ್ಗಾರಿದಮ್‌ಗಿಂತ ಹೆಚ್ಚು ವೇಗವಾಗಿರುತ್ತದೆ, ಇದು ವರ್ಚುವಲ್ ಜಾಗವನ್ನು ಬಳಸುವ ಅಲ್ಗಾರಿದಮ್‌ಗಿಂತ ಹೆಚ್ಚು ವೇಗವಾಗಿರುತ್ತದೆ. ಕೆಲವು ಸಿಸ್ಟಮ್‌ಗಳು ಮೂರು ಹಂತದ ಸಂಗ್ರಹವನ್ನು ಹೊಂದಿರುವುದು ವಿಷಯಗಳನ್ನು ಸಂಕೀರ್ಣಗೊಳಿಸುವುದು. ವಿಭಿನ್ನ ವ್ಯವಸ್ಥೆಗಳು ವಿಭಿನ್ನ ಪ್ರಮಾಣದ ಈ ರೀತಿಯ ಮೆಮೊರಿಯನ್ನು ಹೊಂದಿವೆ, ಆದ್ದರಿಂದ ಅಲ್ಗಾರಿದಮ್‌ನಲ್ಲಿ ಮೆಮೊರಿ ಪರಿಣಾಮವು ಒಂದು ಸಿಸ್ಟಮ್‌ನಿಂದ ಇನ್ನೊಂದಕ್ಕೆ ಗಮನಾರ್ಹವಾಗಿ ಬದಲಾಗಬಹುದು.

ಎಲೆಕ್ಟ್ರಾನಿಕ್ ಕಂಪ್ಯೂಟಿಂಗ್‌ನ ಆರಂಭಿಕ ದಿನಗಳಲ್ಲಿ, ಅಲ್ಗಾರಿದಮ್ ಮತ್ತು ಅದರ ಡೇಟಾವು ಮುಖ್ಯ ಮೆಮೊರಿಗೆ ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ, ಅದನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ. ಈ ದಿನಗಳಲ್ಲಿ, ವರ್ಚುವಲ್ ಮೆಮೊರಿಯನ್ನು ಬಳಸುವುದು ಬೃಹತ್ ಮೆಮೊರಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ, ಆದರೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಚ್ಚದಲ್ಲಿ. ಅಲ್ಗಾರಿದಮ್ ಮತ್ತು ಅದರ ಡೇಟಾ ಸಂಗ್ರಹದಲ್ಲಿ ಸರಿಹೊಂದಿದರೆ, ಹೆಚ್ಚಿನ ವೇಗವನ್ನು ಸಾಧಿಸಬಹುದು, ಆದ್ದರಿಂದ ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಸಂಗ್ರಹಕ್ಕೆ ಸಂಪೂರ್ಣವಾಗಿ ಹೊಂದಿಕೊಳ್ಳದ ಅಲ್ಗಾರಿದಮ್, ಆದರೆ ಒದಗಿಸುತ್ತದೆ ಲಿಂಕ್‌ಗಳ ಪ್ರದೇಶ, ತುಲನಾತ್ಮಕವಾಗಿ ತ್ವರಿತವಾಗಿ ಕೆಲಸ ಮಾಡಬಹುದು.

ಪರಿಣಾಮಕಾರಿ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಉದಾಹರಣೆಗಳು

ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ನ ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯ ಟೀಕೆ

ಕಂಪ್ಯೂಟರ್‌ಗಳು ವೇಗವಾಗುವುದಕ್ಕಿಂತ ಪ್ರೋಗ್ರಾಂಗಳು ಹೆಚ್ಚು ವೇಗವಾಗಿ ನಿಧಾನವಾಗುತ್ತಿವೆ.

ಮೇ ಹೇಳುತ್ತದೆ:

ವ್ಯಾಪಕವಾದ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ, ಸೂಚನೆಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯು ಬ್ಯಾಟರಿ ಅವಧಿಯನ್ನು ದ್ವಿಗುಣಗೊಳಿಸಬಹುದು ಮತ್ತು ದೊಡ್ಡ ಡೇಟಾವು ಉತ್ತಮ ಅಲ್ಗಾರಿದಮ್‌ಗಳಿಗೆ ಅವಕಾಶವನ್ನು ಒದಗಿಸುತ್ತದೆ: N x N ನಿಂದ N x ಲಾಗ್(N) ಗೆ ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು ದೊಡ್ಡ N ಗೆ ಬಲವಾದ ಪರಿಣಾಮವನ್ನು ಬೀರುತ್ತದೆ... N ಗಾಗಿ =30 ಬಿಲಿಯನ್, ಈ ಬದಲಾವಣೆಗಳು 50 ವರ್ಷಗಳ ತಾಂತ್ರಿಕ ಸುಧಾರಣೆಗಳನ್ನು ಹೋಲುತ್ತವೆ.

ಅತ್ಯುತ್ತಮ ಅಲ್ಗಾರಿದಮ್‌ಗಾಗಿ ಸ್ಪರ್ಧೆ

ಕೆಳಗಿನ ಸ್ಪರ್ಧೆಗಳು ಅತ್ಯುತ್ತಮ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಭಾಗವಹಿಸುವಿಕೆಯನ್ನು ಆಹ್ವಾನಿಸುತ್ತವೆ, ಅದರ ಗುಣಮಟ್ಟದ ಮಾನದಂಡಗಳನ್ನು ನ್ಯಾಯಾಧೀಶರು ನಿರ್ಧರಿಸುತ್ತಾರೆ:

ಸಹ ನೋಡಿ

  • ಅಂಕಗಣಿತದ ಕೋಡಿಂಗ್ ಒಂದು ರೀತಿಯ ಎಂಟ್ರೊಪಿ ಕೋಡಿಂಗ್ ಆಗಿದೆ ವೇರಿಯಬಲ್ ಕೋಡ್ ಉದ್ದದೊಂದಿಗೆಸಮರ್ಥ ಡೇಟಾ ಕಂಪ್ರೆಷನ್‌ಗಾಗಿ
  • ಸಹಾಯಕ ರಚನೆಯು ಡೇಟಾ ರಚನೆಯಾಗಿದ್ದು ಅದನ್ನು ಬಳಸಿದಾಗ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮಾಡಬಹುದು ಪ್ಯಾಟ್ರಿಸಿಯಾ ಮರಗಳುಅಥವಾ ಜೂಡಿ ಅರೇಗಳು
  • ಕಾರ್ಯಕ್ಷಮತೆ ಪರೀಕ್ಷೆ - ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ತುಲನಾತ್ಮಕ ಮರಣದಂಡನೆ ಸಮಯವನ್ನು ಅಳೆಯುವ ವಿಧಾನ
  • ಅತ್ಯುತ್ತಮ, ಕೆಟ್ಟ ಮತ್ತು ಸರಾಸರಿ ಪ್ರಕರಣ- ಮೂರು ಸನ್ನಿವೇಶಗಳಿಗಾಗಿ ಮರಣದಂಡನೆಯ ಸಮಯವನ್ನು ಅಂದಾಜು ಮಾಡಲು ಸಂಪ್ರದಾಯಗಳು
  • ಬೈನರಿ ಹುಡುಕಾಟವು ವಿಂಗಡಿಸಲಾದ ಪಟ್ಟಿಯನ್ನು ಹುಡುಕಲು ಸರಳ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ತಂತ್ರವಾಗಿದೆ
  • ಶಾಖೆಯ ಟೇಬಲ್

ಉಪನ್ಯಾಸದ ಗುರಿಗಳು ಮತ್ತು ಉದ್ದೇಶಗಳು: ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಮತ್ತು ಡೇಟಾ ರಚನೆಗಳ ಸಂಕೀರ್ಣತೆ ಮತ್ತು ದಕ್ಷತೆಯನ್ನು ವಿಶ್ಲೇಷಿಸುವ ವಿಧಾನಗಳ ಪರಿಚಯ

ಮುಖ್ಯ ಸಮಸ್ಯೆಗಳು: ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಪರಿಣಾಮಕಾರಿತ್ವದ ಪ್ರಾಯೋಗಿಕ ಮತ್ತು ವಿಶ್ಲೇಷಣಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆ.

N. ವಿರ್ತ್ ಅವರ ಶ್ರೇಷ್ಠ ಹೇಳಿಕೆ "ಒಳ್ಳೆಯ ಕಾರ್ಯಕ್ರಮವು ಚೆನ್ನಾಗಿ ಯೋಚಿಸಿದ ಅಲ್ಗಾರಿದಮ್ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಡೇಟಾ ರಚನೆಗಳ ಏಕತೆಯಾಗಿದೆ."

ಅಲ್ಗಾರಿದಮ್ ವಿಶ್ಲೇಷಣೆ
"ಅಲ್ಗಾರಿದಮ್ ಮತ್ತು ಡೇಟಾ ರಚನೆಗಳ" ಪರಿಕಲ್ಪನೆಗಳು ಕಂಪ್ಯೂಟರ್ ತಂತ್ರಜ್ಞಾನದ ಕ್ಷೇತ್ರಕ್ಕೆ ಕೇಂದ್ರವಾಗಿದೆ, ಆದರೆ ಕೆಲವು ಡೇಟಾ ರಚನೆಗಳು ಮತ್ತು ಕ್ರಮಾವಳಿಗಳನ್ನು "ಉತ್ತಮ-ಗುಣಮಟ್ಟದ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ" ಎಂದು ಕರೆಯಲು, ಅವುಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಲು ನಿಖರವಾದ ತಂತ್ರಗಳನ್ನು ಬಳಸಬೇಕು. ನೈಸರ್ಗಿಕ ಗುಣಮಟ್ಟದ ಮಾನದಂಡವಾಗಿ, ಮೊದಲನೆಯದಾಗಿ, ಮರಣದಂಡನೆಯ ಸಮಯವನ್ನು ಹೈಲೈಟ್ ಮಾಡುವುದು ಸಹಜ. ಮೆಮೊರಿ ಮತ್ತು ಡಿಸ್ಕ್ ಸ್ಪೇಸ್ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಖರ್ಚುಮಾಡುವುದು, ಡೇಟಾ ಪ್ರವೇಶದ ವೇಗ (ಡೇಟಾ ರಚನೆಯ ದಕ್ಷತೆ) ಸಹ ಮುಖ್ಯವಾಗಿದೆ. ನಿರ್ಧಾರಗಳ ವಿಶ್ವಾಸಾರ್ಹತೆ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹತೆ, ಅವುಗಳ ಸ್ಥಿರತೆಗೆ ಸಹ ಗಮನ ನೀಡಬೇಕು.

ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟ ಅನುಷ್ಠಾನಕ್ಕೆ ಜೋಡಿಸಬಾರದು. ಬಳಸಿದ ವಿವಿಧ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಪರಿಕರಗಳ ಕಾರಣದಿಂದಾಗಿ, ಅನುಷ್ಠಾನದಲ್ಲಿ ವಿಭಿನ್ನವಾಗಿರುವ ಅಲ್ಗಾರಿದಮ್‌ಗಳು ದಕ್ಷತೆಯಲ್ಲಿ ಭಿನ್ನವಾಗಿರುವ ಫಲಿತಾಂಶಗಳನ್ನು ಉಂಟುಮಾಡಬಹುದು.

ಡೇಟಾ ರಚನೆಯ ಮೇಲೆ ಅಲ್ಗಾರಿದಮ್ ಅಥವಾ ಕಾರ್ಯಾಚರಣೆಯ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವು ನಿಯಮದಂತೆ, ಹಲವಾರು ಅಂಶಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ. ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಸಮಯವನ್ನು ನಿರ್ಧರಿಸಲು ಸರಳವಾದ ಮಾರ್ಗವೆಂದರೆ ಅಲ್ಗಾರಿದಮ್ ರನ್ಗಳ ಮೊದಲು ಮತ್ತು ನಂತರದ ಸಮಯವನ್ನು ಅಳೆಯುವುದು.

ಆದಾಗ್ಯೂ, ಸಮಯವನ್ನು ಅಂದಾಜು ಮಾಡುವ ಈ ವಿಧಾನವು ನಿಖರವಾಗಿಲ್ಲ ಎಂದು ನೆನಪಿನಲ್ಲಿಡಬೇಕು; ಮೊದಲನೆಯದಾಗಿ, ಆಧುನಿಕ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಂಗಳಲ್ಲಿ ಹಲವಾರು ಕಾರ್ಯಗಳನ್ನು ಸಮಾನಾಂತರವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು ಮತ್ತು ಪರೀಕ್ಷಾ ಪ್ರಕರಣದ ಮರಣದಂಡನೆಯನ್ನು ಇತರ ಪ್ರಕಾರಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸಬಹುದು ಎಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು. ಚಟುವಟಿಕೆಯ. ಇದಲ್ಲದೆ, ಪುನರಾವರ್ತಿತ ಪರೀಕ್ಷೆಗಳನ್ನು ನಡೆಸುವುದರ ಮೂಲಕ ಮಾತ್ರ ಸ್ಥಿರ ಅವಲಂಬನೆಯನ್ನು ಸಾಧಿಸಬಹುದು ಎಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು, ಇಲ್ಲದಿದ್ದರೆ, ಆರಂಭಿಕ ಡೇಟಾದ ನಿಶ್ಚಿತಗಳು ಮತ್ತು ಇತರ ಅಂಶಗಳ ಆಧಾರದ ಮೇಲೆ ಯಾದೃಚ್ಛಿಕ ಅಂಶಗಳ ಕೆಲಸದ ಅಂತಿಮ ಫಲಿತಾಂಶದ ಮೇಲಿನ ಪ್ರಭಾವದಿಂದಾಗಿ ಅಲ್ಗಾರಿದಮ್‌ನ ಸಮಯವು ಯಾದೃಚ್ಛಿಕ ವೇರಿಯಬಲ್ ಆಗಿರುತ್ತದೆ. ಸಂಶೋಧನೆ ನಡೆಸುವಾಗ, ವಿಭಿನ್ನ ಆರಂಭಿಕ ಡೇಟಾದೊಂದಿಗೆ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಚಲಾಯಿಸುವುದು ಅವಶ್ಯಕ; ಸಾಮಾನ್ಯವಾಗಿ ಡೇಟಾವನ್ನು ಸ್ವತಃ ಯಾದೃಚ್ಛಿಕವಾಗಿ ರಚಿಸಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ವಿಭಿನ್ನ ಸೆಟ್ ಡೇಟಾದ ಕಾರಣ, ಖರ್ಚು ಮಾಡಿದ ಸಮಯವೂ ಭಿನ್ನವಾಗಿರುತ್ತದೆ.

ಅಂದಾಜುಗಳ ಗುಂಪನ್ನು ಪಡೆದ ನಂತರ, ಗ್ರಾಫ್ ಅನ್ನು ನಿರ್ಮಿಸಬಹುದು ಮತ್ತು ಅಂದಾಜು ಮಾಡಬಹುದು.

ಕ್ಷುಲ್ಲಕವಲ್ಲದ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಬಳಸುವಾಗ ಅಂತಹ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಯಾವಾಗಲೂ ಬಳಸಬೇಕು; ಇದು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವ ಶಿಫಾರಸುಗೆ ಹೋಲುತ್ತದೆ, ಡೀಬಗ್ ಮಾಡಲು ಹಲವಾರು ಡಜನ್ ದಾಖಲೆಗಳು ಅಥವಾ ಅಂಶಗಳ ಟ್ರಯಲ್ ಸೆಟ್ ಅಲ್ಲ, ಆದರೆ ಸಂಪೂರ್ಣ ನೈಜ ಡೇಟಾ, ಇದು ಮಾರ್ಪಾಡು ಅಥವಾ ಮಾರ್ಪಾಡುಗಳನ್ನು ತಪ್ಪಿಸುತ್ತದೆ. ಅಲ್ಗಾರಿದಮ್ ಅಥವಾ ಸ್ಟ್ರಕ್ಚರ್ಸ್ ದತ್ತಾಂಶವು ಅಪ್ರಾಯೋಗಿಕವೆಂದು ಸಾಬೀತುಪಡಿಸಿದರೆ ಅದರ ಸಂಪೂರ್ಣ ಮರುನಿರ್ಮಾಣ. ಪ್ರಾಯೋಗಿಕ ಫಲಿತಾಂಶಗಳ ಗುಂಪನ್ನು ಹೊಂದಿರುವ ನೀವು ಇಂಟರ್ಪೋಲೇಶನ್ ಮತ್ತು ಎಕ್ಸ್ಟ್ರಾಪೋಲೇಶನ್ ಅನ್ನು ನಿರ್ವಹಿಸಬಹುದು ಮತ್ತು ನೈಜ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ಅಲ್ಗಾರಿದಮ್ನ ನಡವಳಿಕೆಯನ್ನು ನಿರ್ಧರಿಸಬಹುದು.

ಸಾಮಾನ್ಯವಾಗಿ, ಮೂಲ ಡೇಟಾದ ಗಾತ್ರವು ಹೆಚ್ಚಾದಂತೆ ಅಲ್ಗಾರಿದಮ್ ಅಥವಾ ಡೇಟಾ ರಚನೆಯ ವಿಧಾನದ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವು ಹೆಚ್ಚಾಗುತ್ತದೆ ಎಂದು ನಾವು ಹೇಳಬಹುದು, ಆದರೂ ಇದು ಗಾತ್ರವು ಸಮಾನವಾಗಿದ್ದರೂ ಸಹ ಡೇಟಾದ ಪ್ರಕಾರವನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವು ಹಾರ್ಡ್‌ವೇರ್ (ಪ್ರೊಸೆಸರ್, ಗಡಿಯಾರ ಆವರ್ತನ, ಮೆಮೊರಿ ಗಾತ್ರ, ಡಿಸ್ಕ್ ಸ್ಥಳ, ಇತ್ಯಾದಿ) ಮತ್ತು ಸಾಫ್ಟ್‌ವೇರ್ (ಆಪರೇಟಿಂಗ್ ಪರಿಸರ, ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆ, ಕಂಪೈಲರ್, ಇಂಟರ್ಪ್ರಿಟರ್, ಇತ್ಯಾದಿ) ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ, ಅದರೊಂದಿಗೆ ಅನುಷ್ಠಾನ, ಸಂಕಲನವನ್ನು ಕೈಗೊಳ್ಳಲಾಗುತ್ತದೆ ಮತ್ತು ಅಲ್ಗಾರಿದಮ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆ. ಉದಾಹರಣೆಗೆ, ಎಲ್ಲಾ ಇತರ ವಿಷಯಗಳು ಸಮಾನವಾಗಿರುವುದರಿಂದ, ಹೆಚ್ಚು ಶಕ್ತಿಯುತವಾದ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಬಳಸುವಾಗ ಅಥವಾ ವರ್ಚುವಲ್ ಗಣಕದಿಂದ ಅದರ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಗೆ ಹೋಲಿಸಿದರೆ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಯಂತ್ರ ಕೋಡ್‌ನಲ್ಲಿ ಪ್ರೋಗ್ರಾಂ ಆಗಿ ಬರೆಯುವಾಗ ನಿರ್ದಿಷ್ಟ ಪ್ರಮಾಣದ ಮೂಲ ಡೇಟಾಕ್ಕಾಗಿ ಅಲ್ಗಾರಿದಮ್‌ನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯ ಕಡಿಮೆ ಇರುತ್ತದೆ. ಅದನ್ನು ಬೈಟ್‌ಕೋಡ್‌ಗಳಾಗಿ ಅರ್ಥೈಸಿಕೊಳ್ಳುವುದು.

ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಪ್ರಾಯೋಗಿಕ ವಿಶ್ಲೇಷಣೆಯನ್ನು ನಡೆಸುವುದು ನಿಜವಾಗಿಯೂ ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲ ಎಂಬುದು ತೀರ್ಮಾನವಾಗಿದೆ. ಮುಖ್ಯ ಅನಾನುಕೂಲಗಳನ್ನು ಈ ಕೆಳಗಿನ ಮೂರು ಅಂಶಗಳಿಗೆ ಕಡಿಮೆ ಮಾಡಬಹುದು:

1) ಸೀಮಿತ ಆರಂಭಿಕ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ಮಾತ್ರ ಪ್ರಯೋಗಗಳನ್ನು ಕೈಗೊಳ್ಳಬಹುದು; ಮತ್ತೊಂದು ಸೆಟ್ ಬಳಸಿ ಪಡೆದ ಫಲಿತಾಂಶಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುವುದಿಲ್ಲ.

2) ಎರಡು ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ಹೋಲಿಸಲು, ಅವುಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವನ್ನು ನಿರ್ಧರಿಸಲು ಪ್ರಯೋಗಗಳನ್ನು ಒಂದೇ ಹಾರ್ಡ್‌ವೇರ್ ಮತ್ತು ಸಾಫ್ಟ್‌ವೇರ್‌ನಲ್ಲಿ ನಡೆಸುವುದು ಅವಶ್ಯಕ;
3) ಅಲ್ಗಾರಿದಮ್ನ ಮರಣದಂಡನೆಯ ಸಮಯವನ್ನು ಪ್ರಾಯೋಗಿಕವಾಗಿ ಅಧ್ಯಯನ ಮಾಡಲು, ಅದರ ಅನುಷ್ಠಾನ ಮತ್ತು ಮರಣದಂಡನೆಯನ್ನು ಕೈಗೊಳ್ಳುವುದು ಅವಶ್ಯಕ.

ಹೀಗಾಗಿ, ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಸಾಮಾನ್ಯ ವಿಶ್ಲೇಷಣಾ ವಿಧಾನಗಳನ್ನು ಬಳಸುವ ಅಗತ್ಯಕ್ಕೆ ನಾವು ಬರುತ್ತೇವೆ, ಅದು ಅನುಮತಿಸುತ್ತದೆ:

1) ವಿವಿಧ ರೀತಿಯ ಇನ್ಪುಟ್ ಡೇಟಾವನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ;

2) ಹಾರ್ಡ್‌ವೇರ್ ಮತ್ತು ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ಲೆಕ್ಕಿಸದೆಯೇ ಯಾವುದೇ ಎರಡು ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಸಾಪೇಕ್ಷ ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ;

3) ಅಲ್ಗಾರಿದಮ್ನ ವಿವರಣೆಯ ಪ್ರಕಾರ ಅದರ ನೇರ ಅನುಷ್ಠಾನ ಅಥವಾ ಪ್ರಯೋಗಗಳಿಲ್ಲದೆ ಕೈಗೊಳ್ಳಬಹುದು.

ಸಾಮಾನ್ಯ ವಿಶ್ಲೇಷಣೆಯ ಮೂಲತತ್ವವೆಂದರೆ f=f(n1, .., nm) ಕಾರ್ಯವನ್ನು ನಿರ್ದಿಷ್ಟ ಅಲ್ಗಾರಿದಮ್‌ಗೆ ನಿಗದಿಪಡಿಸಲಾಗಿದೆ. ಅದರ ಸರಳ ರೂಪದಲ್ಲಿ, ಇದು ಒಂದು ವೇರಿಯೇಬಲ್ n1 ನ ಕಾರ್ಯವಾಗಿದೆ - ಇನ್ಪುಟ್ ಡೇಟಾದ ಮೊತ್ತ. ಆದಾಗ್ಯೂ, ಇತರ ಅಸ್ಥಿರಗಳು ಇರಬಹುದು - ಉದಾಹರಣೆಗೆ, ಲೆಕ್ಕಾಚಾರದ ನಿಖರತೆ ಅಥವಾ ಅದರ ವಿಶ್ವಾಸಾರ್ಹತೆ. ಆದ್ದರಿಂದ, ದೊಡ್ಡ ಸಂಖ್ಯೆಗಳ ಸಂದರ್ಭದಲ್ಲಿ ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಂಖ್ಯೆಯು ಅವಿಭಾಜ್ಯವಾಗಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸಲು (ಬೈನರಿ ಪ್ರಾತಿನಿಧ್ಯದ ಉದ್ದವು 200 ಬಿಟ್‌ಗಳಿಗಿಂತ ಹೆಚ್ಚು), ಸಂಭವನೀಯ ವಿಧಾನವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ, ಅದರ ವಿಶ್ವಾಸಾರ್ಹತೆ ಬದಲಾಗಬಹುದು. ಅತ್ಯಂತ ಪ್ರಸಿದ್ಧ ಕಾರ್ಯಗಳೆಂದರೆ ರೇಖೀಯ, ಶಕ್ತಿ ಮತ್ತು ಲಾಗರಿಥಮಿಕ್. ಆದ್ದರಿಂದ, ಅವರೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಮೂಲಭೂತ ಅಂಶಗಳನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಲು ನೀವು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬೇಕು.

ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ, ಮೊದಲ ಹಂತವು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯಲ್ಲ, ಆದರೆ ಮಾನವ ಭಾಷೆಯಲ್ಲಿ ವಿವರಣೆಯನ್ನು ಬಳಸುತ್ತದೆ. ಅಂತಹ ವಿವರಣೆಗಳು ಕಾರ್ಯಕ್ರಮಗಳಲ್ಲ, ಆದರೆ ಅದೇ ಸಮಯದಲ್ಲಿ ಅವು ಸಾಮಾನ್ಯ ಪಠ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚು ರಚನೆಯಾಗಿರುತ್ತವೆ. ನಿರ್ದಿಷ್ಟವಾಗಿ ಹೇಳುವುದಾದರೆ, "ಉನ್ನತ ಮಟ್ಟದ" ವಿವರಣೆಗಳು ನೈಸರ್ಗಿಕ ಭಾಷೆ ಮತ್ತು ಸಾಮಾನ್ಯ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷಾ ರಚನೆಗಳನ್ನು ಸಂಯೋಜಿಸುತ್ತವೆ, ಅವುಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಇನ್ನೂ ತಿಳಿವಳಿಕೆ ನೀಡುತ್ತವೆ. ಅಂತಹ ವಿವರಣೆಗಳು ದತ್ತಾಂಶ ರಚನೆ ಅಥವಾ ಅಲ್ಗಾರಿದಮ್‌ನ ಉನ್ನತ ಮಟ್ಟದ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಸುಗಮಗೊಳಿಸುತ್ತವೆ. ಅಂತಹ ವಿವರಣೆಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಸೂಡೊಕೋಡ್ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ನಿರ್ದಿಷ್ಟ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯಲ್ಲಿ ಕೋಡ್‌ಗಿಂತ ಸೂಡೊಕೋಡ್ ವಿಶ್ಲೇಷಣೆಗೆ ಹೆಚ್ಚು ಉಪಯುಕ್ತವಾಗಿದೆ ಎಂಬುದನ್ನು ಸಹ ಗಮನಿಸಬೇಕು.

ಕೆಲವೊಮ್ಮೆ ನಿರ್ದಿಷ್ಟ ಡೇಟಾ ರಚನೆ ಅಥವಾ ಅಲ್ಗಾರಿದಮ್‌ಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ಕೆಲವು ಹೇಳಿಕೆಗಳನ್ನು ಸಾಬೀತುಪಡಿಸುವ ಅವಶ್ಯಕತೆಯಿದೆ. ಉದಾಹರಣೆಗೆ, ಅಲ್ಗಾರಿದಮ್ನ ಮರಣದಂಡನೆಯ ಸರಿಯಾದತೆ ಮತ್ತು ವೇಗವನ್ನು ನೀವು ಪ್ರದರ್ಶಿಸಬೇಕಾಗಿದೆ. ಹೇಳಿಕೆಗಳನ್ನು ಕಟ್ಟುನಿಟ್ಟಾಗಿ ಸಾಬೀತುಪಡಿಸಲು, ಗಣಿತದ ಭಾಷೆಯನ್ನು ಬಳಸುವುದು ಅವಶ್ಯಕ, ಅದು ಹೇಳಿಕೆಗಳ ಪುರಾವೆ ಅಥವಾ ಸಮರ್ಥನೆಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಹಲವಾರು ಸರಳ ಮಾರ್ಗಗಳಿವೆ.

ಕೆಲವೊಮ್ಮೆ ಹೇಳಿಕೆಗಳನ್ನು ಸಾಮಾನ್ಯೀಕರಿಸಿದ ರೂಪದಲ್ಲಿ ಬರೆಯಲಾಗುತ್ತದೆ: "ಸೆಟ್ s ಒಂದು ಅಂಶವನ್ನು ಹೊಂದಿದೆ x ಜೊತೆಗೆ ಆಸ್ತಿ v. ಈ ಹೇಳಿಕೆಯನ್ನು ಸಾಬೀತುಪಡಿಸಲು, ಈ ಆಸ್ತಿಯನ್ನು ಹೊಂದಿರುವ s ಗೆ x "ಸೇರಿದೆ" ಎಂಬ ಉದಾಹರಣೆಯನ್ನು ನೀಡಿದರೆ ಸಾಕು. ಅಂತಹ ಸಾಮಾನ್ಯೀಕರಿಸಿದ ರೂಪದಲ್ಲಿ, ನಿಯಮದಂತೆ, ಅಸಂಭವವಾದ ಹೇಳಿಕೆಗಳನ್ನು ಬರೆಯಲಾಗುತ್ತದೆ, ಉದಾಹರಣೆಗೆ: "ಸೆಟ್ s ನ ಪ್ರತಿಯೊಂದು ಅಂಶವು x ಆಸ್ತಿ P ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ." ಈ ಹೇಳಿಕೆಯ ತಪ್ಪನ್ನು ಸಾಬೀತುಪಡಿಸಲು, ಸರಳವಾಗಿ ಒಂದು ಉದಾಹರಣೆಯನ್ನು ನೀಡಲು ಸಾಕು: x "ಸೇರಿದೆ" s ಗೆ, ಇದು P ಆಸ್ತಿಯನ್ನು ಹೊಂದಿಲ್ಲ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಅಂಶ x ಪ್ರತಿ-ಉದಾಹರಣೆಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

ಉದಾಹರಣೆ: n 1 ಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಪೂರ್ಣಾಂಕವಾಗಿದ್ದರೆ 2^n - 1 ರೂಪದ ಯಾವುದೇ ಸಂಖ್ಯೆಯು ಅವಿಭಾಜ್ಯವಾಗಿದೆ ಎಂದು ಹೇಳಲಾಗಿದೆ. ಹೇಳಿಕೆಯು ತಪ್ಪಾಗಿದೆ.

ಪುರಾವೆ:ಯಾರಾದರೂ ತಪ್ಪು ಎಂದು ಸಾಬೀತುಪಡಿಸಲು, ನೀವು ಪ್ರತಿ ಉದಾಹರಣೆಯನ್ನು ಕಂಡುಹಿಡಿಯಬೇಕು.

ಇದು ಪ್ರತಿ-ಉದಾಹರಣೆ: 2^4 - 1 = 15, 15= 3 * 5.

ವಿರೋಧಾಭಾಸದಿಂದ ಪುರಾವೆಯನ್ನು ಆಧರಿಸಿ (ನಿರಾಕರಣೆಯನ್ನು ಬಳಸುವುದು) ಇನ್ನೊಂದು ಮಾರ್ಗವಿದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ ಮುಖ್ಯ ವಿಧಾನಗಳು ವಿರೋಧಾಭಾಸ ಮತ್ತು ವಿರೋಧಾಭಾಸ. ಕಾಂಟ್ರಾಸ್ಟ್ ವಿಧಾನಗಳ ಬಳಕೆಯು ಪ್ರತಿಬಿಂಬಿಸುವಿಕೆಯಂತೆಯೇ ಇರುತ್ತದೆ: "x ನಿಜವಾಗಿದ್ದರೆ, ನಂತರ y ನಿಜವಾಗಿದೆ" ಎಂದು ಸಾಬೀತುಪಡಿಸಲು ನಾವು ವಿರುದ್ಧವಾಗಿ ಪ್ರತಿಪಾದಿಸುತ್ತೇವೆ, "y ತಪ್ಪಾಗಿದ್ದರೆ, ನಂತರ x ತಪ್ಪು." ತಾರ್ಕಿಕ ದೃಷ್ಟಿಕೋನದಿಂದ, ಈ ಹೇಳಿಕೆಗಳು ಒಂದೇ ಆಗಿರುತ್ತವೆ, ಆದರೆ ಮೊದಲನೆಯ ಕೊಟ್ರೊಪೊಸಿಷನ್ ಆಗಿರುವ ಎರಡನೆಯ ಅಭಿವ್ಯಕ್ತಿ ಹೆಚ್ಚು ಅನುಕೂಲಕರವಾಗಿದೆ.

ಉದಾಹರಣೆ: a*b ಬೆಸ ಸಂಖ್ಯೆಯಾಗಿದ್ದರೆ, a ಬೆಸ ಅಥವಾ b ಬೆಸ.

ಪುರಾವೆ:ಈ ಹೇಳಿಕೆಯನ್ನು ಸಾಬೀತುಪಡಿಸಲು, ವಿರೋಧಾಭಾಸವನ್ನು ಪರಿಗಣಿಸಿ: “a ಸಮ ಸಂಖ್ಯೆ ಮತ್ತು b ಬೆಸವಾಗಿದ್ದರೆ, a*b ಸಮವಾಗಿರುತ್ತದೆ. ಕೆಲವು ಪೂರ್ಣಾಂಕ x ಗಾಗಿ a = 2*x ಅನ್ನು ಬಿಡಿ. ನಂತರ a*b = 2*i*b, ಮತ್ತು ಆದ್ದರಿಂದ ಉತ್ಪನ್ನ a*b ಸಮವಾಗಿರುತ್ತದೆ.

ವಿರೋಧಾಭಾಸದಿಂದ ಪುರಾವೆ ವಿಧಾನಗಳನ್ನು ಬಳಸುವಾಗ, ತರ್ಕವನ್ನು ಬಳಸುವುದು ಉಪಯುಕ್ತವಾಗಿದೆ.

A ಅಥವಾ b = a ಅಥವಾ b ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಅಗತ್ಯವಿದೆ, ಅಥವಾ a ಮತ್ತು b ಎರಡನ್ನೂ ಒಂದೇ ಸಮಯದಲ್ಲಿ.
. a ಮತ್ತು b = a ಮತ್ತು b ಅನ್ನು ಏಕಕಾಲದಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಅಗತ್ಯವಿದೆ.
. a xor b = a ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಅಗತ್ಯವಿದೆ, ಆದರೆ b, ಅಥವಾ b ಅಲ್ಲ, ಆದರೆ a ಅಲ್ಲ.

q ಹೇಳಿಕೆಯು ನಿಜವೆಂದು ಸಾಬೀತುಪಡಿಸಲು ವಿರೋಧಾಭಾಸದ ವಿಧಾನವನ್ನು ಬಳಸುವಾಗ, ಒಬ್ಬರು ಮೊದಲು q ತಪ್ಪು ಎಂದು ಊಹಿಸುತ್ತಾರೆ ಮತ್ತು ನಂತರ ಅಂತಹ ಊಹೆಯು ವಿರೋಧಾಭಾಸಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ ಎಂದು ತೋರಿಸುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, 2 * 2<>4) ಅಂತಹ ವಿರೋಧಾಭಾಸಕ್ಕೆ ಬಂದ ನಂತರ, q ಸುಳ್ಳಾಗಿರುವ ಪರಿಸ್ಥಿತಿಯು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ ಮತ್ತು ಆದ್ದರಿಂದ, q ನಿಜವಾಗಿದೆ ಎಂದು ನಾವು ವಾದಿಸಬಹುದು.

ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಪ್ರೋಗ್ರಾಂ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯ ಅಥವಾ ಸ್ಪೇಸ್ ಬಳಕೆಯ ಕುರಿತಾದ ಹೇಳಿಕೆಗಳು ಒಂದು ಪೂರ್ಣಾಂಕದ ನಿಯತಾಂಕವನ್ನು ಬಳಸುತ್ತವೆ n (ಸಮಸ್ಯೆಯ "ಗಾತ್ರ" ವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ). ನಂತರ ನಾವು x (n) ಹೇಳಿಕೆಯನ್ನು ರೂಪಿಸಿದಾಗ, ಮೌಲ್ಯಗಳ ಗುಂಪಿಗೆ n ಅಂತಹ ಹೇಳಿಕೆಗಳು ಸಮಾನವಾಗಿರುತ್ತದೆ. ಈ ಹೇಳಿಕೆಯು "ಅನಂತ" ಸಂಖ್ಯೆಗಳ ಗುಂಪಿಗೆ ಅನ್ವಯಿಸುವುದರಿಂದ, ಸಮಗ್ರವಾದ ನೇರ ಪುರಾವೆಯನ್ನು ಒದಗಿಸುವುದು ಅಸಾಧ್ಯ. ಅಂತಹ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಇಂಡಕ್ಷನ್ ವಿಧಾನಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಇಂಡಕ್ಷನ್ ವಿಧಾನವು ಸತ್ಯವನ್ನು ಆಧರಿಸಿದೆ; ಅದು ಯಾವುದೇ n > 1. ಒಂದು ಪರಿಮಿತ ಕ್ರಮಗಳ ಅನುಕ್ರಮವು ಸತ್ಯವೆಂದು ತಿಳಿದಿರುವ ವಿಷಯದಿಂದ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಮತ್ತು ಅಂತಿಮವಾಗಿ q(n) ನಿಜವೆಂದು ಪುರಾವೆಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಹೀಗಾಗಿ, ಇಂಡಕ್ಷನ್ ಮೂಲಕ ಪುರಾವೆಯು n=1,2,3 ಇತ್ಯಾದಿಗಳಿಗೆ q(n) ಸರಿ ಎಂಬ ಹೇಳಿಕೆಯೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. ಕೆಲವು ಸ್ಥಿರ ಕೆ ವರೆಗೆ. ಮುಂದೆ ನಾವು q(n+1), q(n+2) ಇಂಡಕ್ಷನ್‌ಗಳ ಮುಂದಿನ "ಹಂತ" n > k ಗೂ ಸಹ ನಿಜವೆಂದು ಸಾಬೀತುಪಡಿಸುತ್ತೇವೆ.

ಕ್ರಮಾವಳಿಗಳನ್ನು ವಿಶ್ಲೇಷಿಸುವಾಗ, ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆ ಮತ್ತು ಅವುಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವಾಗ, ಒಬ್ಬರು "ಸಣ್ಣ ವಿವರಗಳನ್ನು" ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಬಾರದು; ಸ್ಥಿರ ಅಂಶಗಳು ಮತ್ತು ಸ್ಥಿರಾಂಕಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಬೇಕು. ಪ್ರಾಯೋಗಿಕವಾಗಿ, ದೊಡ್ಡ ಕಾರ್ಯದ ಪರಿಕಲ್ಪನೆಯನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಬಗ್ಗೆ. f(n) ಮತ್ತು g(n) ಎಂಬ ಎರಡು ಕಾರ್ಯಗಳಿವೆ ಎಂದು ಭಾವಿಸೋಣ, f(n) ಎಂದು ಭಾವಿಸಲಾಗಿದೆ<= O(g(n)) , т.е. функция О ограничивает сверху значения функции f, начиная с n=n0.

ಉದಾಹರಣೆಗೆ, ಒಂದು ಶ್ರೇಣಿಯಲ್ಲಿ ಸೊನ್ನೆಗೆ ಸಮಾನವಾದ ಅಂಶಗಳ ಸಂಖ್ಯೆಯನ್ನು ಎಣಿಸುವ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು O(n) ನಿಂದ ವಿವರಿಸಲಾಗುತ್ತದೆ, ಇಲ್ಲಿ n ಎಂಬುದು ಅಂಶಗಳ ಸಂಖ್ಯೆ.

1) 20n3+7.2n2-21.78n + 5 ಅನ್ನು O(n3) ಎಂದು ವಿವರಿಸಲಾಗಿದೆ

2)xn-2 + a(0) ಅನ್ನು O(xn) ಎಂದು ವಿವರಿಸಲಾಗಿದೆ.

2) 3*log(n) + log(log(n)) ಅನ್ನು O(log(n)) ಎಂದು ವಿವರಿಸಲಾಗಿದೆ.

3) 2100 ಅನ್ನು O(1) ಎಂದು ವಿವರಿಸಲಾಗಿದೆ

4) 5/n ಅನ್ನು O(1/n) ಎಂದು ವಿವರಿಸಲಾಗಿದೆ.

o(n) ಕಾರ್ಯವು ಮೇಲಿನಿಂದ ಗುರಿ ಸಮಯ ವೆಚ್ಚದ ಕಾರ್ಯವನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ, ಆದರೆ ಗರಿಷ್ಠ ನಿಖರತೆ ಇರುವಂತಹ O(n) ಕಾರ್ಯವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ನೀವು ಯಾವಾಗಲೂ ಪ್ರಯತ್ನಿಸಬೇಕು.

ಆರೋಹಣ ಕ್ರಮದಲ್ಲಿ ಅತ್ಯಂತ ಪ್ರಸಿದ್ಧವಾದ O ಕಾರ್ಯಗಳು:

ಅಸಿಂಪ್ಟೋಟಿಕ್ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಬಳಸುವಾಗ, ನೀವು O ಸಂಕೇತವನ್ನು ಬಳಸುವಾಗ, ನೀವು ಆಗಾಗ್ಗೆ ಸ್ಥಿರ ಅಂಶಗಳು ಮತ್ತು ಸಂಕಲನ ಸ್ಥಿರಾಂಕಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸುತ್ತೀರಿ ಎಂದು ಜಾಗರೂಕರಾಗಿರಿ. ಆದಾಗ್ಯೂ, ಈ ಮೌಲ್ಯವು ಸಾಕಷ್ಟು ದೊಡ್ಡದಾಗಿದ್ದರೆ, O(1) ಕಾರ್ಯದ ರೂಪವು O(n) ಕಾರ್ಯದಿಂದ ವಿವರಿಸಲಾದ ಅಲ್ಗಾರಿದಮ್‌ಗಿಂತ ಹೆಚ್ಚು ಯೋಗ್ಯವಾಗಿದ್ದರೂ, ಇದು ಪ್ರಾಯೋಗಿಕ ಅನ್ವಯವನ್ನು ಪಡೆಯುವ ಎರಡನೇ ಅಲ್ಗಾರಿದಮ್ ಆಗಿದೆ.

ಫಂಕ್ಷನ್ ಎಫ್ (ಎನ್) ಪ್ರಕಾರವನ್ನು ಅವಲಂಬಿಸಿ, ಕ್ರಮಾವಳಿಗಳ ಸಂಕೀರ್ಣತೆಯ ಕೆಳಗಿನ ವರ್ಗಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸಲಾಗುತ್ತದೆ.

ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ಅವಲಂಬಿಸಿ ಅಲ್ಗಾರಿದಮ್ ಸಂಕೀರ್ಣತೆಯ ವರ್ಗಗಳು
ಎಫ್(ಎನ್) ವೀಕ್ಷಿಸಿ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ವರ್ಗದ ಗುಣಲಕ್ಷಣಗಳು
ಹೆಚ್ಚಿನ ಕಾರ್ಯಗಳಿಗಾಗಿ ಹೆಚ್ಚಿನ ಸೂಚನೆಗಳನ್ನು ಒಂದು ಅಥವಾ ಹೆಚ್ಚು ಬಾರಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಪ್ರೋಗ್ರಾಂನಲ್ಲಿನ ಎಲ್ಲಾ ಸೂಚನೆಗಳು ಈ ಆಸ್ತಿಯನ್ನು ಹೊಂದಿದ್ದರೆ, ನಂತರ ಪ್ರೋಗ್ರಾಂನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವು ಸ್ಥಿರವಾಗಿರುತ್ತದೆ.
ಲಾಗ್ ಎನ್ ಪ್ರೋಗ್ರಾಮ್‌ನ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯವು ಲಾಗರಿಥಮಿಕ್ ಆಗಿದ್ದರೆ, N ಹೆಚ್ಚಾದಂತೆ ಪ್ರೋಗ್ರಾಂ ನಿಧಾನವಾಗುತ್ತದೆ.ಅಂತಹ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯಗಳು ಸಾಮಾನ್ಯವಾಗಿ ದೊಡ್ಡ ಸಮಸ್ಯೆಯನ್ನು ಸಣ್ಣ ಉಪಸಮಸ್ಯೆಗಳ ಗುಂಪಿಗೆ ತಗ್ಗಿಸುವ ಪ್ರೋಗ್ರಾಂಗಳೊಂದಿಗೆ ಸಂಬಂಧ ಹೊಂದಿವೆ, ಪ್ರತಿ ಹಂತದಲ್ಲೂ ಕೆಲವು ಸ್ಥಿರ ಅಂಶಗಳಿಂದ ಸಮಸ್ಯೆಯ ಗಾತ್ರವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಬೇಸ್ ಅನ್ನು ಬದಲಾಯಿಸುವುದು ಲಾಗರಿಥಮ್ನ ಮೌಲ್ಯದಲ್ಲಿನ ಬದಲಾವಣೆಯನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ: n
ಎನ್ ಪ್ರೋಗ್ರಾಂನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವು ರೇಖಾತ್ಮಕವಾಗಿದ್ದಾಗ, ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರತಿ ಇನ್‌ಪುಟ್ ಅಂಶವು ಕಡಿಮೆ ಪ್ರಕ್ರಿಯೆಗೆ ಒಳಗಾಗುತ್ತದೆ ಎಂದರ್ಥ.
ಎನ್ ಲಾಗ್ ಎನ್ ಒಂದು ಅಲ್ಗಾರಿದಮ್ ಸಮಸ್ಯೆಯನ್ನು ಸಣ್ಣ ಉಪಸಮಸ್ಯೆಗಳಾಗಿ ವಿಭಜಿಸುವ ಮೂಲಕ, ಅವುಗಳನ್ನು ಸ್ವತಂತ್ರವಾಗಿ ಪರಿಹರಿಸುವ ಮತ್ತು ನಂತರ ಪರಿಹಾರಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಿದಾಗ N ಲಾಗ್ N ಗೆ ಅನುಪಾತದ ರನ್ಟೈಮ್ ಸಂಭವಿಸುತ್ತದೆ.
ಎನ್ 2 ಅಲ್ಗಾರಿದಮ್‌ನ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವು ಚತುರ್ಭುಜವಾಗಿದ್ದಾಗ, ತುಲನಾತ್ಮಕವಾಗಿ ಸಣ್ಣ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುವಲ್ಲಿ ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಗೆ ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ. ಎಲ್ಲಾ ಜೋಡಿ ಡೇಟಾ ಐಟಂಗಳನ್ನು (ಬಹುಶಃ ಡಬಲ್-ನೆಸ್ಟಿಂಗ್ ಲೂಪ್‌ನಲ್ಲಿ) ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಅಲ್ಗಾರಿದಮ್‌ಗಳಲ್ಲಿ ಕ್ವಾಡ್ರಾಟಿಕ್ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯವು ಸಾಮಾನ್ಯವಾಗಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ.
ಎನ್ 3 ಡೇಟಾ ಅಂಶಗಳ ತ್ರಿವಳಿಗಳನ್ನು (ಪ್ರಾಯಶಃ ಟ್ರಿಪಲ್-ನೆಸ್ಟಿಂಗ್ ಲೂಪ್‌ನಲ್ಲಿ) ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಇದೇ ರೀತಿಯ ಅಲ್ಗಾರಿದಮ್ ಘನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವನ್ನು ಹೊಂದಿದೆ ಮತ್ತು ಇದು ಪ್ರಾಯೋಗಿಕವಾಗಿ ಸಣ್ಣ ಸಮಸ್ಯೆಗಳಿಗೆ ಮಾತ್ರ ಅನ್ವಯಿಸುತ್ತದೆ.
2N ಘಾತೀಯ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವನ್ನು ಹೊಂದಿರುವ ಕೆಲವೇ ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಪ್ರಾಯೋಗಿಕ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಹೊಂದಿವೆ, ಆದಾಗ್ಯೂ ಬ್ರೂಟ್ ಫೋರ್ಸ್‌ನಂತಹ ಸಮಸ್ಯೆಯನ್ನು ನೇರವಾಗಿ ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಅಂತಹ ಕ್ರಮಾವಳಿಗಳು ಸ್ವಾಭಾವಿಕವಾಗಿ ಉದ್ಭವಿಸುತ್ತವೆ.

ಅನಂತದಲ್ಲಿ ಸಂಕೀರ್ಣತೆಯ ಲಕ್ಷಣರಹಿತ ಕಾರ್ಯಗಳನ್ನು ಅಧ್ಯಯನ ಮಾಡಲು ಗಣಿತದ ವಿಧಾನಗಳ ಆಧಾರದ ಮೇಲೆ, ಐದು ವರ್ಗಗಳ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಗುರುತಿಸಲಾಗಿದೆ.

1. ಸ್ಥಿರವಾದ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯದೊಂದಿಗೆ ವೇಗದ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ವರ್ಗ, ಅವುಗಳ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವು O(1) ಆಗಿದೆ. ಮಧ್ಯಂತರ ಸ್ಥಿತಿಯನ್ನು O(log N) ಸಂಕೀರ್ಣತೆಯೊಂದಿಗೆ ಅಲ್ಗಾರಿದಮ್‌ಗಳಿಂದ ಆಕ್ರಮಿಸಲಾಗಿದೆ, ಇವುಗಳನ್ನು ಈ ವರ್ಗದಲ್ಲಿ ವರ್ಗೀಕರಿಸಲಾಗಿದೆ.

2. ಭಾಗಲಬ್ಧ ಅಥವಾ ಬಹುಪದೀಯ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ವರ್ಗ, ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ಇನ್‌ಪುಟ್ ನಿಯತಾಂಕಗಳಿಂದ ಬಹುಪದೀಯವಾಗಿ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, O(N), O(N 2, O(N 3).

3. ಸಂಕೀರ್ಣತೆಯ ಪದವಿಯನ್ನು ಹೊಂದಿರುವ ಸಬ್‌ಎಕ್ಸ್‌ಪೋನೆನ್ಷಿಯಲ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ವರ್ಗ O(N ಲಾಗ್ N).

4.ಕ್ಲಾಸ್ ಆಫ್ ಎಕ್ಸ್‌ಪೋನೆನ್ಷಿಯಲ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಸಂಕೀರ್ಣತೆಯ ಮಟ್ಟ O(2 N).

5.ಓವರ್ ಎಕ್ಸ್‌ಪೋನೆನ್ಶಿಯಲ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ವರ್ಗ. ಅಪವರ್ತನೀಯ ಸಂಕೀರ್ಣತೆಯೊಂದಿಗೆ ಅಲ್ಗಾರಿದಮ್‌ಗಳಿವೆ, ಆದರೆ ಅವು ಸಾಮಾನ್ಯವಾಗಿ ಯಾವುದೇ ಪ್ರಾಯೋಗಿಕ ಅನ್ವಯವನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ.

ಅಲ್ಗಾರಿದಮ್ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯದಲ್ಲಿ ಮೆಮೊರಿ ಸ್ಥಿತಿಯನ್ನು ನಿರ್ದಿಷ್ಟ ಪ್ರದೇಶಗಳನ್ನು ನಿಯೋಜಿಸಲು ಅಗತ್ಯವಿರುವ ಮೌಲ್ಯಗಳಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುವ ಸಂದರ್ಭದಲ್ಲಿ, ಹೆಚ್ಚುವರಿ ಸಂಖ್ಯೆಯ ಕೋಶಗಳನ್ನು ಬಳಸಬಹುದು. ಇನ್‌ಪುಟ್ D ಗಾಗಿ ಅಲ್ಗಾರಿದಮ್ A ಗೆ ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯ ಪ್ರಮಾಣದಿಂದ, ನಾವು ಅಲ್ಗಾರಿದಮ್‌ನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯದಲ್ಲಿ ಬಳಸಲಾದ ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯ ಮೆಮೊರಿ ಕೋಶಗಳನ್ನು ಅರ್ಥೈಸುತ್ತೇವೆ. ಅಲ್ಗಾರಿದಮ್‌ನ ಸಾಮರ್ಥ್ಯದ ಸಂಕೀರ್ಣತೆಯನ್ನು ಅಲ್ಗಾರಿದಮ್‌ನ ಕೆಟ್ಟ ಪ್ರಕರಣದ ಮೆಮೊರಿ ಸಾಮರ್ಥ್ಯದ ಕಾರ್ಯದ ಲಕ್ಷಣರಹಿತ ಅಂದಾಜು ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ.

ಹೀಗಾಗಿ, ಕೆಟ್ಟ, ಸರಾಸರಿ ಮತ್ತು ಉತ್ತಮ ಸಂದರ್ಭಗಳಲ್ಲಿ ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಪನ್ಮೂಲ ಸಂಕೀರ್ಣತೆಯನ್ನು ಸಮಯ ಮತ್ತು ಸಾಮರ್ಥ್ಯದ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯಗಳ ಆದೇಶದ ಜೋಡಿ ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ, ಇದನ್ನು ಲಕ್ಷಣರಹಿತ ಸಂಕೇತದಿಂದ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ಪರಿಗಣನೆಯಲ್ಲಿರುವ ಪ್ರಕರಣಕ್ಕೆ ಅನುಗುಣವಾಗಿರುತ್ತದೆ.

ಕಾರ್ಯವಿಧಾನದ ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ನಲ್ಲಿನ ಮುಖ್ಯ ಅಲ್ಗಾರಿದಮಿಕ್ ರಚನೆಗಳು ಅನುಸರಿಸುವುದು, ಕವಲೊಡೆಯುವುದು ಮತ್ತು ಲೂಪಿಂಗ್ ಮಾಡುವುದು. ಸ್ಥಿರ ಇನ್ಪುಟ್ ಆಯಾಮದೊಂದಿಗೆ ಉತ್ತಮ, ಸರಾಸರಿ ಮತ್ತು ಕೆಟ್ಟ ಪ್ರಕರಣಗಳಿಗೆ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯಗಳನ್ನು ಪಡೆಯಲು, ಮುಖ್ಯ ಅಲ್ಗಾರಿದಮಿಕ್ ರಚನೆಗಳ ಮೌಲ್ಯಮಾಪನದಲ್ಲಿನ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುವುದು ಅವಶ್ಯಕ.

  • "ಕೆಳಗಿನ" ನಿರ್ಮಾಣದ ಸಂಕೀರ್ಣತೆಯು ಪರಸ್ಪರ ಅನುಸರಿಸುವ ಬ್ಲಾಕ್ಗಳ ಸಂಕೀರ್ಣತೆಯ ಮೊತ್ತವಾಗಿದೆ: f=f 1 +f 2 +...+f n .
  • "ಶಾಖೆ" ವಿನ್ಯಾಸದ ಸಂಕೀರ್ಣತೆಯನ್ನು ಪ್ರತಿಯೊಂದು ಸೂಚನೆಗಳಿಗೆ ಪರಿವರ್ತನೆಯ ಸಂಭವನೀಯತೆಯ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ, ಪರಿಸ್ಥಿತಿಯಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ. ಅದೇ ಸಮಯದಲ್ಲಿ, ಸ್ಥಿತಿಯನ್ನು ಪರಿಶೀಲಿಸುವುದು ಸಹ ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಂಕೀರ್ಣತೆಯನ್ನು ಹೊಂದಿದೆ. ಕೆಟ್ಟ ಪ್ರಕರಣದ ಸಂಕೀರ್ಣತೆಯನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು, ಹೆಚ್ಚು ಸಂಕೀರ್ಣತೆಯನ್ನು ಹೊಂದಿರುವ ಕವಲೊಡೆಯುವ ಬ್ಲಾಕ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು; ಉತ್ತಮ ಸಂದರ್ಭದಲ್ಲಿ, ಕಡಿಮೆ ಸಂಕೀರ್ಣತೆಯನ್ನು ಹೊಂದಿರುವ ಬ್ಲಾಕ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು. f if =f 1 +f ನಂತರ p ನಂತರ +f ಬೇರೆ (1-p ನಂತರ)
  • "ಲೂಪ್" ನಿರ್ಮಾಣದ ಸಂಕೀರ್ಣತೆಯನ್ನು ಲೂಪ್ ಮುಕ್ತಾಯದ ಸ್ಥಿತಿಯನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ (ಸಾಮಾನ್ಯವಾಗಿ ಆದೇಶ 0 (1)) ಮತ್ತು ಲೂಪ್ನ ಪೂರ್ಣಗೊಂಡ ಪುನರಾವರ್ತನೆಗಳ ಸಂಖ್ಯೆಯ ಉತ್ಪನ್ನವನ್ನು ಲೂಪ್ ದೇಹದ ದೊಡ್ಡ ಸಂಭವನೀಯ ಸಂಖ್ಯೆಯ ಕಾರ್ಯಾಚರಣೆಗಳಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ. ನೆಸ್ಟೆಡ್ ಲೂಪ್ಗಳನ್ನು ಬಳಸಿದರೆ, ಅವುಗಳ ಸಂಕೀರ್ಣತೆಯು ಗುಣಿಸಲ್ಪಡುತ್ತದೆ.

ಹೀಗಾಗಿ, ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಅಂದಾಜು ಮಾಡಲು, ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ಪಡೆಯುವ ಸಾಮಾನ್ಯ ವಿಧಾನವನ್ನು ರೂಪಿಸಬಹುದು.

  1. ಅಲ್ಗಾರಿದಮ್ನ ವಿಭಜನೆಯು ಅಲ್ಗಾರಿದಮ್ನಲ್ಲಿ ಮೂಲಭೂತ ರಚನೆಗಳನ್ನು ಗುರುತಿಸುವುದು ಮತ್ತು ಸಂಕೀರ್ಣತೆಯನ್ನು ಅಂದಾಜು ಮಾಡುವುದು ಒಳಗೊಂಡಿರುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಕೆಳಗಿನ ಮುಖ್ಯ ಅಲ್ಗಾರಿದಮಿಕ್ ರಚನೆಗಳನ್ನು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ.
  2. ಮೂಲಭೂತ ಭಾಷಾ ಕಾರ್ಯಾಚರಣೆಗಳಿಗಾಗಿ ಕಾರ್ಮಿಕ ತೀವ್ರತೆಯ ಲೈನ್-ಬೈ-ಲೈನ್ ವಿಶ್ಲೇಷಣೆಯು ಸಂಚಿತ ವಿಶ್ಲೇಷಣೆ (ಎಲ್ಲಾ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಂಡು) ಅಥವಾ ಕಾರ್ಯಾಚರಣೆಯ ವಿಶ್ಲೇಷಣೆ (ಪ್ರತಿ ಕಾರ್ಯಾಚರಣೆಯ ಸಂಕೀರ್ಣತೆಯನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಂಡು) ಸೂಚಿಸುತ್ತದೆ.
  3. ಅತ್ಯುತ್ತಮ, ಸರಾಸರಿ ಮತ್ತು ಕೆಟ್ಟ ಸಂದರ್ಭಗಳಲ್ಲಿ ಮೂಲಭೂತ ಅಲ್ಗಾರಿದಮಿಕ್ ರಚನೆಗಳನ್ನು ವಿಶ್ಲೇಷಿಸುವ ವಿಧಾನವನ್ನು ಆಧರಿಸಿ ಸಂಕೀರ್ಣತೆಯ ಕ್ರಿಯೆಯ ವಿಲೋಮ ಸಂಯೋಜನೆ.

ಪುನರಾವರ್ತಿತ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಸಂಪನ್ಮೂಲ ದಕ್ಷತೆಯನ್ನು ನಿರ್ಣಯಿಸುವ ವೈಶಿಷ್ಟ್ಯವೆಂದರೆ ಹೆಚ್ಚುವರಿ ಮೆಮೊರಿ ವೆಚ್ಚಗಳು ಮತ್ತು ಪುನರಾವರ್ತನೆಯನ್ನು ಸಂಘಟಿಸುವ ಕಾರ್ಯವಿಧಾನವನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುವ ಅವಶ್ಯಕತೆಯಿದೆ. ಆದ್ದರಿಂದ, ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಪುನರಾವರ್ತಿತ ಅಳವಡಿಕೆಗಳ ಸಂಕೀರ್ಣತೆಯು ಒಂದು ಪುನರಾವರ್ತಿತ ಕರೆ ಸಮಯದಲ್ಲಿ ನಿರ್ವಹಿಸಲಾದ ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆಗೆ ಸಂಬಂಧಿಸಿದೆ, ಹಾಗೆಯೇ ಅಂತಹ ಕರೆಗಳ ಸಂಖ್ಯೆ. ಮೌಲ್ಯಗಳನ್ನು ಹಿಂದಿರುಗಿಸುವ ಮತ್ತು ಕಾಲ್ ಪಾಯಿಂಟ್‌ಗೆ ನಿಯಂತ್ರಣವನ್ನು ವರ್ಗಾಯಿಸುವ ವೆಚ್ಚಗಳನ್ನು ಸಹ ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತದೆ. ಅಗತ್ಯವಿರುವ ಸ್ಟಾಕ್ ಮೆಮೊರಿಯನ್ನು ಅಂದಾಜು ಮಾಡುವಾಗ, ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಮಯದಲ್ಲಿ, ಇದು ಸ್ಟಾಕ್‌ನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಪುನರಾವರ್ತನೆಯ ತುಣುಕು ಅಲ್ಲ, ಆದರೆ ಪುನರಾವರ್ತಿತ ಕರೆಗಳ ಸರಪಳಿ ಎಂದು ನೀವು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಬೇಕಾಗುತ್ತದೆ. ಆದ್ದರಿಂದ, ಸ್ಟಾಕ್ ಗಾತ್ರವನ್ನು ಸ್ವೀಕರಿಸಿದ ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯ ಏಕಕಾಲೀನ ಪುನರಾವರ್ತಿತ ಕರೆಗಳಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ.


ಪ್ರೋಗ್ರಾಮರ್ ಗ್ರಂಥಾಲಯ


"ಡೀಬಗ್ ಮಾಡುವುದು ದೋಷಗಳನ್ನು ತೆಗೆದುಹಾಕುವ ಪ್ರಕ್ರಿಯೆಯಾಗಿದ್ದರೆ, ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಅವುಗಳನ್ನು ಪರಿಚಯಿಸುವ ಪ್ರಕ್ರಿಯೆಯಾಗಿರಬೇಕು"

E. ಡಿಜ್ಕ್ಸ್ಟ್ರಾ

1.2. ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಏಕೆ ಅಧ್ಯಯನ ಮಾಡಬೇಕು? ಕ್ರಮಾವಳಿಗಳ ದಕ್ಷತೆ

ಮೊದಲನೆಯದಾಗಿ, ಕಂಪ್ಯೂಟರ್ ವಿಜ್ಞಾನದ ವಿವಿಧ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ಯಾವುದೇ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಪ್ರಮುಖ ಅಂಶಗಳಾಗಿವೆ. ತಂತ್ರಜ್ಞಾನ ಅಭಿವೃದ್ಧಿಯ ಪ್ರಸ್ತುತ ಹಂತದಲ್ಲಿ ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಪ್ರಮುಖ ಪಾತ್ರವಹಿಸುತ್ತವೆ. ಇಲ್ಲಿ ನೀವು ಅಂತಹ ಸಾಮಾನ್ಯ ಕಾರ್ಯಗಳನ್ನು ನೆನಪಿಸಿಕೊಳ್ಳಬಹುದು:

  • ವಿಭಿನ್ನ ಸಂಕೀರ್ಣತೆಯ ಗಣಿತದ ಸಮೀಕರಣಗಳನ್ನು ಪರಿಹರಿಸುವುದು, ಮ್ಯಾಟ್ರಿಕ್ಸ್, ವಿಲೋಮ ಮಾತೃಕೆಗಳ ಉತ್ಪನ್ನವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು;
  • ಸರಕು ಮತ್ತು ಜನರನ್ನು ಸಾಗಿಸಲು ಸೂಕ್ತ ಮಾರ್ಗಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು;
  • ವಿವಿಧ ನೋಡ್‌ಗಳ (ತಯಾರಕರು, ಯಂತ್ರಗಳು, ಕೆಲಸಗಾರರು, ಪ್ರೊಸೆಸರ್‌ಗಳು, ಇತ್ಯಾದಿ) ನಡುವೆ ಸಂಪನ್ಮೂಲಗಳನ್ನು ವಿತರಿಸಲು ಸೂಕ್ತವಾದ ಆಯ್ಕೆಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು;
  • ಹೊಂದಿಕೆಯಾಗುವ ಜೀನೋಮ್‌ನಲ್ಲಿ ಅನುಕ್ರಮಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು;
  • ಜಾಗತಿಕ ಅಂತರ್ಜಾಲದಲ್ಲಿ ಮಾಹಿತಿಗಾಗಿ ಹುಡುಕಾಟ;
  • ಇ-ಕಾಮರ್ಸ್‌ನಲ್ಲಿ ಹಣಕಾಸಿನ ನಿರ್ಧಾರಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುವುದು;
  • ಆಡಿಯೋ ಮತ್ತು ವಿಡಿಯೋ ಮಾಹಿತಿಯ ಪ್ರಕ್ರಿಯೆ ಮತ್ತು ವಿಶ್ಲೇಷಣೆ.

ಈ ಪಟ್ಟಿಯು ಮುಂದುವರಿಯುತ್ತದೆ ಮತ್ತು ವಾಸ್ತವವಾಗಿ, ಕೆಲವು ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಬಳಸದ ಕಂಪ್ಯೂಟರ್ ವಿಜ್ಞಾನ ಮತ್ತು ಮಾಹಿತಿ ವಿಜ್ಞಾನದ ಪ್ರದೇಶವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಅಸಾಧ್ಯವಾಗಿದೆ.

ಎರಡನೆಯದಾಗಿ, ಉನ್ನತ-ಗುಣಮಟ್ಟದ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಕ್ರಮಾವಳಿಗಳು ಕೈಗಾರಿಕೆಗಳಲ್ಲಿನ ಪ್ರಗತಿಗೆ ವೇಗವರ್ಧಕಗಳಾಗಿರಬಹುದು, ಅದು ಮೊದಲ ನೋಟದಲ್ಲಿ ಕಂಪ್ಯೂಟರ್ ವಿಜ್ಞಾನದಿಂದ ದೂರವಿರುತ್ತದೆ (ಕ್ವಾಂಟಮ್ ಮೆಕ್ಯಾನಿಕ್ಸ್, ಅರ್ಥಶಾಸ್ತ್ರ ಮತ್ತು ಹಣಕಾಸು, ವಿಕಾಸದ ಸಿದ್ಧಾಂತ).

ಮತ್ತು ಮೂರನೆಯದಾಗಿ, ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಅಧ್ಯಯನ ಮಾಡುವುದು ನಮ್ಮ ಗಣಿತದ ಸಾಮರ್ಥ್ಯಗಳು ಮತ್ತು ತಾರ್ಕಿಕ ಚಿಂತನೆಯನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವ ನಂಬಲಾಗದಷ್ಟು ಆಸಕ್ತಿದಾಯಕ ಪ್ರಕ್ರಿಯೆಯಾಗಿದೆ.

1.3. ಕ್ರಮಾವಳಿಗಳ ದಕ್ಷತೆ

ಕಂಪ್ಯೂಟರ್‌ನ ವೇಗ ಮತ್ತು ಅದರ ಮೆಮೊರಿಯ ಪ್ರಮಾಣವನ್ನು ಅನಿರ್ದಿಷ್ಟವಾಗಿ ಹೆಚ್ಚಿಸಬಹುದು ಎಂದು ಭಾವಿಸೋಣ. ನಂತರ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಅಧ್ಯಯನ ಮಾಡುವ ಅಗತ್ಯವಿದೆಯೇ? ಹೌದು, ಆದರೆ ಡಿಕೌಪ್ಲಿಂಗ್ ವಿಧಾನವು ಸೀಮಿತ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವನ್ನು ಹೊಂದಿದೆ ಮತ್ತು ಅದು ಸರಿಯಾದ ಉತ್ತರವನ್ನು ನೀಡುತ್ತದೆ ಎಂದು ಪ್ರದರ್ಶಿಸಲು ಮಾತ್ರ. ಕಂಪ್ಯೂಟರ್‌ಗಳು ಅಪರಿಮಿತ ವೇಗದಲ್ಲಿದ್ದರೆ, ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಅನಿಯಂತ್ರಿತ ಸರಿಯಾದ ವಿಧಾನವು ಮಾಡುತ್ತದೆ. ಸಹಜವಾಗಿ, ನಂತರ ಹೆಚ್ಚಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸುಲಭವಾದ ವಿಧಾನವನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗುತ್ತದೆ.

ಇಂದು, ಕಂಪ್ಯೂಟರ್‌ಗಳು ಬಹಳ ಶಕ್ತಿಯುತವಾಗಿವೆ, ಆದರೆ ಅವುಗಳ ವೇಗವು ಅನಂತವಾಗಿಲ್ಲ ಮತ್ತು ಅವುಗಳ ಸ್ಮರಣೆಯೂ ಅಲ್ಲ. ಹೀಗಾಗಿ, ಕಲನಶಾಸ್ತ್ರದಲ್ಲಿ, ಇದು ಅಗತ್ಯವಿರುವ ಮೆಮೊರಿಯ ಪ್ರಮಾಣದಷ್ಟೇ ಸೀಮಿತ ಸಂಪನ್ಮೂಲವಾಗಿದೆ. ಈ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ಬಳಸಬೇಕು, ಇದು ಸಮಯ ಮತ್ತು ಮೆಮೊರಿ ಸಂಪನ್ಮೂಲಗಳ ಬಳಕೆಯ ವಿಷಯದಲ್ಲಿ ಸಮರ್ಥವಾಗಿರುವ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಬಳಕೆಯಿಂದ ಸುಗಮಗೊಳಿಸಲ್ಪಡುತ್ತದೆ.

ಅದೇ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ದಕ್ಷತೆಯಲ್ಲಿ ಹೆಚ್ಚು ಬದಲಾಗಬಹುದು. ವಿಭಿನ್ನ ಹಾರ್ಡ್‌ವೇರ್ ಮತ್ತು ಸಾಫ್ಟ್‌ವೇರ್‌ಗಳಿಂದ ಉಂಟಾದ ವ್ಯತ್ಯಾಸಗಳಿಗಿಂತ ಈ ವ್ಯತ್ಯಾಸಗಳು ಹೆಚ್ಚು ಗಮನಿಸಬಹುದಾಗಿದೆ.

ಮೇಲೆ ಗಮನಿಸಿದಂತೆ, ಈ ವಿಭಾಗವು ವಿಂಗಡಣೆ ಕಾರ್ಯದ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ. ಪರಿಗಣಿಸಲಾಗುವ ಮೊದಲ ಅಲ್ಗಾರಿದಮ್, ಸೇರ್ಪಡೆ ವಿಂಗಡಣೆ, ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಸಮಯ ಬೇಕಾಗುತ್ತದೆ, ಅದರ ಮೊತ್ತವನ್ನು c 1 n 2 ಎಂದು ಅಂದಾಜಿಸಲಾಗಿದೆ, ಇಲ್ಲಿ n ಎಂಬುದು ಇನ್‌ಪುಟ್ ಡೇಟಾದ ಗಾತ್ರವಾಗಿದೆ (ವಿಂಗಡಿಸಲು ಅನುಕ್ರಮದಲ್ಲಿನ ಅಂಶಗಳ ಸಂಖ್ಯೆ), c 1 ಕೆಲವು ಸ್ಥಿರವಾಗಿರುತ್ತದೆ. ಈ ಅಭಿವ್ಯಕ್ತಿಯು ಅಲ್ಗಾರಿದಮ್‌ನ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವು ಮೂಲ ಡೇಟಾದ ಪರಿಮಾಣವನ್ನು ಹೇಗೆ ಅವಲಂಬಿಸಿರುತ್ತದೆ ಎಂಬುದನ್ನು ಸೂಚಿಸುತ್ತದೆ. ಸೇರ್ಪಡೆ ರೀತಿಯ ಸಂದರ್ಭದಲ್ಲಿ, ಈ ಅವಲಂಬನೆಯು ಚತುರ್ಭುಜವಾಗಿದೆ. ಎರಡನೇ ಅಲ್ಗಾರಿದಮ್, ವಿಲೀನ ವಿಂಗಡಣೆಗೆ ಸಮಯ ಬೇಕಾಗುತ್ತದೆ, ಅದರ ಮೊತ್ತವನ್ನು 2 nLog 2 n ಎಂದು ಅಂದಾಜಿಸಲಾಗಿದೆ. ವಿಶಿಷ್ಟವಾಗಿ, ಸೇರ್ಪಡೆ ವಿಂಗಡಣೆ ಸ್ಥಿರಾಂಕವು ವಿಲೀನ ವಿಂಗಡಣೆಯ ಸ್ಥಿರಕ್ಕಿಂತ ಚಿಕ್ಕದಾಗಿದೆ, ಅಂದರೆ, ILog 2 n ಕಾರ್ಯಕ್ಕಿಂತ n ಹೆಚ್ಚಾದಂತೆ c12 ವೇಗವಾಗಿ ಬೆಳೆಯುತ್ತದೆ. ಮತ್ತು ಕೆಲವು ಮೌಲ್ಯಗಳಿಗೆ n = n 0 ಸ್ಥಿರಾಂಕಗಳಲ್ಲಿನ ವ್ಯತ್ಯಾಸದ ಪ್ರಭಾವವನ್ನು ನಿಲ್ಲಿಸಿದಾಗ ಒಂದು ಕ್ಷಣವನ್ನು ತಲುಪಲಾಗುತ್ತದೆ ಮತ್ತು ಭವಿಷ್ಯದಲ್ಲಿ c 2 nLog 2 n ಕಾರ್ಯವು ಯಾವುದೇ n > n 0 ಗೆ c 1 n 2 ಗಿಂತ ಕಡಿಮೆಯಿರುತ್ತದೆ.

ಇದನ್ನು ಪ್ರದರ್ಶಿಸಲು, ಎರಡು ಕಂಪ್ಯೂಟರ್‌ಗಳನ್ನು ಪರಿಗಣಿಸಿ - A ಮತ್ತು B. ಕಂಪ್ಯೂಟರ್ A ವೇಗವಾಗಿರುತ್ತದೆ ಮತ್ತು ವಿಂಗಡಿಸುವ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಕಂಪ್ಯೂಟರ್ B ನಿಧಾನವಾಗಿರುತ್ತದೆ ಮತ್ತು ವಿಲೀನ ವಿಂಗಡಣೆ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ. ಎರಡೂ ಕಂಪ್ಯೂಟರ್‌ಗಳು ಮಿಲಿಯನ್ ಸಂಖ್ಯೆಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಗುಂಪನ್ನು ವಿಂಗಡಿಸಬೇಕು. ಕಂಪ್ಯೂಟರ್ ಎ ಸೆಕೆಂಡಿಗೆ ಒಂದು ಬಿಲಿಯನ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಕಂಪ್ಯೂಟರ್ ಬಿ ಕೇವಲ ಹತ್ತು ಮಿಲಿಯನ್, ಬಿ ಗಿಂತ 100 ಪಟ್ಟು ವೇಗವಾಗಿ ಓಡುತ್ತಿದೆ ಎಂದು ಹೇಳೋಣ. ವ್ಯತ್ಯಾಸವನ್ನು ಹೆಚ್ಚು ಗಮನಿಸುವಂತೆ ಮಾಡಲು, ಸಕ್ರಿಯಗೊಳಿಸುವ ವಿಧಾನದ ಕೋಡ್ ಅನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿ ಬರೆಯಲಾಗಿದೆ ಎಂದು ಹೇಳೋಣ. ಪ್ರೊಸೆಸರ್‌ಗೆ ಸೂಚನೆಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವಿಶ್ವದ ಪ್ರೋಗ್ರಾಮರ್, ಮತ್ತು ಈ ಅಲ್ಗಾರಿದಮ್‌ನೊಂದಿಗೆ n ಸಂಖ್ಯೆಗಳನ್ನು ವಿಂಗಡಿಸಲು ನೀವು 2n 2 ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸಬೇಕಾಗುತ್ತದೆ (ಅಂದರೆ, C 1 = 2). ಕಂಪ್ಯೂಟರ್ B ನಲ್ಲಿ ವಿಲೀನ ವಿಂಗಡಣೆಯನ್ನು ಉನ್ನತ ಮಟ್ಟದ ಭಾಷೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಅನನುಭವಿ ಪ್ರೋಗ್ರಾಮರ್‌ನಿಂದ ಬರೆಯಲಾಗಿದೆ ಮತ್ತು ಪರಿಣಾಮವಾಗಿ ಕೋಡ್‌ಗೆ 50nlog 2 n ಕಾರ್ಯಾಚರಣೆಗಳ ಅಗತ್ಯವಿದೆ (ಅಂದರೆ, c 2 = 50). ಹೀಗಾಗಿ, ಮಿಲಿಯನ್ ಸಂಖ್ಯೆಗಳನ್ನು ವಿಂಗಡಿಸಲು, ಕಂಪ್ಯೂಟರ್ ಎ ಅಗತ್ಯವಿದೆ

ಮತ್ತು ಕಂಪ್ಯೂಟರ್ B ಗೆ -

ಆದ್ದರಿಂದ, ಕೆಟ್ಟ ಕಂಪ್ಯೂಟರ್ ಮತ್ತು ಕೆಟ್ಟ ಕಂಪೈಲರ್‌ನೊಂದಿಗೆ ಸಹ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವು ಹೆಚ್ಚು ನಿಧಾನವಾಗಿ ಹೆಚ್ಚಾಗುವ ಕೋಡ್ ಅನ್ನು ಬಳಸುವುದರಿಂದ, ಕಡಿಮೆ CPU ಸಮಯದ ಕ್ರಮದ ಅಗತ್ಯವಿದೆ! 10,000,000 ಅಂಕೆಗಳನ್ನು ವಿಂಗಡಿಸಲು, ವಿಲೀನದ ವಿಂಗಡಣೆಯ ಪ್ರಯೋಜನವು ಇನ್ನಷ್ಟು ಗಮನಾರ್ಹವಾಗುತ್ತದೆ: ಸೇರ್ಪಡೆ ವಿಂಗಡಣೆಯು ಅಂತಹ ಕಾರ್ಯಕ್ಕಾಗಿ ಸುಮಾರು 2.3 ದಿನಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ನಂತರ ವಿಲೀನ ವಿಂಗಡಣೆಗೆ ಇದು 20 ನಿಮಿಷಗಳಿಗಿಂತ ಕಡಿಮೆ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಸಾಮಾನ್ಯ ನಿಯಮವೆಂದರೆ ವಿಂಗಡಿಸಲು ಅಂಶಗಳ ಸಂಖ್ಯೆಯು ದೊಡ್ಡದಾಗಿದೆ, ವಿಲೀನ ವಿಂಗಡಣೆಯ ಹೆಚ್ಚಿನ ಪ್ರಯೋಜನವಾಗಿದೆ. ಮೇಲಿನ ಉದಾಹರಣೆಯು ಕಂಪ್ಯೂಟರ್ ಸಾಫ್ಟ್‌ವೇರ್‌ನಂತಹ ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ ತಂತ್ರಜ್ಞಾನ. ಒಟ್ಟಾರೆ ಸಿಸ್ಟಮ್ ಕಾರ್ಯಕ್ಷಮತೆಯು ಅಲ್ಗಾರಿದಮ್‌ನ ದಕ್ಷತೆಯ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ, ಅದು ಹಾರ್ಡ್‌ವೇರ್‌ನ ಶಕ್ತಿಯ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ.

ಆದ್ದರಿಂದ, ಕಂಪ್ಯೂಟಿಂಗ್ ಯಂತ್ರಗಳಿಗೆ ವಿವಿಧ ಆಯ್ಕೆಗಳನ್ನು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ, ಸರಳವಾದ ಟ್ಯೂರಿಂಗ್ ಯಂತ್ರಗಳಿಂದ ಏಕರೂಪದ ಕಂಪ್ಯೂಟಿಂಗ್ ಪರಿಸರದವರೆಗೆ. ಅಲ್ಗಾರಿದಮ್ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಇವೆಲ್ಲವನ್ನೂ ಬಳಸಬಹುದು. ಈ ಮಾದರಿಗಳ ಆಧಾರದ ಮೇಲೆ, ಗಣನೆಯ ಹೆಚ್ಚು ವಿಶೇಷವಾದ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಲಾಗಿದೆ, ಅವುಗಳೆಂದರೆ: ಕವಲೊಡೆಯುವ ಅಂಕಗಣಿತದ ಕಾರ್ಯಕ್ರಮಗಳು, ಬಿಟ್‌ವೈಸ್ ಕಂಪ್ಯೂಟೇಶನ್, ಬೈನರಿ ವೆಕ್ಟರ್ ಕಂಪ್ಯೂಟೇಶನ್ ಮತ್ತು ನಿರ್ಧಾರ ಮರಗಳು.

ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಈ ಕೆಳಗಿನ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿವೆ:

ಎ) ಸಂಕೀರ್ಣತೆ;

ಬಿ) ಕಾರ್ಮಿಕ ತೀವ್ರತೆ;

ಸಿ) ವಿಶ್ವಾಸಾರ್ಹತೆ, ಇತ್ಯಾದಿ.

ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಸಂಕೀರ್ಣತೆಯನ್ನು ನಿರ್ಣಯಿಸಲು ಹಲವು ಮಾನದಂಡಗಳಿವೆ. ಹೆಚ್ಚಾಗಿ ನಾವು ಆಸಕ್ತಿ ಹೊಂದಿರುತ್ತೇವೆ ಬೆಳವಣಿಗೆಯ ಕ್ರಮಇನ್‌ಪುಟ್ ಡೇಟಾ ಹೆಚ್ಚಾದಂತೆ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಅಗತ್ಯವಿರುವ ಸಮಯ ಮತ್ತು ಮೆಮೊರಿ ಸಾಮರ್ಥ್ಯ. ಪ್ರತಿಯೊಂದು ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯದೊಂದಿಗೆ ಅದರ ಹೆಸರಿನ ನಿರ್ದಿಷ್ಟ ಸಂಖ್ಯೆಯನ್ನು ಸಂಯೋಜಿಸೋಣ ಗಾತ್ರ. ಉದಾಹರಣೆಗೆ, ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಗುಣಾಕಾರ ಸಮಸ್ಯೆಯ ಗಾತ್ರವು ಫ್ಯಾಕ್ಟರ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್‌ಗಳ ದೊಡ್ಡ ಗಾತ್ರವಾಗಿರಬಹುದು; ಗ್ರಾಫ್‌ನಲ್ಲಿನ ಸಮಸ್ಯೆಯ ಗಾತ್ರವು ನೀಡಿದ ಗ್ರಾಫ್‌ನ ಅಂಚುಗಳ ಸಂಖ್ಯೆ, ಇತ್ಯಾದಿ.

ಸಮಸ್ಯೆಯ ಗಾತ್ರದ ಕಾರ್ಯವಾಗಿ ಅಲ್ಗಾರಿದಮ್ ತೆಗೆದುಕೊಳ್ಳುವ ಸಮಯವನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ ಸಮಯದ ಸಂಕೀರ್ಣತೆಈ ಅಲ್ಗಾರಿದಮ್. ಸಮಸ್ಯೆಯ ಗಾತ್ರ ಹೆಚ್ಚಾದಂತೆ ಮಿತಿಯಲ್ಲಿ ಈ ಸಂಕೀರ್ಣತೆಯ ನಡವಳಿಕೆಯನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ ಲಕ್ಷಣರಹಿತ ಸಮಯದ ಸಂಕೀರ್ಣತೆ. ಅಂತೆಯೇ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ ಕೆಪ್ಯಾಸಿಟಿವ್ ಸಂಕೀರ್ಣತೆಮತ್ತು ಲಕ್ಷಣರಹಿತ ಸಾಮರ್ಥ್ಯದ ಸಂಕೀರ್ಣತೆ.

ಔಪಚಾರಿಕ ಕಂಪ್ಯೂಟೇಶನಲ್ ಮಾದರಿಗಳನ್ನು ಪರಿಗಣಿಸಲು ಪ್ರಮುಖ ಪ್ರೇರಣೆಯು ಗಣನೆಯ ಸಮಯಕ್ಕೆ ಕಡಿಮೆ ಮಿತಿಗಳನ್ನು ಪಡೆಯುವ ಸಲುವಾಗಿ ವಿವಿಧ ಸಮಸ್ಯೆಗಳ ಕಂಪ್ಯೂಟೇಶನಲ್ ಸಂಕೀರ್ಣತೆಯನ್ನು ಬಹಿರಂಗಪಡಿಸುವ ಬಯಕೆಯಾಗಿದೆ. ನಿರ್ದಿಷ್ಟ ಸಮಯಕ್ಕಿಂತ ಕಡಿಮೆ ಸಮಯದಲ್ಲಿ ನೀಡಿದ ಕಾರ್ಯವನ್ನು ಪೂರ್ಣಗೊಳಿಸುವ ಯಾವುದೇ ಅಲ್ಗಾರಿದಮ್ ಇಲ್ಲ ಎಂದು ತೋರಿಸಲು ಅಲ್ಗಾರಿದಮ್ ಎಂದರೇನು ಎಂಬುದರ ನಿಖರವಾದ ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಹೆಚ್ಚು ವಿಶೇಷವಾದ ವ್ಯಾಖ್ಯಾನದ ಅಗತ್ಯವಿದೆ. ಅಂತಹ ವ್ಯಾಖ್ಯಾನದ ಒಂದು ಉದಾಹರಣೆ ಟ್ಯೂರಿಂಗ್ ಯಂತ್ರಗಳು.

4.1.1. ಫ್ರೇಮ್ ಮತ್ತು ಫ್ರೇಮ್ ಯಂತ್ರಗಳು*

ಎರಡು ಕಾರುಗಳನ್ನು ಪರಿಗಣಿಸಿ:

1. ಮೆಮೊರಿಗೆ ಯಾದೃಚ್ಛಿಕ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುವ ಯಂತ್ರಗಳು (ಸಮಾನ ಪ್ರವೇಶ ವಿಳಾಸ ಯಂತ್ರ - RAM) ಒಂದು ಆಡ್ಡರ್ನೊಂದಿಗೆ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ರೂಪಿಸುತ್ತವೆ, ಇದರಲ್ಲಿ ಪ್ರೋಗ್ರಾಂ ಸೂಚನೆಗಳು ತಮ್ಮನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.

2. ಸಂಗ್ರಹಿತ ಪ್ರೋಗ್ರಾಂ ಮಾದರಿಯು ಮೆಮೊರಿಗೆ ಯಾದೃಚ್ಛಿಕ ಪ್ರವೇಶ ಮತ್ತು ಸೂಚನೆಗಳನ್ನು (RAM*) ಮಾರ್ಪಡಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿರುವ ಯಂತ್ರವಾಗಿದೆ.

Fig.2.9 RAM ಯಂತ್ರಗಳ ರಚನೆ (RAM*)

RAM ಗಾಗಿ, ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಮೆಮೊರಿಗೆ ಬರೆಯಲಾಗಿಲ್ಲ, ಆದ್ದರಿಂದ ಪ್ರೋಗ್ರಾಂ ಸ್ವತಃ ಮಾರ್ಪಡಿಸುವುದಿಲ್ಲ. ಪ್ರೋಗ್ರಾಂ ಎನ್ನುವುದು ಲೇಬಲ್ ಮಾಡಲಾದ ಆಜ್ಞೆಗಳ ಅನುಕ್ರಮವಾಗಿದೆ. ಅಂಕಗಣಿತದ ಸೂಚನೆಗಳು, I/O ಸೂಚನೆಗಳು, ಪರೋಕ್ಷ ವಿಳಾಸ ಸೂಚನೆಗಳು ಮತ್ತು ಶಾಖೆಯ ಸೂಚನೆಗಳಿವೆ. ಎಲ್ಲಾ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ರಿಜಿಸ್ಟರ್ ಆರ್ 0 (ಆಡ್ಡರ್) ನಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ, ಇದು ಯಾವುದೇ ಇತರ ಮೆಮೊರಿ ರಿಜಿಸ್ಟರ್‌ನಂತೆ ಅನಿಯಂತ್ರಿತ ಪೂರ್ಣಾಂಕವನ್ನು ಸಂಗ್ರಹಿಸಬಹುದು. ಪ್ರತಿಯೊಂದು ಆಜ್ಞೆಯು ಎರಡು ಭಾಗಗಳನ್ನು ಒಳಗೊಂಡಿದೆ - ಕಾರ್ಯಾಚರಣೆಯ ಕೋಡ್ ಮತ್ತು ವಿಳಾಸ. PAM ಆಜ್ಞೆಗಳು ಅಸೆಂಬ್ಲಿ ಭಾಷಾ ಆಜ್ಞೆಗಳ ಉಪವಿಭಾಗವಾಗಿದೆ; ಈ ಉಪವಿಭಾಗವನ್ನು ಇಚ್ಛೆಯಂತೆ ವಿಸ್ತರಿಸಬಹುದು, ಆದರೆ ಕಾರ್ಯಗಳ ಸಂಕೀರ್ಣತೆಯ ಕ್ರಮವು ಬದಲಾಗುವುದಿಲ್ಲ.

ಒಪೆರಾಂಡ್ ಈ ಕೆಳಗಿನ ಪ್ರಕಾರಗಳಲ್ಲಿ ಒಂದಾಗಿರಬಹುದು:

1. =iಪೂರ್ಣ ಸಂಖ್ಯೆಯೇ ಅರ್ಥ iಮತ್ತು ಅಕ್ಷರಶಃ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ;

2. i- ವಿಷಯಗಳನ್ನು ನೋಂದಾಯಿಸಿ i (iಋಣಾತ್ಮಕವಾಗಿರಬಾರದು);

3. * iಅಂದರೆ ಪರೋಕ್ಷ ವಿಳಾಸ, ಅಂದರೆ, ಒಪೆರಾಂಡ್‌ನ ಮೌಲ್ಯವು ರಿಜಿಸ್ಟರ್‌ನ ವಿಷಯವಾಗಿದೆ ,ಎಲ್ಲಿ - ರಿಜಿಸ್ಟರ್‌ನಲ್ಲಿರುವ ಪೂರ್ಣಾಂಕ I;ಒಂದು ವೇಳೆ ಜ<0, ಕಾರು ನಿಲ್ಲುತ್ತದೆ.

ನೀವು ಕಾರ್ಯಕ್ರಮದ ಮೌಲ್ಯವನ್ನು ನಿರ್ಧರಿಸಬಹುದು ಆರ್ಎರಡು ಆಬ್ಜೆಕ್ಟ್‌ಗಳನ್ನು ಬಳಸುವುದು: ಋಣಾತ್ಮಕವಲ್ಲದ ಪೂರ್ಣಾಂಕಗಳ ಸೆಟ್‌ನಿಂದ ಪೂರ್ಣಾಂಕಗಳ ಸೆಟ್‌ಗೆ ಮ್ಯಾಪಿಂಗ್ ಸಿ ಮತ್ತು "ಕಮಾಂಡ್ ಕೌಂಟರ್", ಇದು ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾದ ಮುಂದಿನ ಆಜ್ಞೆಯನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಫಂಕ್ಷನ್ ಸಿ ಆಗಿದೆ ಮೆಮೊರಿ ಪ್ರದರ್ಶನ,ಅವುಗಳೆಂದರೆ ಸಿ(i)-ರಿಜಿಸ್ಟರ್ ಸಂಖ್ಯೆಯಲ್ಲಿ ಒಳಗೊಂಡಿರುವ ಪೂರ್ಣಾಂಕ I (ವಿಷಯನೋಂದಣಿ I).

ಆರಂಭದಲ್ಲಿ с(i)=0ಎಲ್ಲರಿಗೂ i0 , ಪ್ರೋಗ್ರಾಂ ಕೌಂಟರ್ ಅನ್ನು P ಯಲ್ಲಿನ ಮೊದಲ ಸೂಚನೆಗೆ ಹೊಂದಿಸಲಾಗಿದೆ ಮತ್ತು ಔಟ್ಪುಟ್ ಟೇಪ್ ಖಾಲಿಯಾಗಿದೆ. ಮರಣದಂಡನೆಯ ನಂತರ ಕೆರಿಂದ ತಂಡ ಆರ್ಕೌಂಟರ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ (k+1)-th (ಅಂದರೆ, ಮುಂದಿನದಕ್ಕೆ) ಆಜ್ಞೆ, ವೇಳೆ ಕೆ-ನನ್ನ ತಂಡವು JUMP, HALT, JGTZ ಮತ್ತು ಮುಂತಾದ ತಂಡವಾಗಿರಲಿಲ್ಲ.

RAM* ಪ್ರೋಗ್ರಾಂ ಮೆಮೊರಿ ರೆಜಿಸ್ಟರ್‌ಗಳಲ್ಲಿ ಇದೆ. ಪ್ರತಿ RAM * ಆಜ್ಞೆಯು ಎರಡು ಸತತ ಮೆಮೊರಿ ರೆಜಿಸ್ಟರ್ಗಳನ್ನು ಆಕ್ರಮಿಸುತ್ತದೆ: ಮೊದಲ ರಿಜಿಸ್ಟರ್ ಕಾರ್ಯಾಚರಣೆಯ ಕೋಡ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ, ಎರಡನೆಯದು - ವಿಳಾಸ. RAM* ಗಾಗಿ ಸೂಚನೆಗಳ ಸೆಟ್ ಪರೋಕ್ಷ ವಿಳಾಸವನ್ನು ಹೊರತುಪಡಿಸಿ ಎಲ್ಲದರಲ್ಲೂ RAM ಗಾಗಿ ಅನುಗುಣವಾದ ಸೆಟ್‌ನೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ, ಇದನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ: ಪ್ರೋಗ್ರಾಂ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯದಲ್ಲಿ ಸೂಚನೆಗಳನ್ನು ಬದಲಾಯಿಸುವ ಮೂಲಕ RAM* ಪರೋಕ್ಷ ವಿಳಾಸವನ್ನು ಅನುಕರಿಸಬಹುದು.

ವಿದ್ಯಾರ್ಥಿಯು ಪರಿಹಾರವಾಗಿ ಅಳವಡಿಸಿದ ಅಲ್ಗಾರಿದಮ್ ಕೆಲವು ಆರಂಭಿಕ ಡೇಟಾವನ್ನು ನೀಡಿದ ಸಮಸ್ಯೆಗೆ ಸರಿಯಾದ ಉತ್ತರವನ್ನು ಉತ್ಪಾದಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವುದರ ಜೊತೆಗೆ, ಪರಿಹಾರವನ್ನು ಪರಿಶೀಲಿಸುವಾಗ, ಪ್ರೋಗ್ರಾಂನ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವನ್ನು ಸಹ ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತದೆ. ವಿನಾಯಿತಿ ಇಲ್ಲದೆ ಎಲ್ಲಾ ಕಾರ್ಯಗಳಿಗೆ ಸೂಕ್ತವಾದ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಬರೆಯುವುದು ಬಹಳ ಮುಖ್ಯ ಎಂದು ಇದರ ಅರ್ಥವಲ್ಲ (ಅವುಗಳ ಸಮರ್ಥ ಅನುಷ್ಠಾನ ಮತ್ತು ಡೀಬಗ್ ಮಾಡಲು ಸಾಕಷ್ಟು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು). ಇದರರ್ಥ ಕೆಲವು ವೈಯಕ್ತಿಕ ಕಾರ್ಯಗಳಲ್ಲಿ ಸಮಯದ ನಿಯತಾಂಕವು ಬಹಳ ಮುಖ್ಯವಾದ ಪಾತ್ರವನ್ನು ವಹಿಸುತ್ತದೆ. ಕೆಲವು ಒಲಿಂಪಿಯಾಡ್ ಸುತ್ತಿನಲ್ಲಿ ಆಪ್ಟಿಮಲಿಟಿ ಅಗತ್ಯವಿರುವ ಒಂದೇ ಒಂದು ಸಮಸ್ಯೆ ಇರುವುದಿಲ್ಲ ಎಂದು ಅದು ಸಂಭವಿಸಬಹುದು. ಆದಾಗ್ಯೂ, ಇದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿ ಸಹ ಸಂಭವಿಸಬಹುದು.

ಹೀಗಾಗಿ, ವಿದ್ಯಾರ್ಥಿಗಳು ಮತ್ತು ಶಿಕ್ಷಕರು ಇಬ್ಬರೂ ತಮ್ಮ ಪರಿಣಾಮಕಾರಿತ್ವದ ಆಧಾರದ ಮೇಲೆ ವಿಭಿನ್ನ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಹೋಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಶಾಲಾ ಮಕ್ಕಳು - ಸರಿಯಾದ ಸಮಯದಲ್ಲಿ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಹೆಚ್ಚು ಸೂಕ್ತವಾದ ಮಾರ್ಗವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು, ಶಿಕ್ಷಕರು - ಕಾರ್ಯಗಳನ್ನು ಸಮರ್ಥವಾಗಿ ಆಯ್ಕೆ ಮಾಡಲು ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಸಮಯದ ಮಿತಿಗಳನ್ನು ಹೊಂದಿಸುವಾಗ ನಿರ್ದಿಷ್ಟ ಸಮಸ್ಯೆಯ ಲೇಖಕರು ಯಾವ ಪರಿಹಾರವನ್ನು ಮನಸ್ಸಿನಲ್ಲಿಟ್ಟಿದ್ದಾರೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು.

ಅಲ್ಗಾರಿದಮ್ನ ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು, ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ, ಇದನ್ನು O ಎಂದು ಸೂಚಿಸಲಾಗುತ್ತದೆ ("ದೊಡ್ಡದ ಬಗ್ಗೆ" ಓದಿ). ವಾಸ್ತವವಾಗಿ, ಇತರ ಮೌಲ್ಯಮಾಪನಗಳಿವೆ, ಆದರೆ ವಿದ್ಯಾರ್ಥಿಯು ವಿವಿಧ ಅಲ್ಗಾರಿದಮ್‌ಗಳೊಂದಿಗೆ ಪರಿಚಯವಾಗಲು ಪ್ರಾರಂಭಿಸಿದ ಹಂತದಲ್ಲಿ, ಅವು ನಿಜವಾಗಿಯೂ ಅಗತ್ಯವಿಲ್ಲ. ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವು ಮೂಲ ಡೇಟಾ ಅಥವಾ ಅವುಗಳ ಪ್ರಮಾಣವನ್ನು ಅವಲಂಬಿಸಿ ಪ್ರೋಗ್ರಾಂ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯ ಹೆಚ್ಚಾಗುವ ಮಾದರಿಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ.

ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವು ಆರಂಭಿಕ ಡೇಟಾವನ್ನು ಅವಲಂಬಿಸಿರುವ ಅಲ್ಗಾರಿದಮ್‌ನ ಉದಾಹರಣೆಯೆಂದರೆ, N ಸಂಖ್ಯೆಯ ಎಲ್ಲಾ ನೈಸರ್ಗಿಕ ವಿಭಾಜಕಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವ ಅಲ್ಗಾರಿದಮ್. ನಿಸ್ಸಂಶಯವಾಗಿ, ದೊಡ್ಡ ಸಂಖ್ಯೆ, ಹೆಚ್ಚಿನ ಲೂಪ್ ಹಂತಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಅಗತ್ಯವಾಗಿರುತ್ತದೆ. ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವು ಇನ್‌ಪುಟ್ ಡೇಟಾದ ಪ್ರಮಾಣವನ್ನು ಅವಲಂಬಿಸಿರುವ ಅಲ್ಗಾರಿದಮ್‌ನ ಉದಾಹರಣೆಯು ಸರಣಿಯಲ್ಲಿ ದೊಡ್ಡ ಸಂಖ್ಯೆಯನ್ನು ಹುಡುಕುತ್ತದೆ. ರಚನೆಯು ಉದ್ದವಾಗಿದೆ, ಯಾವ ಸಂಖ್ಯೆಯು ದೊಡ್ಡದಾಗಿದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು ಹೆಚ್ಚಿನ ಹೋಲಿಕೆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮಾಡಬೇಕು.


ಮುಖ್ಯ ಕಾರ್ಯಗಳು:

l O (1) - ಅಂತಹ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವು ಯಾವುದೇ ಆರಂಭಿಕ ಡೇಟಾಗೆ ಪ್ರೋಗ್ರಾಂನ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವು ಸ್ಥಿರವಾಗಿರುತ್ತದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ;

l O(N) - ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆ N ಗೆ ಅನುಪಾತದಲ್ಲಿ ಬೆಳೆಯುತ್ತದೆ (ಇಲ್ಲಿ N ಕಾರ್ಯದ ನಿಯತಾಂಕ ಅಥವಾ ರಚನೆಯಲ್ಲಿನ ಅಂಶಗಳ ಸಂಖ್ಯೆಯಾಗಿರಬಹುದು).

l O(log N) - ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆಯು N ನ ಲಾಗರಿಥಮ್‌ಗೆ ಅನುಗುಣವಾಗಿ ಬೆಳೆಯುತ್ತದೆ (ಇದು ನಿಖರವಾಗಿ ಸಂಕೀರ್ಣತೆಯಾಗಿದೆ, ಉದಾಹರಣೆಗೆ, ಆದೇಶಿಸಿದ ಶ್ರೇಣಿಯಲ್ಲಿನ ಅಂಶವನ್ನು ಹುಡುಕುವಾಗ ಅರ್ಧದಷ್ಟು ವಿಧಾನ). N ಪರಿಮಾಣದ ಕ್ರಮದಿಂದ ಹೆಚ್ಚಾದಂತೆ, ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆಯು ಒಂದರಿಂದ ಬದಲಾಗುತ್ತದೆ. ಲಾಗರಿಥಮ್ನ ಮೂಲವನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ; ನಾವು ಬೆಳವಣಿಗೆಯ ಸ್ವರೂಪದಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದೇವೆ (ವೇಗ/ನಿಧಾನ), ಮತ್ತು ಸಮಯದ ನಿಖರವಾದ ಮೌಲ್ಯವಲ್ಲ.

l O(N2) - N ನ ವರ್ಗಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆಯು ಹೆಚ್ಚಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ, ಸಮಸ್ಯೆಯ ಸಂಕೀರ್ಣತೆಯನ್ನು ಅವಲಂಬಿಸಿ O(Nk) ಆಗಿರಬಹುದು.

l O(N!) - ಅಪವರ್ತನೀಯ N ಗೆ ಅನುಪಾತದಲ್ಲಿ ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆ ಹೆಚ್ಚಾಗುತ್ತದೆ.

ಎಲ್ಲಾ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಒಂದೇ ಸಮಯದಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುವುದಿಲ್ಲ ಎಂಬ ಅಂಶದಿಂದಾಗಿ ಇಲ್ಲಿ ಹಲವಾರು ಸೂಕ್ಷ್ಮತೆಗಳಿವೆ, ಆದ್ದರಿಂದ ಸಮಯದ ಸಂಕೀರ್ಣತೆಯನ್ನು ಅಂದಾಜು ಮಾಡುವಾಗ, ಹೆಚ್ಚಿನ ಸಮಯ ಅಗತ್ಯವಿರುವ ಆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.

ಹೆಚ್ಚಾಗಿ, ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ವಿವರಿಸುವಾಗ, ಅವುಗಳ ಕಾರ್ಯಾಚರಣೆಯ ಸಮಯದ ಅಂದಾಜನ್ನು ಅದರ ಶುದ್ಧ ರೂಪದಲ್ಲಿ ನೀಡಲಾಗುತ್ತದೆ, ಅಂದರೆ, ಇನ್‌ಪುಟ್/ಔಟ್‌ಪುಟ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳದೆ.

ಉದಾಹರಣೆ: ಕೀಬೋರ್ಡ್‌ನಿಂದ ಶ್ರೇಣಿಯನ್ನು ಪ್ರವೇಶಿಸುವ ಮತ್ತು ಅದರಲ್ಲಿ ದೊಡ್ಡ ಅಂಶವನ್ನು ಕಂಡುಹಿಡಿಯುವ ಪ್ರೋಗ್ರಾಂನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಅಂದಾಜು ಮಾಡೋಣ.

N+(N-1)+1=2N ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸೋಣ. ಅಂದರೆ, ಯಾವುದೇ N ಗೆ ಕಾರ್ಯಾಚರಣೆಗಳ ಸಂಖ್ಯೆ CN ಅನ್ನು ಮೀರದಂತಹ ಸ್ಥಿರತೆ ಇದೆ. ಆದ್ದರಿಂದ, ಅಲ್ಗಾರಿದಮ್ನ ಸಂಕೀರ್ಣತೆಯು O (N) ಆಗಿದೆ.

ಉದಾಹರಣೆ: ಕೀಬೋರ್ಡ್‌ನಿಂದ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಪ್ರವೇಶಿಸುವ ಮತ್ತು ಅದರಲ್ಲಿ ನಿರ್ದಿಷ್ಟ ಆಸ್ತಿಯೊಂದಿಗೆ ಅಂಶವನ್ನು ಕಂಡುಹಿಡಿಯುವ ಪ್ರೋಗ್ರಾಂನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಅಂದಾಜು ಮಾಡೋಣ (ಉದಾಹರಣೆಗೆ, ಒಂದು ನಿರ್ದಿಷ್ಟ ಮೌಲ್ಯಕ್ಕೆ ಸಮಾನವಾಗಿರುತ್ತದೆ).

ಅಲ್ಗಾರಿದಮ್ ಈ ಕೆಳಗಿನ ಹಂತಗಳನ್ನು ಒಳಗೊಂಡಿದೆ:

ನಿರ್ದಿಷ್ಟ ಆಸ್ತಿಯೊಂದಿಗೆ ಒಂದು ಅಂಶವನ್ನು ಹುಡುಕುವ ಒಂದು ಶ್ರೇಣಿಯನ್ನು (N ಇನ್‌ಪುಟ್ ಕಾರ್ಯಾಚರಣೆಗಳು) ನಮೂದಿಸುವುದು (ಎಷ್ಟು ಅದೃಷ್ಟ: ಅಂಶವು ರಚನೆಯ ಪ್ರಾರಂಭಕ್ಕೆ ಹತ್ತಿರದಲ್ಲಿ ಅಥವಾ ಕೊನೆಯಲ್ಲಿ ಇರುತ್ತದೆ; ಅಂಶವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದಿದ್ದರೆ, ನಂತರ ನೀವು ಹೀಗೆ ಮಾಡಬೇಕಾಗುತ್ತದೆ ಇದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಎಲ್ಲಾ N ಹೋಲಿಕೆಗಳನ್ನು ಮಾಡಿ) ಫಲಿತಾಂಶವನ್ನು ಔಟ್‌ಪುಟ್ ಮಾಡುವುದು.

ಉತ್ತಮ ಸಂದರ್ಭದಲ್ಲಿ, ಈ ಅಲ್ಗಾರಿದಮ್‌ಗೆ N+2 ಕಾರ್ಯಾಚರಣೆಗಳು (ಸಂಪೂರ್ಣ ರಚನೆಯ ಇನ್‌ಪುಟ್, ಒಂದೇ ಹೋಲಿಕೆ, ಔಟ್‌ಪುಟ್) ಅಗತ್ಯವಿರುತ್ತದೆ, ಕೆಟ್ಟ ಸಂದರ್ಭದಲ್ಲಿ (ಅಂತಹ ಯಾವುದೇ ಅಂಶವಿಲ್ಲದಿದ್ದಾಗ - 2N+1 ಕಾರ್ಯಾಚರಣೆಗಳು). N ಒಂದು ದೊಡ್ಡ ಸಂಖ್ಯೆಯಾಗಿದ್ದರೆ, ಉದಾಹರಣೆಗೆ ಸುಮಾರು 106, ಆಗ ಏಕತೆಯನ್ನು ನಿರ್ಲಕ್ಷಿಸಬಹುದು. ಆದ್ದರಿಂದ, ಅಲ್ಗಾರಿದಮ್ನ ಸಂಕೀರ್ಣತೆಯು O (N) ಆಗಿದೆ.

ಉದಾಹರಣೆ: ಪರ್ಯಾಯ ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು L ನ ಉದ್ದದ ಪದದ ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ನಿರ್ಧರಿಸೋಣ. ವರ್ಣಮಾಲೆಯ ಪ್ರತಿಯೊಂದು ಅಕ್ಷರಕ್ಕೂ ಅದನ್ನು ಬದಲಾಯಿಸಬೇಕಾದ ಅಕ್ಷರವನ್ನು ಬರೆಯುವ ಟೇಬಲ್ ಇರಲಿ. ಎಸ್ ವರ್ಣಮಾಲೆಯ ಅಕ್ಷರಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸೋಣ.

ಅಲ್ಗಾರಿದಮ್ ಈ ಕೆಳಗಿನ ಹಂತಗಳನ್ನು ಒಳಗೊಂಡಿದೆ:

ಎಲ್ಲಾ ಅಕ್ಷರಗಳ ಮೂಲಕ ಪದ (ಒಂದು ಕಾರ್ಯಾಚರಣೆ) ಲೂಪ್ ಅನ್ನು ನಮೂದಿಸುವುದು

1. ಪ್ರತಿ ಅಕ್ಷರಕ್ಕೂ, ಟೇಬಲ್‌ನಲ್ಲಿ ಅದರ ಬದಲಿಯನ್ನು ಹುಡುಕಿ (ಟೇಬಲ್ ಅನ್ನು ಆದೇಶಿಸದಿದ್ದರೆ ಮತ್ತು ಹುಡುಕಾಟವನ್ನು ಸುಗಮಗೊಳಿಸುವ ಯಾವುದೇ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೆ, ಕೆಟ್ಟ ಸಂದರ್ಭದಲ್ಲಿ ಹುಡುಕಿದ ಅಂಶವು ತುಂಬಾ ಇದ್ದರೆ ಒಂದು ಅಕ್ಷರಕ್ಕೆ S ಕಾರ್ಯಾಚರಣೆಗಳು ಇವೆ ಅಂತ್ಯ)


2. ಕಂಡುಬಂದ ಚಿಹ್ನೆಯ ಔಟ್ಪುಟ್

ಚಕ್ರದ ಅಂತ್ಯ

ಕಾರ್ಯಾಚರಣೆಗಳ ಒಟ್ಟು ಸಂಖ್ಯೆ 1+(S+1)*L. ಸಾಕಷ್ಟು ದೊಡ್ಡ S ಮತ್ತು L ಘಟಕಗಳ ಸಂದರ್ಭದಲ್ಲಿ ನಿರ್ಲಕ್ಷಿಸಬಹುದು, ಈ ಅಲ್ಗಾರಿದಮ್ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವು O (S*L) ಆಗಿದೆ ಎಂದು ಅದು ತಿರುಗುತ್ತದೆ.

ಉದಾಹರಣೆ: ನೈಸರ್ಗಿಕ ಸಂಖ್ಯೆ N ಅನ್ನು ಬೈನರಿ ಸಂಖ್ಯೆಯ ವ್ಯವಸ್ಥೆಗೆ (ಡೇಟಾ ಇನ್‌ಪುಟ್ ಮತ್ತು ಔಟ್‌ಪುಟ್ ಕಾರ್ಯಾಚರಣೆಗಳಿಲ್ಲದೆ) ಪರಿವರ್ತಿಸಲು ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸೋಣ.

ಅಲ್ಗಾರಿದಮ್ ಈ ಕೆಳಗಿನ ಹಂತಗಳನ್ನು ಒಳಗೊಂಡಿದೆ:

ಸಂಖ್ಯೆಯನ್ನು 2 ರಿಂದ ಭಾಗಿಸುವ ಫಲಿತಾಂಶವು 0 ಆಗುವವರೆಗೆ ಲೂಪ್ ಮಾಡಿ

1. ಸಂಖ್ಯೆಯನ್ನು 2 ರಿಂದ ಭಾಗಿಸಿ ಮತ್ತು ಉಳಿದವನ್ನು ನೆನಪಿಡಿ

2. ವಿಭಜನೆಯ ಫಲಿತಾಂಶವನ್ನು ಹೊಸ ಸಂಖ್ಯೆಯಾಗಿ ತೆಗೆದುಕೊಳ್ಳಿ

ಚಕ್ರದ ಅಂತ್ಯ

ಕಾರ್ಯಾಚರಣೆಗಳ ಒಟ್ಟು ಸಂಖ್ಯೆಯು 1+log2N ಅನ್ನು ಮೀರುವುದಿಲ್ಲ. ಆದ್ದರಿಂದ, ಈ ಅಲ್ಗಾರಿದಮ್ O(log N) ನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಹೊಂದಿದೆ.

ಒಂದು ಪ್ರೋಗ್ರಾಂ ವಿಭಿನ್ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯಗಳೊಂದಿಗೆ ಹಲವಾರು ಭಾಗಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಆಗ ದೊಡ್ಡ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವು ಚಿಕ್ಕದನ್ನು "ಹೀರಿಕೊಳ್ಳುತ್ತದೆ". ಉದಾಹರಣೆಗೆ, ನೀವು O(N) ಅರೇ ಇನ್‌ಪುಟ್, O(N2) ವಿಂಗಡಣೆ ಮತ್ತು O(N) ಔಟ್‌ಪುಟ್ ಅನ್ನು ಆರ್ಡರ್ ಮಾಡಿದ ರಚನೆಯ ಔಟ್‌ಪುಟ್ ಮಾಡಿದರೆ, ಸಂಪೂರ್ಣ ಪ್ರೋಗ್ರಾಂ O(N2) ಸಂಕೀರ್ಣತೆಯನ್ನು ಹೊಂದಿದೆ ಎಂದು ನೀವು ಹೇಳಬಹುದು.

ಅಲ್ಗಾರಿದಮ್‌ಗಳ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯಗಳ ಬಗ್ಗೆ ಜ್ಞಾನದ ಪ್ರಾಯೋಗಿಕ ಅಪ್ಲಿಕೇಶನ್ ಎರಡು ಪಟ್ಟು. ಮೊದಲನೆಯದಾಗಿ, ಒಂದು ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯಕ್ಕಾಗಿ, ಸಾಹಿತ್ಯದಲ್ಲಿ ಅದರ ಬಗ್ಗೆ ಸಂಬಂಧಿತ ಡೇಟಾ ಇದ್ದರೆ ಹೆಚ್ಚು ಸೂಕ್ತವಾದ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು. ಎರಡನೆಯದಾಗಿ, ಆರಂಭಿಕ ಡೇಟಾದ ಒಂದು ಸೆಟ್‌ನಲ್ಲಿ ತನ್ನ ಪರಿಹಾರದ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವನ್ನು ತಿಳಿದುಕೊಳ್ಳುವುದರಿಂದ, ನಿರ್ದಿಷ್ಟ ಸಮಸ್ಯೆಗೆ ಗರಿಷ್ಠ ನಿರ್ಬಂಧಗಳಿಗೆ ಅನುಗುಣವಾದ ಡೇಟಾದಲ್ಲಿ ಅದೇ ಪ್ರೋಗ್ರಾಂನ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಮಯವನ್ನು ವಿದ್ಯಾರ್ಥಿ ಅಂದಾಜು ಮಾಡಬಹುದು.

ಪ್ರಶ್ನೆಗಳು

ಪ್ರಸ್ತುತಪಡಿಸಿದ ವಸ್ತುಗಳ ಮೇಲೆ ಸ್ವಯಂ ಪರೀಕ್ಷೆಗಾಗಿ ಈ ಕಾರ್ಯಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಮತ್ತು ಕಡ್ಡಾಯವಾಗಿಲ್ಲ.

1. ಕ್ವಾಡ್ರಾಟಿಕ್ ಸಮೀಕರಣವನ್ನು ಪರಿಹರಿಸಲು ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ನಿರ್ಧರಿಸಿ.

2. ನಿರ್ದಿಷ್ಟ ಸಂಖ್ಯೆಯ ಬದಿಗಳನ್ನು ಆಧರಿಸಿ ನಿಯಮಿತ ಬಹುಭುಜಾಕೃತಿಯನ್ನು ಚಿತ್ರಿಸಲು ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ನಿರ್ಧರಿಸಿ.

3. ನಿರ್ದಿಷ್ಟ ಸ್ಥಾನದಲ್ಲಿ ಒಂದು ಅಂಶವನ್ನು ಒಂದು ಶ್ರೇಣಿಗೆ ಸೇರಿಸಲು ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ನಿರ್ಧರಿಸಿ (ಎಲ್ಲಾ ಅಂಶಗಳ ಪ್ರಾಥಮಿಕ ಬದಲಾವಣೆಯೊಂದಿಗೆ ಬಲಕ್ಕೆ ಕೊಟ್ಟಿರುವ ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಅಥವಾ ಸಮಾನವಾದ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ).

4. ಎರಡು ನೈಸರ್ಗಿಕ ಸಂಖ್ಯೆಗಳನ್ನು ಕಾಲಮ್‌ಗೆ ಸೇರಿಸಲು ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ನಿರ್ಧರಿಸಿ (A ಎಂಬುದು ಮೊದಲ ಸಂಖ್ಯೆಯ ಅಂಕೆಗಳ ಸಂಖ್ಯೆಯಾಗಿರಲಿ, B ಎರಡನೆಯ ಅಂಕೆಗಳ ಸಂಖ್ಯೆಯಾಗಿರಲಿ).

5. ಕಾಲಮ್‌ನಲ್ಲಿ ಎರಡು ನೈಸರ್ಗಿಕ ಸಂಖ್ಯೆಗಳನ್ನು ಗುಣಿಸಲು ಅಲ್ಗಾರಿದಮ್‌ನ ಸಂಕೀರ್ಣತೆಯ ಕಾರ್ಯವನ್ನು ನಿರ್ಧರಿಸಿ.